SDP协议分析

概念

SDP(Session Description Protocol)会话描述协议是为了描述多媒体会话而设计的,主要用来描述会话通告、会话邀请或者其他形式的多媒体会话初始化。

  • 当初始化多媒体会议、VoIP电话、视频流或者其他会话的时候,需要对参与者提供媒体信息、传输地址以及其他与会话相关的描述性的元数据。
  • SDP为描述这些信息提供了一个标准的形式,并且与这些信息是以什么方式传送的无关。SDP只是一个单纯的会话描述的格式,并不包含传输协议。在不同的场合,可以应用于不同的传输协议,如SAP、SIP、RTP和HTTP等。
  • SDP被设计成通用的,因此它可以广泛用于有关网络的各种应用。然而,它并不能用于协商会话内容或值媒体编码,这超出SDP的功能范围。

协议格式

一个SDP会话描述是通过"application/sdp"来标识的。

一个SDP会话描述包含若干行如下形式的文本:

(type)=(value)

其中(type)是一个区分大小写的字母的形式,(value)是一个结构化的文本,其形式取决于(type)。通常,(value)由若干个分隔符隔开的字段组成,或者是一个字符串。其中"="两边都不能有空格。

一个SDP包含一个会话层部分,后续跟着0个或多个媒体层部分。会话层启始于"v="行,直到第一个媒体层部分。每个媒体层起始于"m="行,直到下一个媒体层的开始或者直到SDP结束。通常,会话层的属性是全局的,除非被媒体层重写。

某些行是必选的,某些是可选的,但是出现的顺序必须如下所示。可选用"*"标志。

会话描述

v=(协议版本)

o=(发起者和会话标识符)

s=(会话名称)

i=* (会话信息)

u=* (URI 描述)

e=* (Email 地址)

p=* (电话号码)

c=* (连接信息,只有在所有的媒体层都有这个字段的时候,会话层属性才可以没有)

b=* (0个或者多个带宽信息)

z=* (时域调整)

k=* (加密密钥)

a=* (0 个或多个会话属性)

时间描述

t=(会话有效时间)

r=* (0或多次重复时间)

媒体描述,如果存在的情况下

m=(媒体名称和传输地址)

i=* (媒体标题)

c=* (连接信息,如果在会话层中出现,则这里可以不出现)

b=* (带宽信息)

k=* (加密密钥)

a=* (0 个或多个媒体属性)

会话层的连接信息"c="和附加属性"a="都是全局的,除非在媒体层被重写

格式详解

协议版本"v="

v=0

字段给出了SDP版本,当前规范的版本是0,这个版本没有小版本号

源"o="

image-20210623105315416

会话名字"s="

image-20210623105537866

*连接数据"c="

image-20210623105747224

image-20210623105835985

*带宽"b="

image-20210623110135414

时间信息"t="

t=(起始时间)(结束时间)

时间格式采用NTP格式,

如果结束时间是0,则表示会话时长是不受限制的

如果起始时间是0,则表示会话是永恒的

*附加属性"a="

image-20210623110206017

媒体描述"m="

image-20210623110447843

image-20210623110513005

参考rfc4566中文版.doc-原创力文档5 SDP规范6 SDP属性

SIP中应用

实际抓包分析:(在收到INVITE后,回复200OK携带的SDP报文)

