理解RTSP(Real Time Streaming Protocol)实时流协议

什么是协议?

接收到的数据,通过固定的方式封装后发送给他人,他人通过固定的方式解封装,便可获得需要的数据。此处涉及的固定封装和解封装方式就是一种协议。

协议是规则约束,这样可以理解,在不断的实践中协议会根据现有需求或是将有需求,不断的迭代升级。无论是谁,只要满足协议,就可以加入支持该协议的环境。

RTSP

实时流协议(Real Time Streaming Protocol,RTSP)是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。

方法定义

说明: 方向中(C 客户端 S 服务端) 对象中 (P 表示 S 媒体流)

方法 方向 对象 要求
OPTIONS C->S, S->C P,S 必选 (S->C: 可选)
DESCRIBE C->S P,S 推荐
ANNOUNCE C->S, S->C P,S 可选
GET_PARAMETER C->S, S->C P,S 可选
PAUSE C->S P,S 推荐
PLAY C->S P,S 必选
RECORD C->S P,S 可选
REDIRECT S->C P,S 可选
SETUP C->S S 必选
SET_PARAMETER C->S, S->C P,S 可选
TEARDOWN C->S P,S 必选
  • 1 OPTIONS
    选项请求返回服务器可接受的请求类型

    C->S: OPTIONS * RTSP/1.0
          CSeq: 1
          Require: implicit-play
          Proxy-Require: gzipped-messages
    
    S->C: RTSP/1.0 200 OK
          CSeq: 1
          Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
  • 2 DESCRIBE
    描述方法检索演示文稿的描述或来自服务器的请求URL标识的媒体对象。 它可能会使用Accept标头,指定客户端支持的描述格式。 服务器响应所请求的描述资源。 DESCRIBE回复-响应构成了媒体RTSP的初始化阶段。

    媒体初始化是任何基于RTSP的系统的要求,但RTSP规范并没有规定必须通过DESCRIBE方法做。

    RTSP客户端有三种方式初始化信息
    • 通过RTSP的DESCRIBE方法;
    • 通过一些其他协议(HTTP,电子邮件附件等);
    • 通过命令行或标准输入(因此作为浏览器工作使用SDP文件或其他媒体启动的帮助应用程序初始化格式)。

    为了实际的互操作性,是被强烈推荐实现。

    C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0
        CSeq: 312
        Accept: application/sdp, application/rtsl, application/mheg
    
    S->C: RTSP/1.0 200 OK
        CSeq: 312
        Date: 23 Jan 1997 15:35:06 GMT
        Content-Type: application/sdp
        Content-Length: 376
        v=0
        o=mhandley 2890844526 2890842807 IN 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
        [email protected] (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
  • 3 ANNOUNCE
    发布方法有两个目的:
    • 从客户端发送到服务器时,ANNOUNCE将请求URL标识的演示文稿或媒体对象的描述发布到服务器。当从服务器发送到客户端时,ANNOUNCE会实时更新会话描述。
    • 如果新的媒体流被添加到演示文稿中(例如,在实时演示中),则应该再次发送整个演示文稿描述,而不仅仅是附加的组件,以便可以删除组件。
    C->S: ANNOUNCE rtsp://server.example.com/fizzle/foo RTSP/1.0
        CSeq: 312
        Date: 23 Jan 1997 15:35:06 GMT
        Session: 47112344
        Content-Type: application/sdp
        Content-Length: 332
        v=0
        o=mhandley 2890844526 2890845468 IN 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
        [email protected] (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
    
    S->C: RTSP/1.0 200 OK
        CSeq: 312
  • 4 SETUP
    建立请求指定如何传输单个媒体流。这必须在发送PLAY请求之前完成。请求包含媒体流URL和传输说明符。该说明符通常包括用于接收RTP数据(音频或视频)的本地端口,另一个用于RTCP数据(元信息)。服务器回复通常会确认所选参数,并填写缺少的部分,例如服务器选择的端口。必须在发送聚合播放请求之前,使用SETUP配置每个媒体流。

    C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0
        CSeq: 302
        Transport: RTP/AVP;unicast;client_port=4588-4589
    
    S->C: RTSP/1.0 200 OK
        CSeq: 302
        Date: 23 Jan 1997 15:35:06 GMT
        Session: 47112344
        Transport: RTP/AVP;unicast;
        client_port=4588-4589;server_port=6256-6257
  • 5 PLAY
    播放请求 将导致播放一个或所有媒体流。可以通过发送多个播放请求来堆叠播放请求。URL可以是聚合URL(播放所有媒体流)或单个媒体流URL(仅播放该流)。可以指定范围。如果没有指定范围,流将从头开始播放,并播放到最后,或者如果流暂停,则在暂停点恢复播放。

    C->S: PLAY rtsp://audio.example.com/twister.en RTSP/1.0
        CSeq: 833
        Session: 12345678
        Range: smpte=0:10:20-;time=19970123T153600Z
    
    S->C: RTSP/1.0 200 OK
        CSeq: 833
        Date: 23 Jan 1997 15:35:06 GMT
        Range: smpte=0:10:22-;time=19970123T153600Z
  • 6 PAUSE
    暂停请求 暂时停止一个或所有媒体流,因此稍后可以通过播放请求恢复。请求包含聚合或媒体流URL。PAUSE请求中的范围参数指定何时暂停。当省略范围参数时,暂停会立即无限期地发生。

    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
  • 7 TEARDOWN
    停止发布流请求用于终止会话。它停止所有媒体流,并释放所有与会话相关的数据在服务器上。

    C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0
        CSeq: 892
        Session: 12345678
    
    S->C: RTSP/1.0 200 OK
        CSeq: 892
  • 8 GET_PARAMETER
    获取参数请求检索在URI中指定的呈现或流的参数的值。答复和回复的内容留给实施。
    ```
    S->C: GET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
    CSeq: 431
    Content-Type: text/parameters
    Session: 12345678
    Content-Length: 15
    packets_received
    jitter

    C->S: RTSP/1.0 200 OK
    CSeq: 431
    Content-Length: 46
    Content-Type: text/parameters
    packets_received: 10
    jitter: 0.3838
    ```

  • 9 SET_PARAMETER
    设置参数请求设置由URI指定的演示文稿或流的参数值。
    ```
    C->S: SET_PARAMETER rtsp://example.com/fizzle/foo RTSP/1.0
    CSeq: 421
    Content-length: 20
    Content-type: text/parameters
    barparam: barstuff

    S->C: RTSP/1.0 451 Invalid Parameter
    CSeq: 421
    Content-length: 10
    Content-type: text/parameters
    barparam
    ```

  • 10 REDIRECT
    重定向请求通知客户端它必须连接到另一个服务器位置。它包含强制性头文件位置,表示客户端应发出该URL的请求。它可能包含参数Range,它指示重定向何时生效。如果客户端希望继续发送或接收此URI的媒体,则客户端必须向指定的主机发出针对当前会话的TEARDOWN请求和新会话的SETUP。

    S->C: REDIRECT rtsp://example.com/fizzle/foo RTSP/1.0
        CSeq: 732
        Location: rtsp://bigserver.com:8001
        Range: clock=19960213T143205Z-
  • 11 RECORD
    记录请求根据呈现描述开始记录一系列媒体数据。时间戳反映开始和结束时间(UTC)。如果没有给定时间范围,请使用演示文稿描述中提供的开始或结束时间。如果会话已经开始,请立即开始录制。服务器决定是否将记录的数据存储在请求URI或其他URI下。如果服务器不使用请求URI,则响应应为201,并包含描述请求状态并引用新资源的实体以及Location头。

    C->S: RECORD rtsp://example.com/meeting/audio.en RTSP/1.0
        CSeq: 954
        Session: 12345678
        Conference: 128.16.64.19/32492374
  • 12 Embedded (Interleaved) Binary Data
    嵌入式(交错式)二进制数据,某些防火墙设计和其他情况可能会强制服务器交叉RTSP方法和流数据。除非有必要,通常应避免这种交错,因为它会使客户端和服务器操作复杂化,并增加额外的开销。交叉二进制数据只能在RTSP通过TCP传输时使用。诸如RTP数据包之类的流数据由ASCII码符号(24个十六进制)封装,后跟一个字节的信道标识符,后面是封装二进制数据的长度,以二进制字节为单位,以网络字节顺序排列。流数据紧随其后,没有CRLF,但包括上层协议头。每个$块只包含一个上层协议数据单元,例如一个RTP包。

    C->S: SETUP rtsp://foo.com/bar.file RTSP/1.0
        CSeq: 2
        Transport: RTP/AVP/TCP;interleaved=0-1
    
    S->C: RTSP/1.0 200 OK
        CSeq: 2
        Date: 05 Jun 1997 18:57:18 GMT
        Transport: RTP/AVP/TCP;interleaved=0-1
        Session: 12345678
        C->S: PLAY rtsp://foo.com/bar.file RTSP/1.0
        CSeq: 3
        Session: 12345678
        S->C: RTSP/1.0 200 OK
        CSeq: 3
        Session: 12345678
        Date: 05 Jun 1997 18:59:15 GMT
        RTP-Info: url=rtsp://foo.com/bar.file;
        seq=232433;rtptime=972948234
    
    S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
    
    S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
    
    S->C: $\001{2 byte length}{"length" bytes RTCP packet}

状态码定义

1xx:信息 - 收到请求,继续处理
2xx:成功 - 该行动已成功收到,理解,并接受
3xx:重定向 - 必须采取进一步行动完成请求
4xx:客户端错误 - 请求包含错误的语法或不能完成
5xx:服务器错误 - 服务器未能完成有效请求

状态码 定义
100 继续
200 成功
201 创建
250 存储空间不足
300 多种选择
301 永久移动
302 暂时移动
303 见其他
304 没有修改
305 使用代理服务器
400 错误的请求
401 未授权
402 需要付款
403 被禁止
404 未找到
405 方法不允许
406 不能接受的
407 需要代理验证
408 请求超时
410 不在
411 长度要求
412 前提条件失败
413 请求的实体太大
414 请求URI太大
415 不支持的媒体类型
451 参数未被理解
452 会议未找到
453 没有足够的带宽
454 找不到会话
455 方法在此状态下无效
456 标头字段对资源无效
457 无效范围
458 参数是只读的
459 不允许聚合操作
460 只允许聚合操作
461 不支持的运输
462 目标无法访问
500 内部服务器错误
501 未实现
502 错误的网关
503 暂停服务
504 网关超时
505 不支持RTSP版本
551 选项不受支持

WEB:www.liveqing.com

猜你喜欢

转载自www.cnblogs.com/marvin1311/p/10937352.html