美文网首页
音视频学习笔记-SDP

音视频学习笔记-SDP

作者: XZhongWen | 来源:发表于2020-03-08 20:57 被阅读0次

    音视频学习笔记-SDP

    ​ SDP 是会话描述协议, 它用文本描述各端的能力. 如各端多支持的音频编解码器是什么, 这些解码器设定的参数是什么, 使用的传输协议是什么, 以及包括的音视频媒体是什么等等.

    在进行音视频通话时, 首先要进行信令交互, 而交互的一个重要信息就是SDP的互换, 目的是为了让对方知道彼此具有哪些能力, 然后根据双方各自的能力进行协商, 协商出大家认可的音视频编解码器, 相关参数, 传输协议等.

    标准SDP规范

    • 描述格式

    • SDP结构

      • 会话描述
      • 媒体描述
        • 媒体类型
        • 媒体格式
        • 传输协议
        • 传输的IP和端口

    SDP格式

    由多个<type>=<value>表达式组成. SDP由一个会话级描述和多个媒体级描述组成.

    • 会话级的作用是整个会话, 从v=行开始到第一个媒体描述为止.
    • 媒体级是单个的媒体流进行描述, 从m=行开始到下一个媒体描述为止.

    另外, 除非媒体部分重新对会话级的值做定义, 否则会话级的值就是各个媒体的缺省默认值.

    v=0
    o=- 7017624586836067756 2 IN IP4 127.0.0.1
    s=-
    t=0 0
    
    //下面 m= 开头的两行,是两个媒体流:一个音频,一个视频。
    m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126
    ...
    m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
    ...
    

    SDP的结构

    1. 会话描述结构
      • v=(protocol version, require), 如v=0, 表示SDP的版本号.
      • o=(owner/creator and session identifier, require), 如o=<username> < session id> <version> <network type> <address type> <address>
        • o= 表示对会话发起者的描述.
        • <username>: 用户名, 不关心用户名时, 用"-"代替.
        • <session id>: 数字串, 在整个会话中, 必须唯一.
        • <version>: 版本号, 每次会话数据修改后, 还版本值会递增.
        • <network type>: 网络类型, 一般为"IN", 表示"internet".
        • < address type > : 地址类型, 一般为IP4.
        • < address >: IP地址.
      • s=<session name> require, 表示一个会话, 在整个SDP中有且仅有一个会话.
      • t=(time the session is active, require), 描述开始时间和结束时间.
    2. 媒体描述结构
      • m=(media name and transport address, optional), 如m=<media> <port> <transport> <fmt list>, 表示一个会话. 在一个SDP中一般会有多个媒体描述, 每个媒体描述以"m="开始到下一个"m="结束.
        • <media>: 媒体类型, 如audio/video.
        • <port>: 端口.
        • <transport>: 传输协议, 如RTP/AVP, UDP.
        • <fmt list>: 媒体格式, 即负载类型(Payload Type)列表.
      • a=*(zero or more media attribute lines, optional), 如 a=<type> or a=<type>:<values>, 表示属性, 用于进一步描述媒体信息.
      • rtpmap(optional), a=rtpmap:<payload type> <encoding name> <clock rate>
        • rtpmap是rtp与map的结合, 即RTP参数映射表.
        • <payload type>: 负载类型, 对应RTP包中的音视频数据负载类型.
        • <encoding name>: 编码器名称, 如VP8, VP9, OPUS.
        • <sample rate>: 采样率.
        • <encodingparameters>: 编码参数, 如音频是否是双声道, 默认是单声道.
      • fmtp, 如a=fmtp:<payload type> <format specific parameters>
        • fmtp, 格式参数
        • <payload type>, 负载类型
        • <format specific parameters> 指具体参数.
    v=0
    o=- 4007659306182774937 2 IN IP4 127.0.0.1
    s=-
    t=0 0 
    //以上表示会话描述
    ...
    //下面的媒体描述,在媒体描述部分包括音频和视频两路媒体
    m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
    ...
    a=rtpmap:111 opus/48000/2 //对RTP数据的描述
    a=fmtp:111 minptime=10;useinbandfec=1 //对格式参数的描述
    ...
    a=rtpmap:103 ISAC/16000
    a=rtpmap:104 ISAC/32000
    ...
    //上面是音频媒体描述,下面是视频媒体描述
    m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
    ...
    a=rtpmap:96 VP8/90000
    ...
    

    WebRTC中的SDP

    WebRTC对标准SDP规范做了调整, 它将SDP按功能分成几大块:

    • Session Metadata 会话元数据
    • Network Description 网络描述
    • Stream Description 流描述
    • Security Descriiption 安全描述
    • Qos Grouping Description 服务质量描述
    216e0bc9ccfcb5dd3593f11e8b857dfa 60ac066baf39e92f4d9a3627cfe007ce
    
    //=============会话描述====================
    v=0 
    o=- 7017624586836067756 2 IN IP4 127.0.0.1
    s=-
    t=0 0
    ...
    
    //================媒体描述=================
    //================音频媒体=================
    /*
     * 音频使用端口1024收发数据
     * UDP/TLS/RTP/SAVPF 表示使用 dtls/srtp 协议对数据加密传输
     * 111、103 ... 表示本会话音频数据的 Payload Type
     */
     m=audio 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126 
    
    //==============网络描述==================
    //指明接收或者发送音频使用的IP地址,由于WebRTC使用ICE传输,这个被忽略。
    c=IN IP4 0.0.0.0
    //用来设置rtcp地址和端口,WebRTC不使用
    a=rtcp:9 IN IP4 0.0.0.0
    ...
    
    //==============音频安全描述================
    //ICE协商过程中的安全验证信息
    a=ice-ufrag:khLS
    a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
    a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
    ...
    
    //==============音频流媒体描述================
    a=rtpmap:111 opus/48000/2
    //minptime代表最小打包时长是10ms,useinbandfec=1代表使用opus编码内置fec特性
    a=fmtp:111 minptime=10;useinbandfec=1
    ...
    a=rtpmap:103 ISAC/16000
    a=rtpmap:104 ISAC/32000
    a=rtpmap:9 G722/8000
    ...
    
    //=================视频媒体=================
    m=video 9 UDP/TLS/RTP/SAVPF 100 101 107 116 117 96 97 99 98
    ...
    //=================网络描述=================
    c=IN IP4 0.0.0.0
    a=rtcp:9 IN IP4 0.0.0.0
    ...
    //=================视频安全描述=================
    a=ice-ufrag:khLS
    a=ice-pwd:cxLzteJaJBou3DspNaPsJhlQ
    a=fingerprint:sha-256 FA:14:42:3B:C7:97:1B:E8:AE:0C2:71:03:05:05:16:8F:B9:C7:98:E9:60:43:4B:5B:2C:28:EE:5C:8F3:17
    ...
    
    //================视频流描述===============
    a=mid:video
    ...
    a=rtpmap:100 VP8/90000
    //================服务质量描述===============
    a=rtcp-fb:100 ccm fir
    a=rtcp-fb:100 nack //支持丢包重传,参考rfc4585
    a=rtcp-fb:100 nack pli
    a=rtcp-fb:100 goog-remb //支持使用rtcp包来控制发送方的码流
    a=rtcp-fb:100 transport-cc
    ...
    

    相关文章

      网友评论

          本文标题:音视频学习笔记-SDP

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