用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


Live555的版本:修改live555支持mpeg2ts RTSP拉流,附代码


关注EasyDarwin开源项目:

WEB: www.easydarwin.org

Github: https://github.com/easydarwin


转载于:https://www.cnblogs.com/babosa/p/9217955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值