SDP协议

1.SDP协议概述

SDPSession Description Protocol是一个用来描述多媒体会话的应用层控制协议,为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述;它是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围;SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现。

会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置信息。SDP 即用于将这种信息传输到接收端。在因特网组播骨干网(Mbone)中,会话目录工具被用于通告多媒体会议,并为参与者传送会议地址和参与者所需的会议特定工具信息,这由 SDP 完成。SDP 连接好会话后,传送足够的信息给会话参与者。SDP 信息发送利用了会话通知协议(SAP),它周期性地组播通知数据包到已知组播地址和端口处。这些信息是 UDP 数据包,其中包含 SAP 协议头和文本有效载荷(text payload)。这里文本有效载荷指的是 SDP 会话描述。此外信息也可以通过电子邮件或 WWW (World Wide Web) 进行发送。

SDP 文本信息包括:会话名称和意图; 会话持续时间; 构成会话的媒体; 有关接收媒体的信息(地址等)。

2.SDP协议结构

SDP协议的信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。

SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。<type>=<value>[CRLF]

SDP会话描述如下:(标注 * 符号的表示可选字段):

v = (协议版本) 
o = (所有者/创建者和会话标识符) 
s = (会话名称) 
i = * (会话信息) 
u = * (URI 描述) 
e = * (Email 地址) 
p = * (电话号码) 
c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段) 
b = * (带宽信息) 
一个或更多时间描述(如下所示):

z = * (时间区域调整) 
k = * (加密密钥) 
a = * (0 个或多个会话属性行) 
0个或多个媒体描述(如下所示) 
时间描述

t = (会话活动时间) 
r = * (0或多次重复次数)
媒体描述

m = (媒体名称和传输地址) 
i = * (媒体标题) 
c = * (连接信息 — 如果包含在会话层则该字段可选) 
b = * (带宽信息) 
k = * (加密密钥) 
a = * (0 个或多个会话属性行) 

三、SDP协议例子:

消息正文格式:

v=0                                                                                                      //该行指示协议的版本

o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4   //o行中包含与会话所有者有关的参数

l 第一个参数表明会话发起者的名称,该参数可不填写,如填写和SIP消息中,from消息头的内容一致。

l 第二个参数为主叫方的会话标识符。

l 第三个参数为主叫方会话的版本,会话数据有改变时,版本号递增。

l 第四个参数定义了网络类型,IN表示Internet网络类型,目前仅定义该网络类型。

l 第五个参数为地址类型,目前支持IPV4IPV6两种地址类型。

l 第六个参数为地址:表明会话发起者的IP地址,该地址为信令面的IP地址,信令PDP激活时为手机分配。

s=SDP Seminar //表明本次会话的标题,或会话的名称

i=A Seminar on the session description protocol //会话的描述

u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps //会话的URI,通过该地址可以查阅到会话的更多内容

e=mjh@isi.edu (Mark Handley) //会话责任人的EMIAL地址

c=IN IP4 224.2.17.12/127 //C行包含为多媒体会话而建立的连接的信息,其中指出了真正的媒体流使用的IP地址

l 第一个参数为网络类型,目前仅定义INTERNET网络类型。用“IN”表示。

l 第二个参数为地址类型,目前支持两种地址类型:IPV4IPV6

l 第三个参数为地址,该地址为多媒体流使用的IP地址。

t=2873397496 2873404696 //表示会话的开始时间和结束时间

l 第一个参数表明会话的开始时间,数字表明从1900110000以来所经过的秒数。

l 第二个参数表明会话的结束时间,数字表明从1900110000以来所经过的秒数。

m=audio 3458  RTP/AVP  0   96   97   // m行又称媒体行,描述了发送方所支持的媒体类型等信息

l   第一个参数为媒体名称:表明支持音频类型。

l   第二个参数为端口号,表明UE在本地端口为3458上发送音频流。

l   第三个参数为传输协议,一般为RTP/AVP协议。

l  四-七参数为所支持的四种净荷类型编号

a=rtpmap:0   PCMU //a行为媒体的属性行,以属性的名称:属性值的方式表示。

    格式为:a=rtpmap:<净荷类型><编码名称> 

l 净荷类型0固定分配给了PCMU,

l 净荷类型96对应的编码方案为G.726,为动态分配的。

l 净荷类型97对应的编码方式为自适应多速率宽带编码(AMR-WB),为动态分配的。           

a=rtpmap:96  G726-32/8000

a=rtpmap:97  AMR-WB

m=video 3400 RTP/AVP 98  99 //m行又称媒体行,描述了发送方所支持的媒体类型等信息

l   第一个参数为媒体名称:表明支持视频类型。

l   第二个参数为端口号,表明UE在本地端口为3400上发送视频流。

l   第三个参数为传输协议,一般为RTP/AVP协议。

l   四、五参数给出了两种净荷类型编号

   格式为:a=rtpmap:<净荷类型><编码名称>

      a=rtpmap:98  MPV

      a=rtpmap:99  H.261

