RTSP(Real Time Streaming Protocol)实时流协议,是TCP/IP协议体系中的一个应用层协议。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。 RTSP没有“连接”这个概念,而由RTSP会话(session)代替(服务器端保持一个由识别符标记的会话)。RTSP会话没有绑定传输层连接 (如TCP连接)。在RTSP会话期间,RTSP客户端可以打开或关闭多个到服务器端的可靠传输连接以发出RTSP请求。但也可以使用无连接传输协议,比 如UDP,来发送RTSP请求。 rtsp前缀要求使用可靠协议(在Internet上指TCP协议)发出命令,而rtspu前缀则说明使用不可靠协议(在Internet指UDP协议)。 RTSP建立并控制一个或几个时间同步的连续流媒体,比如音频或视频。尽管在连续媒体流中有可能插入控制流但RTSP本身通常并不发送连续媒体流。 换言之,RTSP充当多媒体服务器的“网络遥控器”。RTSP所控制的流可能用到RTP,但RTSP的操作并不依赖用来传送连续媒体的传输机制。实时流协 议在语法和操作上有意地类似于HTTP/1.1,但有重要的不同。 RTSP引入了很多新方法并且有不同的协议标识符。
方法描述OPTIONS:OPTIONS请求在任何时候都可能产生,例如:当一个客户端准备尝试一个非标准的请求时。它不影响服务器的状态。 DESCRIBE:服务器取得请求URL所标识的表示或者媒体对象的描述。它可能使用同意头部(Accept header)来指出客户端能理解的描述格式。服务器以所请求的资源的描述作为回应。DESCRIBE 回复-响应对继续了RTSP的媒体初始化阶段。DESCRIBE响应必须包含它所描述的资源的所有媒体初始化信息。 ANNOUNCE:该方法方法有两个目的: 当从客户端发往服务器端,ANNOUNCE向服务器端上传请求URL所标识的表示或媒体对象的描述。当从服务器端发往客户端,ANNOUNCE实时更新会话描述。 当一个新的媒体流加入一个表示(例如:在一个现场表示活动期间)时,整个表示而不仅是所增加的部分,应该被重发,以便部分删除。 SETUP:让服务器给流分配资源,启动RTSP会话。 PLAY与RECORD:启动SETUP所分配的流的数据传输。 PAUSE:临时暂停流,而不释放服务器资源。 GET_PARAMETER:请求用于获取URI所标识的一个表示或者流的参数的值。回复和响应的内容被留给具体实现。没有实体的GET_PARAMETER可能被用于测试客户端或者服务器端是否现场直播("ping")。 TEARDOWN:释放流占用的资源,RTSP会话停止,从服务器端退出。
在VLC播放器中的抓包(正常播放)-vlcServer(粉红色部分是客户端发出的请求,黑色部分是服务器的响应,//后面是注释) OPTIONS rtsp://219.219.218.224:554/m RTSP/1.0 CSeq: 1 User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Server: vlc 1.0.1 Content-Length: 0 Cseq: 1 Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER DESCRIBE rtsp://219.219.218.224:554/m RTSP/1.0 CSeq: 2 Accept: application/sdp User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Content-type: application/sdp Server: VLC Server Content-Length: 544 CSeq: 2 Cache-Control: no-cache v=0 //协议版本 o=- 78967746000 3 IN IP4 219.219.218.224 //拥有者,即会话的创建者 c=IN IP4 0.0.0.0 //连接信息,此处表示本机 t=0 0 //如果stop-time设置为0,则会话没有时间限制。如果start-time也设置为0,则会话被认为是永久的. a=tool:vlc 1.0.1 //创建任务描述的工具的名称及版本号 a=range:npt=0-7.741 //视频的正常播放范围 m=audio 0 RTP/AVP 96 //音频流使用的协议 m=<media> <port>/<number of ports> <proto> <fmt> … a=rtpmap:96 mpeg4-generic/32000 //a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>] a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1290; SizeLength=13;IndexLength=3; IndexDeltaLength=3; Profile=1; //a=fmtp:<format> <format specific parameters> a=control:rtsp://219.219.218.224:554/m/trackID=0 m=video 0 RTP/AVP 97 //视频流使用的协议 a=rtpmap:97 MP4V-ES/90000 a=fmtp:97 profile-level-id=3; config=000001b022000001b50900000100000001200084456a285020f0a300; a=control:rtsp://219.219.218.224:554/m/trackID=1 SETUP rtsp://219.219.218.224:554/m/trackID=0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=3106-3107 User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Transport: RTP/AVP/UDP;client_port=3106-3107 Server: VLC Server Content-Length: 0 Cseq: 3 Cache-Control: no-cache Session: 11478 SETUP rtsp://219.219.218.224:554/m/trackID=1 RTSP/1.0 CSeq: 4 Transport: RTP/AVP;unicast;client_port=3108-3109 Session: 11478 User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Transport: RTP/AVP/UDP;client_port=3108-3109 Server: VLC Server Content-Length: 0 Cseq: 4 Cache-Control: no-cache Session: 11478 PLAY rtsp://219.219.218.224:554/m RTSP/1.0 CSeq: 5 Session: 11478 Range: npt=0.000- User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Server: VLC Server Content-Length: 0 CSeq: 5 Cache-Control: no-cache Session: 11478;timeout=5 GET_PARAMETER rtsp://219.219.218.224:554/m RTSP/1.0 CSeq: 6 Session: 11478 User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Server: VLC Server Content-Length: 0 CSeq: 6 Cache-Control: no-cache TEARDOWN rtsp://219.219.218.224:554/m RTSP/1.0 CSeq: 7 Session: 11478 User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09) RTSP/1.0 200 OK Server: VLC Server Content-Length: 0 CSeq: 7 Cache-Control: no-cache Session: 11478;timeout=5 以上是利用RTSP协议进行流媒体播放的一个完整过程,其中setup,play是必须用到的方法,其它方法是可选。上述红色的标注部分是对sdp协议的一些主要参数进行的解释。 在RealPlayer中(无法播放)-VlcServerOPTIONS rtsp://219.219.218.224:554 RTSP/1.0 CSeq: 1 User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32) Supported: ABD-1.0 ClientChallenge: ffa50e558e3986073c2da8888484e48c ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686 CompanyID: 7S3jofzYT7kR2j8sdJG0vA== GUID: 00000000-0000-0000-0000-000000000000 PlayerStarttime: [28/09/2009:19:04:13 08:00] Pragma: initiate-session RegionData: 0 RTSP/1.0 200 OK Server: vlc 1.0.1 Content-Length: 0 Cseq: 1 Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER DESCRIBE rtsp://219.219.218.224:554/jiao RTSP/1.0 CSeq: 2 Accept: application/sdpUser-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32) Bandwidth: 3531079 ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686 GUID: 00000000-0000-0000-0000-000000000000 Language: zh-CN, zh, * RegionData: 0 Require: com.real.retain-entity-for-setup SupportsMaximumASMBandwidth: 1 RTSP/1.0 200 OK Content-type: application/sdp Server: VLC Server Content-Length: 381 CSeq: 2 Cache-Control: no-cache v=0 o=- 435378000 3 IN IP4 219.219.218.224 c=IN IP4 0.0.0.0 t=0 0 a=tool:vlc 1.0.1 a=range:npt=0-203.000 m=audio 0 RTP/AVP 14 a=rtpmap:14 MPA/90000 a=control:rtsp://219.219.218.224:554/jiao/trackID=0 m=video 0 RTP/AVP 96 a=rtpmap:96 MP4V-ES/90000 a=fmtp:96 profile-level-id=3; config=0000012008868400670c4e10c0518f; a=control:rtsp://219.219.218.224:554/jiao/trackID=1 SETUP rtsp://219.219.218.224:554/jiao/trackID=0 RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=6970-6971;mode=play,RTP/AVP/TCP;unicast;mode=play User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32) RTSP/1.0 200 OK Transport: RTP/AVP/UDP;client_port=6970-6971 //此处没有返回服务器端口
Server: VLC Server Content-Length: 0 Cseq: 3 Cache-Control: no-cache Session: 19169 TEARDOWN rtsp://219.219.218.224:554 RTSP/1.0 CSeq: 4 User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32) Session: 19169 RTSP/1.0 404 Not found Content-Length: 311 Content-Type: text/html 经过抓包发现,在KMPlayer,暴风影音中的流媒体播放是借用了Real的库函数,所以与RealPlayer效果是一样的。 (yuyin86) |