美文网首页
RTSP协议学习

RTSP协议学习

作者: 锋之律 | 来源:发表于2019-07-22 10:22 被阅读0次

    一、RTSP重要方法

    1. OPTIONS:

    用于得到服务器提供的可用方法;

    如:

    OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

    CSeq: 1

    服务器的回应信息会在Public字段列出提供的方法。如:

    RTSP/1.0 200 OK

    CSeq: 1 //每个回应消息的cseq数值和请求消息的cseq相对应

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

    1. DESCRIBE:

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

    如:

    C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0

    CSeq: 312

    Accept: application/sdp, application/rtsl, application/mheg)

    服务器回应URI指定媒体的描述信息:

    如:

    S->C: RTSP/1.0 200 OK

    CSeq: 312

    Date: 23 Jan 1997 15:35:06 GMT

    Content-Type: application/sdp //表示回应为SDP信息

    Content-Length: 376

    //这里为一个空行

    //以下为具体的SDP信息

    *v=0 *

    o=mhandley 2890844526 <st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="2890842807" unitname="in" w:st="on">2890842807 IN</st1:chmetcnv> IP4 126.16.64.4

    s=SDP Seminar

    i=A Seminar on the session description protocol

    u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps

    e=mjh@isi.edu (Mark Handley)

    c=IN IP4 224.2.17.12/127

    t=2873397496 2873404696

    a=recvonly

    m=audio 3456 RTP/AVP 0

    m=video 2232 RTP/AVP 31

    m=whiteboard 32416 UDP WB

    a=orient:portrait

    媒体初始化是任何基于RTSP系统的必要条件,但RTSP规范并没有规定它必须通过DESCRIBE方法完成。RTSP客户端可以通过以下方法来接收媒体描述信息:

    a) 通过DESCRIBE方法;

    b) 其它一些协议(HTTP,email附件,等);

    c) 通过命令行或标准输入设备

    1. SETUP:

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

    Request 中的Transport头字段指定了客户端可接受的数据传输参数;Response中的Transport 头字段包含了由服务器选出的传输参数。

    如:

    C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0

    CSeq: 302

    Transport: RTP/AVP;unicast;client_port=4588-4589

    服务器端对SETUP Request产生一个Session Identifiers。

    如:

    S->C: RTSP/1.0 200 OK

    CSeq: 302

    Date: 23 Jan 1997 15:35:06 GMT

    Session: 47112344 //产生一个Session ID

    Transport: RTP/AVP;unicast;

    client_port=4588-4589;server_port=6256-6257

    1. PLAY:

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

    PLAY请求将正常播放时间(normal play time)定位到指定范围的起始处,并且传输数据流直到播放范围结束。PLAY请求可能被管道化(pipelined),即放入队列中(queued);服务器必须将PLAY请求放到队列中有序执行。也就是说,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。

    比如,在下例中,不管到达的两个PLAY请求之间有多紧凑,服务器首先play第10到15秒,然后立即第20到25秒,最后是第30秒直到结束。

    C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

    CSeq: 835

    Session: 12345678

    Range: npt=10-15

    C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

    CSeq: 836

    Session: 12345678

    Range: npt=20-25

    C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

    CSeq: 837

    Session: 12345678

    Range: npt=30-

    Range头可能包含一个时间参数。该参数以UTC格式指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。时间参数可能用来帮助同步从不同数据源获取的数据流。

    不含Range头的PLAY请求也是合法的。它从媒体流开头开始播放,直到媒体流被暂停。如果媒体流通过PAUSE暂停,媒体流传输将在暂停点(the pause point)重新开始。

    如果媒体流正在播放,那么这样一个PLAY请求将不起更多的作用,只是客户端可以用此来测试服务器是否存活。

    1. PAUSE:

    PAUSE请求引起媒体流传输的暂时中断。如果请求URL中指定了具体的媒体流,那么只有该媒体流的播放和记录被暂停(halt)。比如,指定暂停音频,播放将会无声。如果请求URL指定了一组流,那么在该组中的所有流的传输将被暂停。如:

    C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/1.0

    CSeq: 834

    Session: 12345678

    S->C: RTSP/1.0 200 OK

    CSeq: 834

    Date: 23 Jan 1997 15:35:06 GMT

    PAUSE请求中可能包含一个Range头用来指定何时媒体流暂停,我们称这个时刻为暂停点(pause point)。该头必须包含一个精确的值,而不是一个时间范围。媒体流的正常播放时间设置成暂停点。当服务器遇到在任何当前挂起(pending)的PLAY请求中指定的时间点后,暂停请求生效。如果Range头指定了一个时间超出了任何一个当前挂起的PLAY请求,将返回错误"457 Invalid Range" 。如果一个媒体单元(比如一个音频或视频禎)正好在一个暂停点开始,那么表示将不会被播放或记录。如果Range头缺失,那么在收到暂停消息后媒体流传输立即中断,并且暂停点设置成当前正常播放时间。

    1. TEARDOWN:

    TEARDOWN请求终止了给定URI的媒体流传输,并释放了与该媒体流相关的资源。如:

    C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0

    CSeq: 892

    Session: 12345678

    S->C: RTSP/1.0 200 OK

    CSeq: 892</o:smarttagtype>

    二、简单的RTSP消息交互过程

    C表示RTSP客户端,S表示RTSP服务端

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

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

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

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

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

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

    1. 第三步:建立RTSP会话

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

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

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

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

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

    1. 第五步: 数据传送播放中

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

    1. 第六步:关闭会话,退出

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

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

    上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。

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

    三、下图为使用Wireshark抓包的图片:

    RTSP抓包图.jpg

    相关文章

      网友评论

          本文标题:RTSP协议学习

          本文链接:https://www.haomeiwen.com/subject/rwkilctx.html