l 净荷类型98对应的编码方案为MPV,为动态分配的。

l 净荷类型97对应的编码方式为H.261,为动态分配的。

a=rtpmap:98  MPV

a=rtpmap:99  H.261


下面是一个helix 流媒体服务器的RTSP协议中的SDP协议:

v=0 //SDP version

// o field定义的源的一些信息。其格式为:o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>

o=- 1271659412 1271659412 IN IP4 10.56.136.37 s=<No title>

i=<No author> <No copyright>  //session的信息

c=IN IP4 0.0.0.0 //connect 的信息,分别描述了:网络协议,地址的类型,连接地址。

c=IN IP4 0.0.0.0

t=0 0 //时间信息,分别表示开始的时间和结束的时间,一般在流媒体的直播的时移中见的比较多。

a=SdpplinVersion:1610641560 //描述性的信息

a=StreamCount:integer;2 //用来描述媒体流的信息,表示有两个媒体流。integer表示信息的格式为整数。

a=control:*

a=DefaultLicenseValue:integer;0 //License信息

a=FileType:string;"MPEG4" 用来描述媒体流的信息说明当前协商的文件是mpeg4格式的文件

a=LicenseKey:string;"license.Summary.Datatypes.RealMPEG4.Enabled"

a=range:npt=0-72.080000  //用来表示媒体流的长度

m=audio 0 RTP/AVP 96 //做为媒体描述信息的重要组成部分描述了媒体信息的详细内容:表示session的audio是通过RTP来格式传送的,其payload值为96传送的端口还没有定。

b=as:24 //audio 的bitrate

b=RR:1800

b=RS:600

a=control:streamid=1  //通过媒体流1来发送音频

a=range:npt=0-72.080000 //说明媒体流的长度。

a=length:npt=72.080000

a=rtpmap:96 MPEG4-GENERIC/32000/2 //rtpmap的信息,表示音频为AAC的其sample为32000

a=fmtp:96 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210 //config为AAC的详细格式信息

a=mimetype:string;"audio/MPEG4-GENERIC"

a=Helix-Adaptation-Support:1

a=AvgBitRate:integer;48000

a=HasOutOfOrderTS:integer;1

a=MaxBitRate:integer;48000

a=Preroll:integer;1000

a=OpaqueData:buffer;"A4CAgCIAAAAEgICAFEAVABgAAAC7gAAAu4AFgICAAhKIBoCAgAEC"

a=StreamName:string;"Audio Track"

下面是video的信息基本和audio的信息相对称,这里就不再说了。

m=video 0 RTP/AVP 97

b=as:150

b=RR:11250

b=RS:3750

a=control:streamid=2

a=range:npt=0-72.080000

a=length:npt=72.080000

a=rtpmap:97 MP4V-ES/2500

a=fmtp:97 profile-level-id=1;

a=mimetype:string;"video/MP4V-ES"

a=Helix-Adaptation-Support:1

a=AvgBitRate:integer;300000

a=HasOutOfOrderTS:integer;1

a=Height:integer;240 //影片的长度

a=MaxBitRate:integer;300000

a=MaxPacketSize:integer;1400

a=Preroll:integer;1000

a=Width:integer;320  //影片的宽度

a=OpaqueData:buffer;"AzcAAB8ELyARAbd0AAST4AAEk+AFIAAAAbDzAAABtQ7gQMDPAAABAAAAASAAhED6KFAg8KIfBgEC"

a=StreamName:string;"Video Track"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDP(Session Description Protocol)是一种用于描述多媒体会话的协议。它可以用于描述会话参数,如媒体类型、编解码器、传输协议、网络地址等。在 VoIP 和视频会议等实时通信领域中,SDP 被广泛使用。 以下是使用 C 语言解析 SDP 协议的基本步骤: 1. 读取 SDP 协议文本:首先从文件或网络中读取 SDP 协议文本,保存在字符串中。 2. 解析 SDP 协议头部:使用 strtok 函数将文本按行分割,并解析 SDP 协议头部。头部信息包括会话名称、会话描述、会话连接信息等。 3. 解析媒体描述:使用 strtok 函数将文本按行分割,并解析媒体描述信息。媒体描述信息包括媒体类型、传输协议、端口号、编解码器等。 4. 解析媒体格式:使用 strtok 函数将媒体格式描述按空格分割,并解析每个媒体格式。媒体格式包括编码名称、采样率、通道数等。 5. 解析媒体连接信息:使用 strtok 函数将媒体连接信息描述按空格分割,并解析每个连接信息。连接信息包括网络类型、地址类型、连接地址等。 6. 将解析结果保存到数据结构中:将解析出的信息保存到数据结构中,以便后续使用。 7. 释放资源:释放分配的内存空间,关闭文件或网络连接。 需要注意的是,SDP 协议的解析涉及到字符串处理、正则表达式匹配等操作,需要熟练掌握相关知识。此外,SDP 协议版本不同,解析的方式也可能有所差异。因此,在实际应用中需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值