RTSP网络流媒体数据控制协议实例分析一

来源:互联网 发布:淘宝哪家高仿鞋质量好 编辑:程序博客网 时间:2024/05/18 00:40
一、RTSP协议概述

RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。 

RTSP用于建立媒体流的控制传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体流(数据)交织在一起传送,但一般情况RTSP并不用于转送媒体流数据,而是通过RTP/RTCP协议来完成流数据传输。 


二、一次基本的RTSP操作过程

1. 客户端Client连接到流服务器Server并发送一个RTSP描述命令(DESCRIBE)。注意,这个时候server端应该已经开始发送媒体流数据。

2. 流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。

3. 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP)RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。

4. 流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。 

5. 在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。

6. 客户端可发送一个终止命令(TERADOWN)来结束流媒体会话

三、项目实例

下面是本人一个高清视频传输的项目打印信息,供大家学习参考。

 

client command: /home/root/rtsp_client -F /tmp/clientCh0.h264 -b 1843200 rtsp://192.168.1.3:8554/avstream &

Opening connection to 192.168.1.3, port 8554...

 

...remote connection opened

C-->S 用于得到服务器提供的可用方法; 

Sending request: OPTIONS rtsp://192.168.1.3:8554/avstream RTSP/1.0

CSeq: 2

User-Agent: /home/root/rtsp_client (LIVE555 Streaming Media v2014.12.17)

 

S->C 服务器的回应信息会在Public字段列出提供的方法

Received 125 new bytes of response data.

Received a complete OPTIONS response:

RTSP/1.0 200 OK

Server: VLC/2.0.10

Content-Length: 0

Cseq: 2

Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER

 

C-->S 客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。

Sending request: DESCRIBE rtsp://192.168.1.3:8554/avstream RTSP/1.0

CSeq: 3

User-Agent: /home/root/rtsp_client (LIVE555 Streaming Media v2014.12.17)

Accept: application/sdp  用于指定客户端可以接受的媒体描述信息类型

 

S->C 服务器回应URI指定媒体的描述信息

Received 210 new bytes of response data.

Have received 210 total bytes of a DESCRIBE RTSP response; awaiting 708 bytes more.

Received 708 new bytes of response data.

Received a complete DESCRIBE response:

RTSP/1.0 200 OK

Server: VLC/2.0.10

Date: Wed, 17 Jun 2015 12:19:22 GMT

Content-Type: application/sdp

Content-Base: rtsp://192.168.1.3:8554/avstream

Content-Length: 708

Cache-Control: no-cache

Cseq: 3  指定了RTSP请求回应对应的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。 

 

具体的SDP信息

v=0

o=- 15648852339074415390 15648852339074415390 IN IP4 ma-virtual-machine

s=Unnamed

i=N/A

c=IN IP4 0.0.0.0

t=0 0

a=tool:vlc 2.0.10

a=recvonly

a=type:broadcast

a=charset:UTF-8

a=control:rtsp://192.168.1.3:8554/avstream

m=video 0 RTP/AVP 96

b=RR:0

a=rtpmap:96 H264/90000

a=fmtp:96 packetization-mode=1;profile-level-id=42c01f;sprop-parameter-sets=Z0LAH9oBQBboQAAA+kAAOpgDxgyo,aM4yyA==;

a=control:rtsp://192.168.1.3:8554/avstream/trackID=6

m=audio 0 RTP/AVP 96

b=RR:0

a=rtpmap:96 mpeg4-generic/48000/2

a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=0990; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;

a=control:rtsp://192.168.1.3:8554/avstream/trackID=7

 

Opened URL "rtsp://192.168.1.3:8554/avstream", returning a SDP description:

v=0

o=- 15648852339074415390 15648852339074415390 IN IP4 ma-virtual-machine

s=Unnamed

i=N/A

c=IN IP4 0.0.0.0

t=0 0

a=tool:vlc 2.0.10

a=recvonly

a=type:broadcast

a=charset:UTF-8

a=control:rtsp://192.168.1.3:8554/avstream

m=video 0 RTP/AVP 96

b=RR:0

a=rtpmap:96 H264/90000

a=fmtp:96 packetization-mode=1;profile-level-id=42c01f;sprop-parameter-sets=Z0LAH9oBQBboQAAA+kAAOpgDxgyo,aM4yyA==;

a=control:rtsp://192.168.1.3:8554/avstream/trackID=6

m=audio 0 RTP/AVP 96

b=RR:0

a=rtpmap:96 mpeg4-generic/48000/2

a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=0990; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;

a=control:rtsp://192.168.1.3:8554/avstream/trackID=7

 

C-->S 用于确定转输机制,建立RTSP会话。客户端能够发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数的改变。若是不同意,它必须响应错误"455 Method Not Valid In This State"

