LiveRTMP

##RTSP视频源进行RTMP直播

/* NVSource从RTSPClient获取数据后回调给上层 */
int Easy_APICALL __RTSPSourceCallBack( int _chid, void *_chPtr, int _mediatype, char *pbuf, RTSP_FRAME_INFO *frameinfo)
{if (NULL != frameinfo){if (frameinfo->height==1088)      frameinfo->height=1080;else if (frameinfo->height==544)    frameinfo->height=540;}Easy_Bool bRet = 0;int iRet = 0;//目前只处理视频if (_mediatype == EASY_SDK_VIDEO_FRAME_FLAG){if(frameinfo && frameinfo->length){if( frameinfo->type == EASY_SDK_VIDEO_FRAME_I){if(g_rtmpPusher.rtmpHandle == 0){g_rtmpPusher.rtmpHandle = EasyRTMP_Create();bRet = EasyRTMP_Connect(g_rtmpPusher.rtmpHandle, SRTMP);if (!bRet){printf("Fail to EasyRTMP_Connect ...\n");}EASY_MEDIA_INFO_T mediaInfo;memset(&mediaInfo, 0, sizeof(EASY_MEDIA_INFO_T));mediaInfo.u32VideoFps = 25;mediaInfo.u32AudioSamplerate = 8000;iRet = EasyRTMP_InitMetadata(g_rtmpPusher.rtmpHandle, &mediaInfo, 1024);if (iRet < 0){printf("Fail to InitMetadata ...\n");}}EASY_AV_Frame avFrame;memset(&avFrame, 0, sizeof(EASY_AV_Frame));avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;avFrame.u32AVFrameLen = frameinfo->length;avFrame.pBuffer = (unsigned char*)pbuf;avFrame.u32VFrameType = EASY_SDK_VIDEO_FRAME_I;avFrame.u32TimestampSec = frameinfo->timestamp_sec;avFrame.u32TimestampUsec = frameinfo->timestamp_usec;iRet = EasyRTMP_SendPacket(g_rtmpPusher.rtmpHandle, &avFrame);if (iRet < 0){printf("Fail to EasyRTMP_SendH264Packet(I-frame) ...\n");}else{printf("I");}}else{if(g_rtmpPusher.rtmpHandle){EASY_AV_Frame avFrame;memset(&avFrame, 0, sizeof(EASY_AV_Frame));avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;avFrame.u32AVFrameLen = frameinfo->length-4;avFrame.pBuffer = (unsigned char*)pbuf+4;avFrame.u32VFrameType = EASY_SDK_VIDEO_FRAME_P;avFrame.u32TimestampSec = frameinfo->timestamp_sec;avFrame.u32TimestampUsec = frameinfo->timestamp_usec;iRet = EasyRTMP_SendPacket(g_rtmpPusher.rtmpHandle, &avFrame);if (iRet < 0){printf("Fail to EasyRTMP_SendH264Packet(P-frame) ...\n");}else{printf("P");}}}             }   }else if (_mediatype == EASY_SDK_AUDIO_FRAME_FLAG){EASY_AV_Frame  avFrame;memset(&avFrame, 0x00, sizeof(EASY_AV_Frame));avFrame.u32AVFrameFlag = EASY_SDK_AUDIO_FRAME_FLAG;avFrame.u32TimestampSec = frameinfo->timestamp_sec;avFrame.u32TimestampUsec = frameinfo->timestamp_usec;if(frameinfo->codec == EASY_SDK_AUDIO_CODEC_AAC){avFrame.pBuffer = (Easy_U8*)(pbuf);avFrame.u32AVFrameLen  = frameinfo->length; printf("*");iRet = EasyRTMP_SendPacket(g_rtmpPusher.rtmpHandle, &avFrame);}else if ((frameinfo->codec == EASY_SDK_AUDIO_CODEC_G711A) || (frameinfo->codec == EASY_SDK_AUDIO_CODEC_G711U) || (frameinfo->codec == EASY_SDK_AUDIO_CODEC_G726)){if(EasyInitAACEncoder(frameinfo) == 0){memset(g_rtmpPusher.m_pAACEncBufer, 0, 64*1024);unsigned int iAACBufferLen = 0;if(Easy_AACEncoder_Encode(g_rtmpPusher.m_pAACEncoderHandle, (unsigned char*)pbuf,  frameinfo->length, g_rtmpPusher.m_pAACEncBufer, &iAACBufferLen) > 0){printf("*");avFrame.pBuffer = (Easy_U8*)(g_rtmpPusher.m_pAACEncBufer);avFrame.u32AVFrameLen  = iAACBufferLen; iRet = EasyRTMP_SendPacket(g_rtmpPusher.rtmpHandle, &avFrame);}}}}return 0;
}

