SDP协议

由于Web端、IOS、Android、PC、MAC端的差异性导致它们对音视频的支持能力不同,所以我们进行一些音视频会话之前,需要交互下彼此的音视频编解码能力、网络带宽和传输协议等信息,这些需要协商的信息需要用SDP来描述。

SDP虽然具备这些能力参数信息的描述功能,但是SDP并不是传输协议,需要用RTSP、SIP、HTTP等协议进行承载传输、交换,如果大家协调好了之后,就可以建立会话,完成真实的音视频码流传输,再完成解码和播放。

SDP格式

在这里插入图片描述
SDP是由多个=这样的表达式组成,同时type是一个字符,value是一个字符串,=两边没有空格。

会话描述和媒体描述,一般会话级描述从v=开始一直到第一个媒体描述为止,媒体描述是从m=开始一直到下一个媒体描述m=的位置之前。也就是说SDP里面一般先从会话信息v=开始,然后后面跟几个m=的媒体描述组成。

  1. 会话级的作用域是整个会话,其位置从v=开始到第一个媒体描述m=为止;
  2. 媒体级描述 是对单个媒体流即音频流、视频流和字幕流等的单个媒体描述,如果有多个流则用多组媒体级描述。其中每个媒体级描述就是从m=开始到下一个媒体描述m=为止。

字段解析

会话描述部分

v=

v就是protocol version,必选字段,表示了SDP的版本号但是不包含子版本号,一般就是v=0

o=

必选字段,对会话发起者的一个信息描述,其中包含了用户名、会话ID、网络地址等信息。格式是:o=<username> <session id> <version> <network type> <address >

s=

s即session name,表示的会话名称,必选字段。在整个SDP里面只有一个会话名称,有且仅有一个这样的字段。

t=

t即time the session is active,必选字段,表示的是该会话的开始到结束时间,如果是持久会话,则时间值填0,这样的时间是NTP时间,单位是秒,格式是 :t=<start time> <stop time>

媒体描述部分

m=

可选字段,但是一般音视频会话至少有音频流或者视频流,所以一般也是都会有的,如果多个流则有多个,格式:m=<media type> <port> <transport> <fmt list>

media tyoe:媒体类型, audio或者video

port:媒体端口,要么是收流端口,要么是发流端口,这样我们就知道从哪个端口进行发流和收流。

transport:传输协议,表示码流的传输协议是什么,RTP/AVP表示RTP Over UDP,TCP/RTP/AVP表示RTP Over TCP。

fmt list:媒体格式,这里表示的负载类型,一般表示的视频的H.264 H.265等,音频则是 G7xx、AAC、Opus等类型。

a=

a是attribute,可选字段,表示的媒体的属性,进一步的描述媒体信息,可以有多个属性,其中比较重要的属性就是rtpmap和fmtp,格式是:a=<type>:<value>

  • rtpmap属性
    表示媒体流传输协议的RTP具体内容:a=rtpmap:<payload type> <encoding name>/<clock rate>[/encoding parameters]

    payload type:负载类型,对应表示RTP包中的音视频数据负载类型,比如RTP的数据类型是H.264,那么这里就是96。

    encoding name:编码器名称,这里主要指的RTP承载音视频编码数据类型,当然可以是标准数据也可以私有数据,如VP8 VP9 H.264等。

    clock rate:采样率,音视频里面都有时间戳的概念,所以这里表示的音视频的采样率,对音视频同步非常重要。比如视频的90000,音频的8000、48000等。

    encoding parameters:编码参数,可以表示视频的分辨率,帧率,音频的单声道双声道等信息。

  • fmtp属性
    在rtpmap基础上进一步描述音视频具体编码参数信息:a=fmtp:<payload type> <format specific parameters>

    payload type:负载类型,同样对应 RTP 包中的音视频数据负载类型;

    format specific parameters:指具体参数,或者说对音视频编码信息的一次处理。该信息从编码器得到,比如视频的SPS\PPS等,用于解码端的播放器初始化。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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 协议版本不同,解析的方式也可能有所差异。因此,在实际应用需要根据具体情况进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值