SDP详解

参考文章:https://www.cnblogs.com/yoyotl/p/5649648.html


在SDP消息体最重要的是描述媒体信息:

  • 1 媒体类型(video, audio, bfcp,h225摄像机控制协议,etc)
  • 2 传输协议(RTP/UDP/IP, H.320, etc)
  • 3 媒体格式(G711,G721,AAC-LD,H.264 video, MPEG video, etc)
  • 4 多播或单播地址和端口
  • 5 本端的带宽信息
  • 6 本端的加密信息
SDP属性分为会话级和媒体级,会话级属性对整个会话有效,媒体级属性只对该媒体行有效。有些属性既可以作为会话级属性,又可以作为媒体级属性,当两者同时存在时,在该媒体行优先使用媒体级属性值。
SDP有很多属性,具体可以参考RFC4566,这里只重点描述我认为重要的:

  • c行地址
        c=IN IP4 192.168.8.76
        解释:c=<网络类型> <地址类型> <地址>,定义连接地址,其中地址类型可以为域名形式
  •  b行带宽

b=AS:1920

解释:b=<类型>:<带宽>,定义本端可以接收的带宽,其中带宽可以分为CT和AS两类,CT是设置整个会议的带宽,AS是设置单个会话的带宽,它们的单位都是kbit/s。TIAS和AS的意义是一样的,只是单位是bit/s。


  • 音频m行
m=audio 10004 RTP/AVP 0 1 3     //m=<媒体类型> <媒体端口> <传输协议> <编码pt值的集合>
a=rtpmap:0 PCMU/8000                //a=rtpmap: <音频协议> <采样率>
a=rtpmap:1 1016/8000
a=rtpmap:3 GSM/8000
a=sendonly                                    //a=本端媒体流的方向,取值包括sendonly/recvonly/sendrecv/inactive
a=ptime:20                                    //a=打包时长
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:NHomSmlnXy4qRCwhVi9ANVcwZ3Q3cXVaLykzJ1Rf|2^31|1:1
解释:音频能力一般协商协议、采样率。媒体能力是允许不对称的,这里的能力和pt值指的是本端允许接收的,而加密属性表示的是本端发送时使用的秘钥和加密算法
  • 视频m行
m=video 10006 RTP/AVP 109 110 96 34 31  //m=<媒体类型> <媒体端口> <传输协议> <编码pt值的集合>
a=rtpmap:109 H264/90000                   //a=rtpmap: <视频协议> <采样率>
a=fmtp:109 profile-level-id=42801f; max-br=20010; sar=13  //a=rtpmap: 分辨率、带宽、打包模式
a=rtpmap:110 H264/90000
a=fmtp:110 profile-level-id=42801f; packetization-mode=1; max-br=20010; sar=13
a=rtpmap:96 H263-1998/90000
a=fmtp:96 CIF4=1;CIF=1;QCIF=1;SQCIF=1;CUSTOM=352,240,1;CUSTOM=704,480,1
a=rtpmap:34 H263/90000
a=fmtp:34 CIF4=1;CIF=1;QCIF=1;SQCIF=1
a=rtpmap:31 H261/90000
a=fmtp:31 CIF=1;QCIF=1
a=rtcp-fb:* nack pli            //a=rtcp-fb:支持nack pli
a=rtcp-fb:* ccm fir             //a=rtcp-fb:支持fir方式的I帧请求
a=rtcp-fb:* ccm tmmbr           //a=rtcp-fb:支持流控
解释:
max-br表示最大带宽
max-mbps表示每秒传输的宏块大小
max-fs表示一帧图像大小 max-fs=宽*高/256
帧率 = max-mbps/max-fs
packetization-mode表示载荷类型,范围0-2(0:单一NAL  1:非交错  2:交错,隔行扫描)

profile-level-id:前两位来区分BP还是HP,64表示HP,42表示BP。后两位表示level-id,每个level-id对应不同的分辨率。当level-id和max-fs计算出分辨率不一致时,取大值。

  • BFCP m行

m=application 3238 UDP/BFCP *  //m=<媒体类型> <媒体端口> <传输协议>
a=setup:actpass  //当传输层为TCP/TLS时有意义,acitve:客户端,passive:服务端,actpass:即可客户端又可服务端
a=connection:new //当传输层为TCP/TLS时有意义,是重建连接还是用已有的连接
a=floorctrl:c-s   //辅流令牌角色,c:辅流令牌客户端,s:辅流令牌服务端,c-s::即可客户端又可服务端

  • 摄像机控制 m行

m=application 3236 RTP/AVP 100
a=rtpmap:100 H224/4800


你可能感兴趣的:(SIP协议)