EasyDarwin

面向企业级的流媒体平台框架

EasyDarwin开始于2013年,遵循 Apple开源License APSL,为了敏捷流媒体服务器开发和简化企业流媒体应用开发而诞生的。

详细 >>

让EasyDarwin只支持RTP over TCP传输


如何使EasyDarwin将客户端的RTP over UDP自动切换成RTP over TCP形式...

我们经常需要EasyDarwin服务器支持公网流媒体传输,但很多时候,播放器默认都是通过RTP over UDP的形式在RTSP SETUP中请求,往往都以在内网接收不到UDP数据失败结束,那么我们如何使EasyDarwin将客户端的RTP over UDP自动切换成RTP over TCP形式呢,如下方法亲测可用:
在EasyDarwin的RTSPSession::SetupRequest()方法中插入以下代码:

//
// If we don't have an RTP session yet, create one...
if (fRTPSession == NULL)
{
theErr = this->CreateNewRTPSession(theMap);
if (theErr != QTSS_NoErr)
return;
}
//查看是否为RTP Over TCP
if (fRequest->GetMethod() == qtssSetupMethod)
{
if(fRequest->GetTransportType() != qtssRTPTransportTypeTCP)
{
(void)QTSSModuleUtils::SendErrorResponse(fRequest, qtssClientUnsupportedTransport, 0);
return;
}
}
OSMutexLocker locker(fRTPSession->GetMutex());
UInt32 headerBits = fRequest->GetBandwidthHeaderBits();
if (headerBits != 0)
(void)fRTPSession->SetValue(qtssCliSessLastRTSPBandwidth, 0,&headerBits,sizeof(headerBits), QTSSDictionary::kDontObeyReadOnly );

这样,在客户端发送SETUP的时候,服务器检查是否为RTP over TCP模式,如果不是,返回461

qtssClientUnsupportedTransport,标准客户端,如VLC、ffplay都支持此返回码!

同时,还有一个地方需要修改,保证EasyDarwin返回461后,不会把当前连接断开,代码在QTSSModuleUtils::SendErrorResponse中加入如下:

QTSS_Error QTSSModuleUtils::SendErrorResponse( QTSS_RTSPRequestObject inRequest,
QTSS_RTSPStatusCode inStatusCode,
QTSS_AttributeID inTextMessage,
StrPtrLen* inStringArg)
{
static Bool16 sFalse = false;
//set RTSP headers necessary for this error response message
(void)QTSS_SetValue(inRequest, qtssRTSPReqStatusCode, 0, &inStatusCode, sizeof(inStatusCode));
if(inStatusCode != qtssClientUnsupportedTransport)
(void)QTSS_SetValue(inRequest, qtssRTSPReqRespKeepAlive, 0, &sFalse, sizeof(sFalse));
StringFormatter theErrorMsgFormatter(NULL, 0);
char *messageBuffPtr = NULL;



------------------------------ 分割线 ------------------------------
本站文章除注明转载外,均为本站原创或编辑,欢迎大家转载,但请务必注明出处,尊重他人成果,谢谢。
转载请注明:EasyDarwin;非本站文章均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。
文章中如果有错误可联系:johnson@easydarwin.org
推荐文章
安防和移动互联网行业比较火热的移动端手机......>
有人问到像美拍、秒拍这些短视频拍摄是怎么......>
最近更新
Easydarwin中大量使用gettimeofday来获取系......>
最近很多EasyDarwin爱好者提出了手机移动端......>
第一个到达的音频RTP包就将作为音频的关键帧......>
打开手机直播立即就能显示出主播视频,其实就......>
h264的功能分为两层,视频编码层(VCL)和网......>
友情链接 | 申请链接
EasyDarwin官方微信!