获取更多信息

邮件:support@liveqing.com

技术交流QQ群:947137753

咨询电话:15156896292

LiveQing视频流媒体无插件直播方案:www.liveqing.com

Copyright © LiveQing Team 2016-2019

LiveRTMP推送RTSP视频源进行RTMP直播相关推荐

  1. ffmpeg推送rtsp流或者视频文件到rtsp服务器

    1.推送rtsp视频流 ffmpeg -i rtsp://admin:admin1234@192.168.1.64:554/h264/ch1/sub/av_stream -codec copy -f ...

  2. 2023-03-05:ffmpeg推送本地视频至lal流媒体服务器(以RTMP为例),请用go语言编写。

    2023-03-05:ffmpeg推送本地视频至lal流媒体服务器(以RTMP为例),请用go语言编写. 答案2023-03-05: 使用 github.com/moonfdd/ffmpeg-go 库 ...

  3. html页面如何访问rtsp视频源

    基本知识: 1. 目前web不能直接访问rtsp视频源(不考虑安装插件的情况) 2. html页面播放视频的四种方式 1.)视频文件(如mpeg,webm,部署最简单,实时性较差) 2.)webrtc ...

  4. webscoket推送rtsp视频流

    webscoket推送rtsp视频流(海康视频) 下载地址: websocket推送rtsp视频流完整版下载

  5. JavaCV-FFmpeg软封装多线程实现录制或推送rtsp流

    文章目录 前言 一.JavaCV和FFmpeg是什么? 二.录制和推流如何实现? 三.遇到的问题 四.如何实现 五.总结 前言 在一个月之前,有使用过FFmpeg录制过rtsp流的视频.但由于使用的是 ...

  6. 小程序消息推送(含源码)java实现小程序推送,springboot实现微信消息推送

    本文是比较老得技术来实现,用最新技术实现小程序推送,请看 5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码) 也可以看最新的视频讲解:https://edu.csd ...

  7. in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...

    前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,<借助云开发实现小程序订阅消息和模板消息的推送功能>是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序 ...

  8. 撸一个简易聊天室,不信你学不会实时消息推送(附源码)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐 19 个 github 超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 分不清轮询.长轮询? ...

  9. php主动推送弹幕_源起网-织梦发布文档主动百度推送熊掌推送批量推送

    源起网-织梦发布文档主动百度推送熊掌推送批量推送 环境要求 PHP必须开启了curl扩展 百度主动推送(实时)可以缩短百度爬虫发现您站点新链接的时间,使新发布的页面可以在第一时间被百度收录 织梦程序我 ...

最新文章

  1. BREW 计费模式概览
  2. 关闭Bind 递归查询功能
  3. ABAP简介以及OpenSQL与NativeSQL的区别
  4. 为什么不推荐使用存储过程
  5. javascript --- 原生的拖拽功能实现
  6. 前端学习(2424):关于问题的解决方式
  7. Springboot整合ES
  8. linux内核编译ccflag,Linux内核模块编译失败
  9. 一行代码,能导入所有Python库!
  10. 一种基于复制粘贴的cam350邮票孔拼版教程(二)导出gerber
  11. 计算机专业老师教案,技能大赛-2015年全国中等职业学校计算机应用基础及计算机类专业课程“创新杯”教师信息化教学设计和说课比赛总结...
  12. springboot集成xxl-job
  13. 并行数据转换为串行数据的转换器
  14. javaweb实现支付宝扫码支付完整流程
  15. ubuntu绘图软件
  16. python编程读写文件内容_Python编程中对文件和存储器的读写示例
  17. Java 翻转字符串 将字符串逆序
  18. sql2000安装程序配置服务器失败
  19. Ubuntu系统镜像下载(清华大学开源软件镜像站)(ubuntu-20.04-desktop-amd64.iso
  20. 2019ICPC南昌总结+今年总结

热门文章

  1. Z字型变幻,整数反转
  2. 国家2级计算机考试准考证号
  3. 数据分析中的数据处理以及特征分析
  4. 新编php找工作常见面试笔试汇总
  5. 红米note9pro和华为Nova8哪个好 红米note9pro和华为Nova8哪个更加值得入手
  6. html唯美登录+樱花落下实现(复制即用)
  7. openwrt配置内核驱动_OpenWrt添加驱动模块
  8. Go语言实现获取有道网页结果
  9. 什么叫单模光纤_什么是OS1,OS2的单模光纤
  10. 关于0xffffffff 到底是什么意思?