zoukankan      html  css  js  c++  java
  • SDP, RTP, RTCP, RTSP, RTMP 名词解释

    读维基百科里的词条,记录的一点笔记。

    SDP

    会话描述协议 Session Description Protocol

    严格来说 SDP 不是一种协议,而是一种格式约定,用于描述流媒体的参数。如协商媒体类型、格式及其它相关属性。这些属性和参数通常叫做 session profile

    SDP 被广泛用于 RTP、RTSP、SIP 等协议中。

    会话描述

    一个会话由一系列域值来描述,每个一行,如

    <character>=<value>
    
    • character 是一个字符,小写和大小意义不同。
    • value 是一串文本,格式取决于属性类型。UTF-8 编码。
    • = 等号两边不能有空白符。

    SDP 消息内有三个主要部分:会话、时间、媒体。每个消息都有多个时间和媒体描述。

    下述中有 =* 表示可选值。顺序如下所示:

    会话描述
        v=  (protocol version number, currently only 0)
        o=  (originator and session identifier : username, id, version number, network address)
        s=  (session name : mandatory with at least one UTF-8-encoded character)
        i=* (session title or short information)
        u=* (URI of description)
        e=* (zero or more email address with optional name of contacts)
        p=* (zero or more phone number with optional name of contacts)
        c=* (connection information—not required if included in all media)
        b=* (zero or more bandwidth information lines)
        One or more Time descriptions ("t=" and "r=" lines; see below)
        z=* (time zone adjustments)
        k=* (encryption key)
        a=* (zero or more session attribute lines)
        Zero or more Media descriptions (each one starting by an "m=" line; see below)
    
    时间描述(必须指定)
        t=  (time the session is active)
        r=* (zero or more repeat times)
    
    媒体描述
        m=  (media name and transport address)
        i=* (media title or information field)
        c=* (connection information — optional if included at session level)
        b=* (zero or more bandwidth information lines)
        k=* (encryption key)
        a=* (zero or more media attribute lines — overriding the Session attribute lines)
    

    RTP

    Real-time Transport Protocol 实时传输协议。

    应用于流媒体传输,如电话、视频电话应用、视频服务等。

    • RTP 常结合 RTCP 一起使用。RTP 负责传输流媒体(如:音、视频),RTCP 负责监控传输质量,以及多个流的同步。
    • RTP 是 VoIP 的基础设施,在 VoIP 领域经常与另一种会话协议搭配工作,如 SIP 协议。
    • RTP 允许使用 IP 组播技术。
    • 实时多媒体流需要时实性,因而容许包的丢失。例如音频应用中一秒中有一小部分数据丢失,并不影响接听感受。
    • RTP 可以使用 TCP,但由于 TCP 的强可靠性却较少被使用。大部分 RTP 都建立在 UDP 之上。
    • 与 RTP 相关的协议有许多,比如 SIP、Jingle, RTSP, H.225, H.245 等会话控制协议,另外如 H.264, MPEG, H.263 等协议常用来编码数据,作为 RTP 的 payload。

    位域 大小 bits 说明
    Version 2 RTP 协议版本号,当前版本为 2
    P 1 Padding, 指示 RTP 包尾是否有填充的字节。填充字节的最后一个字节保存填充字节数(包括它自己)
    X 1 Extension,指示在标准头和 payload data 之间是否有扩展头(Extension header)
    CC 4 CSRC 计数器,指示 CSRC 标识符个数
    M 1 Marker,标记,应用层使用。指示该 payload 是否有特殊意义。如对于视频,M=1 表示一帧的结束; 对于音频,标记会话的开始。
    PT 7 Payload type,携带数据的格式。由 RTP profile 指定。便于应用解析。
    Sequence number 16 每发送一个 RTP 包,序列号递增 1. 接收方用序列号来检查包丢失并恢复序列号。包丢失了 RTP 不会作任何处理,交由应用层来处理。RFC3550 规定初始序列号为一个随机数。
    Timestamp 32 接收方根据时间戳来在合适的间隔处理接收数据。每个流有独立的时间戳,不能用于媒体同步。时间粒度由应用指定。
    SSRC 32 Synchronization source identifier,同步源标识用来标识一个流。同一个 RTP 会话有唯一的同步标识。
    CSRC 32 bits each 特约信息源,标识包含在该 RTP 报文中的所有特约信源。可以有 0~15 个。
    Header extension optional 头 32 位包含 16 位的 profile-spcific 标识符和 16 位的长度,用于指示扩展头的长度。扩展以 32 bit 对齐。

    RTCP

    RTP Control Protocol

    RTP 控制协议,与 RTP 搭配使用。

    RTCP 有五种包:

    1. sender report (SR)
    2. receiver report (RP)
    3. source description (SDES)
    4. goodbye (BYE)
    5. Application-specific message (APP)
    6. 
    

    RTSP

    实时流传输协议 Real Time Streaming Protocol

    RTSP 并不负责流数据传输。大多数 RTSP 服务使用 RTP/RTCP 来进行流数据传输。

    与 HTTP 类似。RTSP 使用 TCP 来进行端到端连接,且大部分 RTCP 控制消息由客户端向服务端发起。
    但 HTTP 是无状态的,RTSP 有状态。RTSP 有标识符用于跟踪多个会话。

    默认的传输端口是 554,默认使用 TCP 协议。

    主要命令:

    • OPTIONS 询问服务器接受哪些请求类型
    C->S:  OPTIONS rtsp://example.com/media.mp4 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
    
    • DESCRIBE 包含一个 RTSP URL,以及允许的返回数据类型。返回数据一般是 SDP 格式。
    C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 2
    
    S->C: RTSP/1.0 200 OK
          CSeq: 2
          Content-Base: rtsp://example.com/media.mp4
          Content-Type: application/sdp
          Content-Length: 460
    
          m=video 0 RTP/AVP 96
          a=control:streamid=0
          a=range:npt=0-7.741000
          a=length:npt=7.741000
          a=rtpmap:96 MP4V-ES/5544
          a=mimetype:string;"video/MP4V-ES"
          a=AvgBitRate:integer;304018
          a=StreamName:string;"hinted video track"
          m=audio 0 RTP/AVP 97
          a=control:streamid=1
          a=range:npt=0-7.712000
          a=length:npt=7.712000
          a=rtpmap:97 mpeg4-generic/32000/2
          a=mimetype:string;"audio/mpeg4-generic"
          a=AvgBitRate:integer;65790
          a=StreamName:string;"hinted audio track"
    
    • SETUP 描述怎样传输一个流。在 PLAY 之前必须发送 SETUP 包,其中包含媒体流的 URL 和端口描述。比如本地用于接收 RTP 数据的端口和 RTCP 数据的端口。服务器的回复一般用于确认这些参数,并描述服务器上选择的端口。
    C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
          CSeq: 3
          Transport: RTP/AVP;unicast;client_port=8000-8001
    
    S->C: RTSP/1.0 200 OK
          CSeq: 3
          Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001
          Session: 12345678
    
    • PLAY 请求播放或继续播放一个或多个流。如果没有指定范围,则从头播到尾。如果中间暂停,继续播放时从暂停位置开始。
    C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 4
          Range: npt=5-20
          Session: 12345678
    
    S->C: RTSP/1.0 200 OK
          CSeq: 4
          Session: 12345678
          RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
    
    • PAUSE 暂停一个或多个流。暂停后可被 PLAY 命令恢复播放。可指定 range 来表示何时暂停。未指定 range 则立即暂停。
    C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 5
          Session: 12345678
    
    S->C: RTSP/1.0 200 OK
          CSeq: 5
          Session: 12345678记录​
    
    • RECORD 依据描述信息记录一段媒体数据。时间戳指定起始和结束时间。如果未指定 range,则使用描述信息里的起始和结束时间。如果会话已经开始,则立即开始记录。由服务器决定是否存储记录数据。如果不使用此命令,则应返回 201 。
    C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 6
          Session: 12345678
    
    S->C: RTSP/1.0 200 OK
          CSeq: 6
          Session: 12345678
    
    • ANNOUNCE 此方法有两个作用:客户端向服务端发送,将请求的媒体数据的 URL 发给服务器。服务器向客户端发送时,立即更新会话。如果一个新的媒体流加入,则应该发送整个描述信息,而不是增加的部分。
    C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 7
          Date: 23 Jan 1997 15:35:06 GMT
          Session: 12345678
          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
          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
    
    S->C: RTSP/1.0 200 OK
          CSeq: 7
    
    • TEARDOWN 结束一个会话。停止所有媒体流,释放所有会话和相关数据。
    C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 8
          Session: 12345678
    
    S->C: RTSP/1.0 200 OK
          CSeq: 8
    
    • GET_PARAMETER 获取 URI 指定流的参数值。没有实体时可用来测试客户端和服务器的连通,类似 ping 包。
    S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 9
          Content-Type: text/parameters
          Session: 12345678
          Content-Length: 15
    
          packets_received
          jitter
    
    C->S: RTSP/1.0 200 OK
          CSeq: 9
          Content-Length: 46
          Content-Type: text/parameters
    
          packets_received: 10
          jitter: 0.3838
    
    • SET_PARAMETER 设置参数
    C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 10
          Content-length: 20
          Content-type: text/parameters
    
          barparam: barstuff
    
    S->C: RTSP/1.0 451 Invalid Parameter
          CSeq: 10
          Content-length: 10
          Content-type: text/parameters
    
          barparam
    
    • REDIRECT 指示客户端必须要去连接另一个服务地址。其中指定客户端要去连接的 URL。如果客户端还是想连接当前 URI,客户端必须先在当前会话发送 TEARDOWN 和 SETUP 请求。
    S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
          CSeq: 11
          Location: rtsp://bigserver.com:8001
          Range: clock=19960213T143205Z-
    
    • Embedded (Interleaved) Binary Data

    RTMP

    实时消息协议 Real Time Messaging Protocol

    一种流媒体传输协议,在网络上传输音、视频及数据。由 Macromedia 开发,后该公司被 Adobe 收购。Flash 播放器即使用该协议。

    RTMP 有多个变种
    * 原始 RTMP 工作于 TCP 上,默认使用端口 1935
    * RTMPS 即工作于 TLS/SSL 连接上的 RTMP
    * RTMPE Adobe 使用私有机制加密的 RTMP。
    * RTMPT 使用 HTTP 封装的 RTMP,可用于穿过防火墙,使用 HTTP 的端口 80 或 443.封装的会话可能携带 RTMP、RTMPS 或 RTMPE 等几种包。

  • 相关阅读:
    Yii2设计模式——工厂方法模式
    Yii2设计模式——静态工厂模式
    Yii2设计模式——简单工厂模式
    Yii2设计模式——注册树模式
    Yii2设计模式——单例模式
    nginx负载均衡指令least_conn的真正含义
    Yii2设计模式——Yii2中用到哪些设计模式?
    Yii2设计模式——设计模式简介
    Openresty的同步输出与流式响应
    Scope 功能的改进
  • 原文地址:https://www.cnblogs.com/sammei/p/SDP-RTP-RTCP-RTSP-RTMP-ming-ci-jie-shi.html
Copyright © 2011-2022 走看看