概述
一、什么是SDP
SDP回话描述协议,它是一种信息格式的描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要的信息,用于两个会话实体之间的媒体协商。
SDP是用来描述多媒体会话的应用层控制协议,为会话通知,会话邀请和其他形式的多媒体会话初始化等目的提供了多媒体会话描述;它是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使用其具有广泛的应用范围;SDP完全是一种会话描述格式—它不属于传输协议,他只是使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始化协议(SIP),实时流协议(RTSP),MIME扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现。
在SDP消息体最重要的是描述媒体信息:
- 媒体类型(video,audio,bfcp,h255摄像机控制协议,etc)
- 传输协议(RTP/UDP/IP,H.320,etc)
- 媒体格式(G711,G721,AAC-LD.H.264 video,MPEG video,etc)
- 多播或单播地址和端口
- 本端带宽信息
- 本端的加密信息
二、SDP协议结构
SDP由许多文本行组成,文本行的格式为<类型>=<值>,类型是一个字母,值是结构化的文本串,其格式依类型而定,<type>=<value>,每个SDP有一个会话级描述,多个媒体级描述。
SDP的文本信息包括:
-
会话的名称和目的Session Description
v=(协议版本)o=(所有者/创建者或会话标识符)
s=(会话名称)
i=*(会话信息)
u=*(URI描述)
e=*(Email地址)
p=*(电话号码)
c=*(连接信息-如果包含在所有媒体中,则不需要该字段)
c=IN IP4 192.168.1.191
解释:c=<网络类型> <地址类型> <地址>,定义连接地址,其中地址类型可以为域名形式b=*(带宽信息)
b=AS:1920
解释:b=<类型>:<带宽>,定义本端可以接收的带宽,其中带宽可以分为CT和AS两类,CT是设置整个会议的带宽,AS是设置单个会话的带宽,它们的单位都是kbit/s。TIAS和AS的意义是一样的,只是单位是bit/s。 -
会话存活时间 Time Description
-
t=(会话活动时间)
r=*(0或多次重复次数)
-
构成会话的媒体(会话中包括多个媒体)
-
SDP的媒体信息Media Description
-
媒体格式
传输协议
传输IP和端口
媒体负载类型(VP8,VP9,H264,H265)
m=(媒体名称和传输地址)
-
音频m行
m=audio 10004 RTP/AVP 0 1 3 //m=<媒体类型> <媒体端口> <传输协议> <编码pt值的集合>
a=rtpmap:0 PCMU/8000 //a=rtpmap:<pt值> <音频协议> <采样率>
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:<pt值> <视频协议> <采样率>
a=fmtp:109 profile-level-id=42801f; max-br=20010; sar=13 //a=rtpmap:<pt值> 分辨率、带宽、打包模式
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:支持流控
i=*(媒体标题)
c=*(连接信息-如果包含在会话层,则该字段可选)
b=*(带宽信息)
k=*(加密秘钥)
a=*(0个或多个会话属性)
解释:
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计算出分辨率不一致时,取大值。 -
最后
以上就是传统红酒为你收集整理的SDP协议详解的全部内容,希望文章能够帮你解决SDP协议详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复