VoIP之SDP说明及媒体协商

    当建立多媒体电话会议、语音通话、视频流或其它会话时,需要参与方表明自己的媒体信息、传输地址和其它会话描述信息。会话描述协议(SDP, RFC4566:SDP: Session Description Protocol)为上述需求提供一种标准方式。SDP只是一种会话描述信息的格式,可以配合多种传输协议使用,如SIP、RTSP、RTC等。


    SIP协议是一个用来创建、修改、终结多媒体会话的应用层协议。SDP和SIP协议一起使用时,offer/answer模型提供了一个简单的媒体协商框架(所谓媒体协商:是指主、被叫协商出双方支持的媒体参数进行会话,如音频编码、视频编码、传输地址等)。
 

SDP使用场景:
1. 会话建立(SIP)

2. 流媒体

3. 邮件和万维网(World Wide Web)

4. 多播会话通知(如SAP)

SDP描述包含如下信息:
1. 会话名称和目的
2. 会话存活时间
3. 接收地址、端口、格式等
4. 带宽
5.媒体和传输信息: 
媒体类型: 视频、音频等
传输协议: RTP、UDP、IP
媒体格式:G711\H264
传输地址和端口
 

SDP由一个会话部分(session-level)和0或多个媒体部分(media-level)组成。会话部分以“v="开始到第一个媒体部分结束,媒体部分以"m="部分开始到下一个媒体部分结束。
会话部分的参数是所有媒体默认的参数,但是同样的参数优先使用媒体部分的参数值。

会话描述字段说明:其中黑色为常用字段

v= (protocol version)  版本, 目前为0
o= (originator and session identifier)  发起者信息:用户名、主机地址等
s= (session name) 会话名称

i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
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
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transport address)       媒体行
i=* (media title)
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)  属性
 

常用字段说明:

v(Protocol Version): 版本号,RFC4566规定版本号为0
o(Origin): 发起者信息

           <username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
   username: 如果支持用户概念,则为用户 的登录名。 一般使用“-”作用用户名
           sess-id:会话ID,一般使用NTP格式的时间戳来确保唯一
           sess-version:会话版本号,一般建议使用NTP的时间戳
           nettype:网络类型,使用IN表示Internet
           addrtype:地址类型,使用IP4和IP6表示IPv4和IPv6
           unicast-address:单播地址,会话建立的主机IP地址

v(Protocol Version): 版本号,RFC4566规定版本号为0
o(Origin): 发起者信息

          <username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
   username: 如果支持用户概念,则为用户 的登录名。 一般使用“-”作用用户名
           sess-id:会话ID,一般使用NTP格式的时间戳来确保唯一
            sess-version:会话版本号,一般建议使用NTP的时间戳
            nettype:网络类型,使用IN表示Internet
            addrtype:地址类型,使用IP4和IP6表示IPv4和IPv6
            unicast-address:单播地址,会话建立的主机IP地址

 

s(Session Name): 会话名称
 
c(Connection Data):连接数据, <nettype> <addrtype> <connection-address>

nettype:网络类型,如IN
addrtype: 地址类型,如IP4或IP6
connection-address:连接地址

 

  一个会话描述必须在每一个媒体部分有一个"c="或者在会话部分有一个“c=", 如果会话部分和媒体部分都存在, 则使用媒体部分的”c="参数。

b(BandWidth):带宽,可选字段,<bwtype>:<bandwidth>

bwtype:带宽类型,有CT(conference total)和AS(application specific )
bandwidth: kb/s

 

t(Timing):时间,<start-time> <stop-time>

a(Attribute):属性,一个媒体部分会包含很多属性

m(Media Descriptions):媒体描述,<media> <port> <proto> <fmt> ..

media: 媒体,audio(音频),video(视频), text(文本)等

port: 媒体流RTP接收的端口,如果SDP中没有"a=rtcp:",则使用RTP端口+1作为RTCP接收端口

proto: 协议,UDP, RTP/AVP, RTP/SAVP

fmt: 编码格式, 音频如0(PCMU), 8(PCMA)

 SDP抓包:

 

SIP协议中的SDP协商:

SDP协商采用offer(提供方/发起方)/answer(应答方)模型,即协商的发起方发出携带本方媒体能力的offer请求,应答方收到offer后,与本地支持的媒体能力进行协商,如果协商成功(即存在互相支持的媒体),则通过answer应答告知发起方协商结果及参数,否则返回协商失败。

结合SIP协议的INVITE通话建立特点,在实际应用场景中有两种常见的协商场景:

一、INVITE携带SDP,流程如下:

1. 主叫发起INVITE含SDP-offer

2. 被叫通过200-INVITE携带SDP-answer

二、INVITE不携带SDP,流程如下:

1. 主叫发起INVITE不含SDP

2. 被叫通过200-INVITE携带SDP-offer

3. 主叫通过ACK携带SDP-answer
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪游东戴河

你就是这个世界的唯一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值