Created receiver for "video/H264" subsession (client ports 46954-46955)

Created receiver for "audio/MPEG4-GENERIC" subsession (client ports 51830-51831)

Sending request: SETUP rtsp://192.168.1.3:8554/avstream/trackID=6 RTSP/1.0

CSeq: 4

User-Agent: /home/root/rtsp_client (LIVE555 Streaming Media v2014.12.17)

Transport: RTP/AVP;unicast;client_port=46954-46955  包含客户端接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项

 

 

S->C 服务器端对SETUP Request产生一个Session ID

Received 271 new bytes of response data.

Received a complete SETUP response:

RTSP/1.0 200 OK

Server: VLC/2.0.10

Date: Wed, 17 Jun 2015 12:19:22 GMT

Transport: RTP/AVP/UDP;unicast;client_port=46954-46955;server_port=47326-47327;ssrc=F162517D;mode=play

Session976b50594e7fb9f1;timeout=60  Session ID由服务器在SETUP的回应中选择的,客户端一旦得到Session ID后,在以后对Session(会话)的操作请求消息中都要包含Session ID. 

Content-Length: 0

Cache-Control: no-cache

Cseq: 4

 

 

Setup "video/H264" subsession (client ports 46954-46955)

Sending request: SETUP rtsp://192.168.1.3:8554/avstream/trackID=7 RTSP/1.0

CSeq: 5

User-Agent: /home/root/rtsp_client (LIVE555 Streaming Media v2014.12.17)

Transport: RTP/AVP;unicast;client_port=51830-51831

Session: 976b50594e7fb9f1

 

S-->C 

Received 271 new bytes of response data.

Received a complete SETUP response:

RTSP/1.0 200 OK

Server: VLC/2.0.10

Date: Wed, 17 Jun 2015 12:19:22 GMT

Transport: RTP/AVP/UDP;unicast;client_port=51830-51831;server_port=36454-36455;ssrc=99368B0B;mode=play

Session: 976b50594e7fb9f1;timeout=60

Content-Length: 0

Cache-Control: no-cache

Cseq: 5

 

C-->S  PLAY方法告知服务器通过SETUP中指定的机制开始发送数据 。在尚未收到SETUP请求的成功应答之前,客户端不可以发出PLAY请求。

Setup "audio/MPEG4-GENERIC" subsession (client ports 51830-51831)

Created output file: "/tmp/clientCh0.h264"

Created output file: "/tmp/clientCh0.h264"

Sending request: PLAY rtsp://192.168.1.3:8554/avstream RTSP/1.0

CSeq: 6

User-Agent: /home/root/rtsp_client (LIVE555 Streaming Media v2014.12.17)

Session: 976b50594e7fb9f1

Range: npt=0.000-

 

S-->C 

Received 354 new bytes of response data.

Received a complete PLAY response:

RTSP/1.0 200 OK

Server: VLC/2.0.10

Date: Wed, 17 Jun 2015 12:19:22 GMT

RTP-Info: url=rtsp://192.168.1.3:8554/avstream/trackID=6;seq=22956;rtptime=3668001435, url=rtsp://192.168.1.3:8554/avstream/trackID=7;seq=2574;rtptime=1956267432

Range: npt=824.178902-  UTC格式指定了播放开始的时间

Session: 976b50594e7fb9f1;timeout=60

Content-Length: 0

Cache-Control: no-cache

Cseq: 6

 

Started playing session

Receiving streamed data (signal with "kill -HUP 600" or "kill -USR1 600" to terminate)...

总结

第一步:查询服务器端可用方法 

 1.C->S:OPTION request     //询问S有哪些方法可用 

 1.S->C:OPTION response    //S回应信息的public头字段中包括提供的所有可用方法

第二步:得到媒体描述信息 

 2.C->S:DESCRIBE request      //要求得到S提供的媒体描述信息 

 2.S->C:DESCRIBE response    //S回应媒体描述信息,一般是sdp信息 

第三步:建立RTSP会话 

 3.C->S:SETUP request   //通过Transport头字段列出可接受的传输选项,请求S建立会话 

 3.S->C:SETUP response  //S建立会话,通过Transport头字段返回选择的具体转输选项,并返回建立的Session ID; 

第四步:请求开始传送数据 

 4.C->S:PLAY request        //C请求S开始发送数据 

 4.S->C:PLAY response       //S回应该请求的信息

第五步: 数据传送播放中 

 5.S->C:发送流媒体数据    // 通过RTP协议传送数据

第六步:关闭会话,退出 

 6.C->S:TEARDOWN request     //C请求关闭会话 

 6.S->C:TEARDOWN response    //S回应该请求

 

其中第三和第四步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则OPTIONS 请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的DESCRIBE请求来完成

1 0
原创粉丝点击