Darwin Streaming Server 支持UDP穿透
来源:互联网 发布:卡牌游戏常用算法 编辑:程序博客网 时间:2024/06/06 03:36
项目要求使用RTSP协议进行点播直播,
找了很多开源流媒体服务器,最后决定使用Drawin做服务器。
但是在部署中发现,Drawin不支持Client在NAT后面的情况。 尽管RTSP Client已经发出了RTSP的打洞包。
还好, Darwin 是开源的 ,直接上手修改代码。
其实修改的部分很少,也很简单。
就是RTPStream.cpp
RTPStream::Write 方法
现实修改RTCP部分
+ expand sourceview plaincopy to clipboardprint?
if ( fTransportType == qtssRTPTransportTypeTCP )// write out in interleave format on the RTSP TCP channel
{
err = this->InterleavedWrite( thePacket->packetData, inLen, outLenWritten, fRTCPChannel );
}
else if ( inLen > 0 )
{
(void)fSockets->GetSocketB()->SendTo(fRemoteAddr, fRemoteRTCPPort, thePacket->packetData, inLen);
}
if ( fTransportType == qtssRTPTransportTypeTCP )// write out in interleave format on the RTSP TCP channel
{
err = this->InterleavedWrite( thePacket->packetData, inLen, outLenWritten, fRTCPChannel );
}
else if ( inLen > 0 )
{
(void)fSockets->GetSocketB()->SendTo(fRemoteAddr, fRemoteRTCPPort, thePacket->packetData, inLen);
}
修改为
view plaincopy to clipboardprint?
01. if ( fTransportType == qtssRTPTransportTypeTCP )// write out in interleave format on the RTSP TCP channel
02. {
03. err = this->InterleavedWrite( thePacket->packetData, inLen, outLenWritten, fRTCPChannel );
04. }
05. else if ( inLen > 0 )
06. {
07.UInt32 iRemoteAddr=0;
08.UInt16 iRemotePort=0;
09.char szBuff[64];
10.UInt32 iBufLen=sizeof(szBuff);
11.UInt32 iRecvLen=0;
12.(void)fSockets->GetSocketB()->RecvFrom(&iRemoteAddr,&iRemotePort,szBuff,iBufLen,&iRecvLen);
13.if (iRemoteAddr==fRemoteAddr
14. &&iRemotePort!=0
15. &&iRecvLen>0)
16.{
17. fRemoteRTCPPort=iRemotePort;
18.}
19.
20. (void)fSockets->GetSocketB()->SendTo(fRemoteAddr, fRemoteRTCPPort, thePacket->packetData, inLen);
21. }
if ( fTransportType == qtssRTPTransportTypeTCP )// write out in interleave format on the RTSP TCP channel
{
err = this->InterleavedWrite( thePacket->packetData, inLen, outLenWritten, fRTCPChannel );
}
else if ( inLen > 0 )
{
UInt32 iRemoteAddr=0;
UInt16 iRemotePort=0;
char szBuff[64];
UInt32 iBufLen=sizeof(szBuff);
UInt32 iRecvLen=0;
(void)fSockets->GetSocketB()->RecvFrom(&iRemoteAddr,&iRemotePort,szBuff,iBufLen,&iRecvLen);
if (iRemoteAddr==fRemoteAddr
&&iRemotePort!=0
&&iRecvLen>0)
{
fRemoteRTCPPort=iRemotePort;
}
(void)fSockets->GetSocketB()->SendTo(fRemoteAddr, fRemoteRTCPPort, thePacket->packetData, inLen);
}
以类似的方法修改RTP的发送部分
view plaincopy to clipboardprint?
01.if ( fTransportType == qtssRTPTransportTypeTCP ) // write out in interleave format on the RTSP TCP channel
02. err = this->InterleavedWrite( thePacket->packetData, inLen, outLenWritten, fRTPChannel );
03.else if ( fTransportType == qtssRTPTransportTypeReliableUDP )
04. err = this->ReliableRTPWrite( thePacket->packetData, inLen, theCurrentPacketDelay );
05.else if ( inLen > 0 )
06. (void)fSockets->GetSocketA()->SendTo(fRemoteAddr, fRemoteRTPPort, thePacket->packetData, inLen);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zblue78/archive/2010/06/24/5692595.aspx
- Darwin Streaming Server 支持UDP穿透
- Darwin Streaming Server 支持UDP穿透
- Darwin Streaming Server 支持UDP穿透
- Darwin Streaming Server 支持UDP打洞
- Darwin Streaming Server
- Darwin Streaming Server安装
- Darwin Streaming Server 简介
- Darwin Streaming Server编译
- Darwin Streaming Server 介绍
- DSS(Darwin Streaming Server)任务一:让直播支持拖放
- Darwin streaming server 流媒体服务器
- Darwin Streaming Server Relay问题
- Darwin Streaming Server程序结构分析
- Darwin-Streaming-Server On Ubuntu
- Darwin Streaming Server 安装 配置
- Darwin Streaming Server安装教程
- Darwin Streaming Server安装教程
- Darwin Streaming Server 安装流程
- Android使用Ant自动编译签名打包详解
- 用非递归方法遍历二叉树(附Morris算法)
- WORD菜单栏不显示
- 关于全排列组合算法
- 十、Hiberante多对多关联关系(单向)
- Darwin Streaming Server 支持UDP穿透
- android中跨进程通讯的4种方式
- STL中的sort对结构体排序
- JEditorPane实现简易浏览器
- Ubuntu下如何修改文件的权限------chmod的妙用
- 使用C# 2.0泛型实现单例模式重用
- 菜鸟入门zend framework;
- DISP_FUNCTION
- onclick()在struts 2中使用时传递参数