简单介绍一下SDP规范
我们都知道,在现实世界中寄送快递需要特定的信息和程序流程。首先要了解对方的基本信息、地址、联系方式等。这样才能完成整个寄送流程。而在webrtc技术应用的场景下。如何实现多方实时通信机制?具体实现的方式是基于SDP协议。该协议包含了丰富的数据信息类型。要建立实时通信连接,则需要生成一个会话描述符(SDP),类似于寻找合适对象的过程。
那么我们首先要搞清楚的是:什么是SDP?它的英文名称叫做session description protocol(简称SDP)。简单来说的话,则是一种会议描述格式。它主要用于描述流媒体初始化所需的参数设置。简单来说的话,则是一种通信协议——就像给快递小哥打电话订餐的过程一样:你需要告诉对方收件人的地址、电话号码、订单号等信息;对方也需要知道你是从哪里发货的——而这个SDP就像是快递单据中的详细信息记录表单一样。
SDP规范
SDP的规定相对较为简单,在主要包含两个层次的情况下展开说明。对于编程经验较为丰富的开发者而言,全局变量是一个基本概念。当我们的程序设计中未定义全局变量时,默认情况下将采用默认值进行操作;而一旦在函数内部定义了局部变量后,则该局部变量将完全覆盖当前作用域内的所有全局状态信息。从本质上讲,在会话层面实现的功能类似于全局变量机制;而在媒体层面则对应于具体的流数据传输机制。具体来说,在缺乏明确设置的情况下,默认情况下默认值会被采用;而如果开发者针对特定的数据流进行了自定义参数配置,则必须严格按照所设定的内容执行操作流程。”
一个会话层主要包含以下几部分:会议名称、目的说明以及会议持续的时间长度(存活时间)。虽然这一存活时间虽然有限度但仍然具有一定的作用。你可以根据需求设置具体的时间数值(比如:你可以根据需求设置具体的时间数值)。而对于我们的音视频流应用通常建议将此值设为0(即表示无需限制),这也就意味着整个会议持续进行中。在这样的情况下会议内容将被完整地保留下来并供双方查看(会议内容将被完整地保留下来并供双方查看)。此外在这样的情况下会议内容将被完整地保留下来并供双方查看(即整个会议过程不会中断)。因此在这种情况下会议不会结束也不会中断(即整个会议过程不会中断)。此外在整个会议期间可能会有多个不同的媒体文件被上传到该位置上(即在整个过程中可能会有多个不同的媒体文件被上传到该位置上)。
媒体信息包括:
媒体格式,这是说明你的流是视频还是音频还是混合的,还是其他数据。
传输协议,你使用啥协议,是IPV4,或者IPV6,是用TCP还是UDP
指定IP和端口:你所使用的具体数值。值得注意的是,在WebRTC场景下这些参数应当在ICE部分进行配置而非SDP字段中。因此,在SDP字段中定义的IP地址与端口号信息其实际意义相对较低。然而对于其他非WebRTC应用的场景而言这一配置则具有重要价值。
媒体负载类型:你是人VP8还是VP9,X264等等都在这里。
基本要点如下:简单的事情讲清楚即可;而对于复杂的场景,则需要根据具体需求对媒体类型设定不同的属性参数,在这些细节中进行更精确的配置。
SDP格式:
由多个 = 组成
常见的会话描述有Session Description
v = (protoclo version) , v就是版本号,一般都是设置为0
o =(owner/create and session iddentifer) ,o就是定义来源的信息
s =(session name) ,s就是会话的名称
变量 c 被定义为 *(conn info – optional if included at session-level),它表示网络协议、地址类型以及连接位置的信息。
a = *(zero or more session attribute lines), a就是设置一些全局的属性
这些是会话层的格式设定,在通常情况下意义不高;只需了解基本含义就可;这些都是各自媒体自行配置完成的。
Time Description: 时间的描述
t=(time the session is active),t就是存活的时间
r= *(zero or more repeat times),r就是重复的次数
上边两个也是了解就可以了。
Media Description: 媒体描述
这个媒体层的相关描述就比较重要了
m =(media name and transport address),m代表媒体的名字,传输地址
c= *(conn info – optional if included at session-level),c连接信息
b=*(banwidth information),b代表带宽的描述
变量a被赋值为*(零个或多个会话属性行),其中a代表媒体层中的一些相关属性细节。需要注意的是其复杂性程度在媒体层中处于最高水平。如有兴趣本人愿意就这一主题进行深入探讨。
字段含义(一)
Version是必选的, v=0 SDP的版本号,不包括次版本号
Session name是必要的;s=指定会话名;s=-则表示忽略会话名;因此,在配置了该参数后,能够很好地应对临时会议场景。
字段含义(二)
- Origion/Owner 必选 : o=
主要是用来描述数据流所属的用户信息包括用户名、会话ID、版本、网络类型、地址类型以及详细地址信息
例子:其中 -表示用户名可以忽略
计算得到的结果为无效值-701\cdots(此处保留数学公式),其中该IP地址属于IP地址类数据,在此情况下该数值不在指定范围内;这些数据只是辅助信息,请不必刻意记忆它,在以后的学习中再深入理解即可。
- Connection Data 可选
c=
例子:c= IN IP4 0.0.0.0
- Media Announcements必须
这个是很重要的,大家要必须清楚了解,这是媒体相关的。
涉及具体的媒体格式(如vp8、vp9及x264等)。其中(fmt/payload)参数则用于将指定的媒体格式传递给解码器。 fmt/payload参数错误可能导致无法正确解码
涉及具体的媒体格式(如vp8、vp9及x264等)。其中(fmt/payload)参数则用于将指定的媒体格式传递给解码器。 fmt/payload参数错误可能导致无法正确解码
m=<fmt/payload type list>
例子: m=audtion 1024 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 103 105 13 126
红色部分代表着每一个媒体类型
- Suggested Attributes 可选
a是作为属性值是可以有一堆的。
a= 或 a=:
例子: a=framerate:<帧速率>
rtpmap可选
rtpma是一种用于修饰payload的技术。不同类型的payload将依赖于相应的编码解码器来实现正确的处理。例如,在VP8编码中,会涉及一些特定的编码参数设置。在下文中的示例中将展示一个音频文件。
a=rtpmap:<fmt/payload type>/[/]
例子: a = rtpmap:103 ISAC/16000
说明103对应的是ISAC,采样率是16000
fmtp可选
这也是一个比较重要的属性,关联payload type的对应参数
a=fmtp:<format/payload type> parameters
例子: a=fmtp:103 apt=106
以下是对原文的有效同义改写
以上就是SDP的一些简单的介绍