Session Initiation Protocol (200)
    Status-Line: SIP/2.0 200 OK
    Message Header
        Call-ID: THsmVLXC1v2QLpkrEnb1PR8TPvCIVX4-1624410533179-0x7f78c5123d50-00163e064c8d@192.168.5.5
        Supported: 100rel,timer,replaces,in-band-dtmf
        Via: SIP/2.0/UDP 192.168.5.5:5065;received=192.168.5.5;branch=z9hG4bK-60d289a5-3669ad3c-4040158d
        Contact: <sip:12345678@192.168.3.3:8579;transport=UDP;user=phone>
        Session-Expires: 1800;refresher=uas
        From: "87654321"<sip:87654321@domain.cn;user=phone>;tag=9a7f070-0-13c9-60d289a5-42ebae47-60d289a5
        To: <sip:12345678@domain.cn:5065;user=phone>;tag=4c897ba5
        CSeq: 1 INVITE
        Content-Type: application/sdp
        Content-Length: 1338
    Message Body
        Session Description Protocol
            Session Description Protocol Version (v): 0 //sdp版本号,一直为0,rfc4566规定
            Owner/Creator, Session Id (o): sipua 1718212350 1718212350 IN IP4 192.168.2.23 
            // o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
            Session Name (s): IADCall //会话名,没有的话使用-代替
            Connection Information (c): IN IP4 192.168.2.23 
            //这一行表示你要用来接收或者发送媒体使用的IP地址,若使用ice传输,不使用这个地址
            Time Description, active time (t): 0 0 //两个值分别是会话的起始时间和结束时间,这里都是0代表没有限制
            Media Description, name and address (m): audio 10006 RTP/AVP 9 8 97 101 
            //m=audio说明本会话包含音频,10006代表音频使用端口9来传输,如果设置为0,代表不传输音频;
            //RTP/AVP是表示用户来传输音频支持的协议,应用场景为视频/音频的 RTP 协议。
            //参考 [RFC 3551](https://tools.ietf.org/html/rfc3551);
            //9 8 97 101表示本会话音频支持的编码,后面几行会有详细补充说明
            Bandwidth Information (b): AS:64 
            //b=<modifier>:<bandwidth-value> 带宽数值单位为 kbps 。
            //参考 [RFC 3556](https://tools.ietf.org/html/rfc3556)
            Media Attribute (a): rtpmap:9 G722/8000 //下面几行都是对m=audio这一行的媒体编码补充说明,指出了编码采用的编号,采样率,声道等
            Media Attribute (a): rtpmap:8 PCMA/8000
            Media Attribute (a): rtpmap:97 iLBC/8000
            Media Attribute (a): rtpmap:101 telephone-event/8000
            Media Attribute (a): fmtp:101 0-15 //对telephone-event编码可选的补充说明
            Media Attribute (a): sendrecv //指出我是双向通信,另外几种类型是recvonly,sendonly,inactive
            Media Description, name and address (m): video 10008 RTP/AVP 104 //参考上面m=audio,含义类似
            Bandwidth Information (b): AS:3072
            Media Attribute (a): rtpmap:104 H264/90000
            Media Attribute (a): fmtp:104 profile-level-id=42e01f;max-br=2048;max-mbps=108000;max-fs=3600;packetization-mode=1 
            //对H264编码可选的补充说明,profile-level-id配置h264配置文件和级别;
            //max-br表示最大比特率;max-mbps表示每秒钟能处理的最大宏块数量;
            //max-fs表示接收端能够解码的一帧图像的最大尺寸;
            //packetization-mode表示图像数据包分拆发送的方式
            Media Attribute (a): rtcp-fb:* ccm fir 
            //ccm是codec control using RTCP feedback message简称,意思是支持使用rtcp反馈机制来实现编码控制,
            //fir是Full Intra Request简称,意思是接收方通知发送方发送幅完全帧过来
            Media Attribute (a): rtcp-fb:* nack //支持丢包重传,参考rfc4585
            Media Attribute (a): rtcp-fb:* ccm tmmbr
            Media Attribute (a): extmap:1 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
            Media Attribute (a): extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
            Media Attribute (a): ssrc:2374194282 cname:MQ4GU3I3cSdHgzQ
            Media Attribute (a): ssrc:2374194282 msid:3ftdiFFSCR+5FRWFZfZn4Fi8s8q7616_main 2EXqEBRAn7g3Smi18og2CL0PCjf5n9U
            Media Attribute (a): ssrc:2374194282 mslabel:3ftdiFFSCR+5FRWFZfZn4Fi8s8q7616
            Media Attribute (a): ssrc:2374194282 label:2EXqEBRAn7g3Smi18og2CL0PCjf5n9U
            Media Attribute (a): sendrecv
            Media Attribute (a): content:main
            Media Attribute (a): label:11
            Media Description, name and address (m): video 10010 RTP/AVP 104 //参考上面m=audio,含义类似
            Bandwidth Information (b): AS:3072
            Media Attribute (a): rtpmap:104 H264/90000
            Media Attribute (a): fmtp:104 profile-level-id=42e01f;max-br=2048;max-mbps=108000;max-fs=3600;packetization-mode=1
            Media Attribute (a): rtcp-fb:* ccm fir
            Media Attribute (a): rtcp-fb:* nack
            Media Attribute (a): rtcp-fb:* ccm tmmbr
            Media Attribute (a): sendrecv
            Media Attribute (a): content:slides
            Media Attribute (a): label:12
            Media Description, name and address (m): application 49592 UDP/BFCP *
            Media Attribute (a): confid:101
            Media Attribute (a): userid:4
            Media Attribute (a): floorid:2 mstrm:12
            Media Attribute (a): floorctrl:c-s
            Media Attribute (a): setup:actpass
            Media Attribute (a): connection:new

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值