首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制客户端将RTP传输从UDP切换到TCP?

如何强制客户端将RTP传输从UDP切换到TCP?
EN

Stack Overflow用户
提问于 2010-03-09 18:21:02
回答 6查看 29.4K关注 0票数 7

如果客户端想要观看我的RTSP服务器上的流,它首先会尝试通过UDP协议设置流。我怎么能告诉它我的服务器只支持RTP/AVP/TCP,它应该切换传输?

我想在我的服务器上终止UDP支持,但所有客户端首先尝试通过UDP建立会话,然后通过TCP建立会话……并且我想在RTSP协议中尽快将它们转换成TCP。

我该怎么做呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-09 18:40:35

OK,一种方法是发送"400 Bad Request“作为对客户端设置请求的响应……并自动切换到TCP协议。这是针对RealOne和QuickTime的。

但我不确定它是否适用于所有其他玩家,因为这是一个黑客攻击。

还有其他的想法吗?

票数 4
EN

Stack Overflow用户

发布于 2010-08-21 16:43:35

据我所知,服务器端没有对传输类型首选项的控制。服务器应该是通用的它应该支持RTP over UDP,RTP over TCP,RTP over RTSP和RTP over RTSP over HTTP(S)。它的客户选择选择哪种传输方式。首先在设置请求中发送传输字段

1) UDP

代码语言:javascript
复制
 C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0
               CSeq: 1
               Transport: RTP/AVP/UDP;unicast;client_port=3056-3057

2) TCP

代码语言:javascript
复制
    C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0
               CSeq: 1
               Transport: RTP/AVP/TCP;unicast;client_port=3056-3057

3) RTP over RTSP和RTP over RTSP over HTTP(S)

代码语言:javascript
复制
S->C: RTSP/1.0 200 OK
           CSeq: 2
           Date: 05 Jun 1997 18:57:18 GMT
           Transport: RTP/AVP/TCP;interleaved=0-1

我们可以看到,"Transport type“请求是由客户端发送的。

如果你想只支持TCP服务器,你可以按照你的建议发送"400 Bad Request“或"461 Unsupported transport”来响应SETUP请求,或者另一种方式是发送200OK但不传输任何RTP数据包。客户端将超时并知道它落后于代理,并且它将再次发送带有RTP/AVP/TCP参数的设置请求(不是理想情况)。

票数 8
EN

Stack Overflow用户

发布于 2012-03-19 04:10:46

为了扩展android的答案,对于Android客户端,他们总是会首先尝试建立UDP连接。

对于OpenCore和StageFright,我可以确认,如果我从我的服务器返回"461不支持的传输“,以响应第一个用于UDP传输的设置请求,那么这两个客户端将立即尝试通过RTSP端口建立基于TCP的连接。

所有其他响应都在这里详细介绍:http://www.ietf.org/rfc/rfc2326.txt

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2408233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档