研究RTSP有一阵了,一直没时间总结,今天抽个空梳理一下吧!!
我使用TCP承载RTSP,所以这里只探讨TCP下RTSP流控制方法的传输。
最基本的方法:OPTIONS,DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,ANNOUCE等等,这些方法看看RFC就都知道了,我想说说各个方法需要注意的或是有什么别的用途,有不对的地方还请指正。
1. OPTIONS
这个方法在建立RTSP连接时不是必须的,它是向Server端询问所能提供的服务。这个方法可以在任何时候发送,不影响Server的状态,因此可以把它作为心跳消息指定时间间隔进行发送,保证该RTSP连接正常。
2. DESCRIBE
该方法是向服务器询问请求媒体的详细信息,Server端使用SDP返回媒体的详细描述。这里详细说说SDP的组成。
一个最简单的SDP包括v(协议版本),o(会话识别符或会话创建者的名字),s(会话名),t(会话活动时间),m(媒体名字和传输时间)
媒体信息中包含媒体传输协议和媒体格式
PT media type clock rate
31 H261 V 90,000
32 MPV V 90,000 (这就是例子中的RTP/AVP类型)
33 MP2T AV 90,000
34 H263 V 90,000
72-76 reserved N/A N/A
77-95 unassigned
96-127 dynamic
3. SETUP
该方法用来通信双方协商传输参数,比如client_port,单播还是组播等等,Server则分配唯一标识本次会话的sessionid,分配本次会话需要的资源。
4. PLAY
该方法开始传输client请求的媒体数据,并且播控都是通过该方法携带的参数来实现,比如快进、快退、跳转等功能。
5. PAUSE
实现暂停
6. TEARDOWN
会话结束,释放资源
7. ANNOUCE
该方法可以由Server发给client端,通知媒体播放完毕,或快进到文件尾,或快退到文件头等,以便client端进行相应的动作,比如断开连接。
其中媒体数据流打成RTP包后通过UDP传输,测试时使用的vlc可以正常播放,但是暴风影音,QuickTime等播放器发送命令到SETUP后没有继续发送PLAY消息,网上查了查原因,暴风影音目前只支持使用TCP方式发送RTP封装数据,暂不支持UDP方式。
如果只是协议,使用起来倒没什么困难的,关键是涉及到整个iptv系统就比较复杂了。