当前位置:  开发笔记 > 运维 > 正文

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

如何解决《如何强制客户端将RTP传输从UDP切换到TCP?》经验,为你挑选了2个好方法。

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

我要终止我的服务器上的UDP支持,但所有的客户端第一次尝试设置了UDP会话,后来他们通过TCP这样做......我想切换他们尽快在RTSP协议TCP.

我怎样才能做到这一点?



1> Alam..:

据我所知,服务器端没有控制传输类型的优先级.服务器应该是通用的,它应该支持RTP over UDP,RTP over TCP,RTP over RTSP和RTP over RTSP over HTTP(S).并且其客户选择哪种运输方式可供选择.传输字段首先在SETUP请求中发送

1)UDP

 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

    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)RTSP上的RTP和HTTP上的RTSP上的RTP(S)

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

我们可以看到客户端发送"传输类型"请求.

如果您想支持仅TCP服务器,您可以发送"400 Bad Request"或"461 Unsupported transport"以响应您建议的SETUP请求,或者另一种方式是发送200 OK但不发送任何RTP数据包.客户端将超时并且知道它在代理之后,它将使用RTP/AVP/TCP参数再次发送SETUP请求(不是理想情况).



2> ianhobo..:

为了扩展Android的答案,对于Android客户端,他们将始终首先尝试建立UDP连接.

对于OpenCore和StageFright,我可以确认,如果我从服务器返回"461 Unsupported Transport"以响应第一个SETUP请求进行UDP传输,则这两个客户端将立即尝试通过RTSP端口建立基于TCP的连接.

所有其他回复详述如下:http://www.ietf.org/rfc/rfc2326.txt

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有