用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务
对RTSP/RTP的转发和分发一直都是EasyDarwin的基础功能,尤其是在安防行业中,EasyDarwin非常贴合安防监控的需求,但一直未尝试用EasyDarwin进行IPTV的RTSP流进行转发,直接测试了一下转发功能,果然是不行的,那么我们就需要进行逐步的问题分析和解决了:
1、先通过RTSPClient将数据获取到本地:
我们在尝试用EasyRTSPClient命令行直接请求IPTV RTSP流:
从上面可以看到,live555直接请求IPTV RTSP时,IPTV服务器返回给客户端的sdp信息中的m=字段,这个媒体类型live555是无法识别的,也就是MP2T(mpeg2-ts)流,从抓包来看,电信IPTV也就是将ts流通过RTP进行打包分发的,而我们的转发服务器也不需要经过任何的RTP组包和封包流程,直接将获取到的RTP数据进行转发就行了,那么,我们第一步就是进行live555的改造,让live555能够识别MP2T数据流即可:
这样的话,我们就能够将IPTV的RTSP TS流获取到本地了;
2、EasyDarwin进行RTSP/RTP转发
EasyDarwin进行RTSP/RTP的转发流程中,RTSP的转发指的是sdp的转发,我们将RTSPClient中输出的RTP数据,直接提交给EasyDarwin进行分发就可以了,这个过程我们参考的是RTSPSession::HandleIncomingDataPacket()方法的流程做的,将数据提交给QTSSReflectorModule进行分发就可以了:
QTSS_Error QTSSCallbacks::QTSS_ReflectRTPTrackData(QTSS_Object inObject, const char* inData, UInt32 inDataLen, UInt32 inTrackID) { QTSS_RoleParams packetParams; packetParams.rtspRelayingDataParams.inRTSPSession = inObject; packetParams.rtspRelayingDataParams.inPacketData = (char*)inData; packetParams.rtspRelayingDataParams.inPacketLen = inDataLen; packetParams.rtspRelayingDataParams.inChannel = inTrackID*2; UInt32 fCurrentModule = 0; UInt32 numModules = QTSServerInterface::GetNumModulesInRole(QTSSModule::kRTSPRelayingDataRole); for (; fCurrentModule < numModules; fCurrentModule++) { QTSSModule* theModule = QTSServerInterface::GetModule(QTSSModule::kRTSPRelayingDataRole, fCurrentModule); (void)theModule->CallDispatch(QTSS_RTSPRelayingData_Role, &packetParams); } return 0; }
EasyDarwin IPTV转发版本下载:
http://pan.baidu.com/s/1jGZBB98
关注EasyDarwin开源项目:
WEB: www.easydarwin.org
Github: https://github.com/easydarwin
相关文章
- “倔驴”一个h5小游戏的实现和思考(码易直播)——总结与整理
- 电视台直播
- 出专辑啦 ! 从入门实操演示到进阶直播答疑,玩转容器服务 so easy ~
- 干货分享:细说双 11 直播背后的压测保障技术
- 基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案
- EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务运行出现“请求服务不存在或已停止”
- EasyNVR无插件H5/HLS/m3u8直播解决方案中Windows系统服务启动错误问题的修复:EasyNVR_Service 服务因 函数不正确。 服务特定错误而停止。
- EasyDSS+EasyNVR实现幼儿园直播/工地直播等分权限观看直播视频的功能
- 更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求
- EasyNVR H5无插件摄像机直播解决方案前端解析之:引用videojs无法自动播放
- EasyHLS实现将IPCamera摄像机的RTSP流转成HLS(ts+m3u8)直播输出
- 用EasyClient开源项目采集Windows摄像头/麦克风的音视频进行RTSP直播
- EasyDarwin+ffmpeg进行PC(摄像头+麦克风)流媒体直播服务
- python动态创建管道实现直播平台服务程序设计
- HLS直播技术方案及踩过的坑
- 老杨说运维 | 2022直播首秀,与你共探智能运维建设之路