SDP(Session Description Protocol)是一种会话描述协议,用于描述多媒体会话的参数和配置信息。它是一种基于文本的协议,通常用于VoIP(Voice over Internet Protocol)和视频会议等应用中。SDP协议定义了一种标准的格式,用于描述会话的各种参数,包括媒体类型、媒体格式、媒体地址等。
SDP协议结构
SDP会话描述由会话描述部分和后跟零个或多个媒体描述部分组成。会话描述部分以“v=”行开始,并继续到第一个媒体描述部分。每个媒体描述部分都以“m=”行开始,并继续到下一个媒体描述部分或整个会话描述的末尾。在一般情况下,会话级的值是所有媒体的默认值,除非被媒体级的值覆盖。
SDP协议应用
SDP最常用于RTC(实时通话)的协商过程,在WebRTC中,通信双方在连接阶段使用SDP来协商后续传输过程中使用的音视频编解码器(codec)、主机候选地址、网络传输协议等。在实际的应用过程中,通信双方可以使用HTTP、WebSocket、DataChannel等传输协议来相互传送SDP内容,这个过程称作offer/answer交换。
SDP协议格式
SDP协议的设计可以参考rfc4566文档。它是一种具有特殊约定格式的纯文本描述文档,也就是它的内容都是由UTF-8编码的文本,有点类似于JSON/XML。一个SDP会话描述包括若干行type=value形式的文本,其中type是一个区分大小写的字母,例如v、m等,value是一个结构化的文本,格式不固定。通常value由若干分割符隔开的字段组成或者是一个字符串,整个协议文本区分大小写。"="两侧不允许有空格存在。
SDP协议中的字段
SDP中有的字段是必须的,有的字段是可选的,可选的字段在如下的示例中都使用*进行标记。SDP中type出现的顺序是固定的,按照如下顺序进行排列,这样可以增强解析器错误检测的能力,另外也可以简化解析器的实现。会话级别的描述中的c和a的值默认适用于所有媒体级别的描述。不过如果某个媒体级别的描述具有相同名称的字段,则可复写之(类似父类和子类的复写)。
WebRTC中的SDP协议及其Offer/Answer交换过程
在WebRTC中,SDP(Session Description Protocol)协议扮演着至关重要的角色。它是一种用于描述多媒体会话的协议,包括媒体流的类型、格式、编解码器、传输协议等信息。在WebRTC的连接建立过程中,SDP用于协商双方的媒体参数,确保双方能够顺利地进行音视频通信。
Offer/Answer交换过程
WebRTC的Offer/Answer模型是协商连接参数的关键部分。以下是Offer/Answer交换的基本步骤:
- 创建Offer:首先,发起方(Offerer)通过调用createOffer() API创建一个Offer SDP,并将其设置为本地描述(local description)。
- 发送Offer:Offerer通过信令通道将Offer SDP发送给接收方(Answerer)。
- 接收Offer:Answerer收到Offer SDP后,通过setRemoteDescription() API将其设置为远程描述(remote description)。
- 创建Answer:Answerer随后创建一个Answer SDP,并将其设置为本地描述。
- 发送Answer:Answerer通过信令通道将Answer SDP发送给Offerer。
- 接收Answer:Offerer收到Answer SDP后,通过setRemoteDescription() API将其设置为远程描述。
媒体协商
在媒体协商过程中,双方需要确定哪些媒体流(如音频、视频)将被传输,以及使用何种编解码器。这通常涉及到检查双方支持的编解码器集合,并选择一个共同支持的编解码器。
网络协商
除了媒体协商之外,WebRTC还需要进行网络协商,以确保双方能够找到一条有效的网络路径进行通信。这通常涉及到ICE(Interactive Connectivity Establishment)协议,它允许WebRTC端点发现并建立跨越NAT和防火墙的连接。
SDP协议在WebRTC中的Offer/Answer交换过程中起着核心作用,它使得双方能够协商出一个共同的通信协议,从而实现高效的音视频通信。这个过程不仅涉及到媒体参数的协商,还包括网络参数的协商,确保通信的顺畅和稳定.
随着网络安全和隐私保护的重要性日益凸显,SDP 也在不断发展和创新,以提供更好的安全保障。随着新兴技术的发展和行业需求的增长,SDP 将不断创新和完善,为多媒体通信提供更加灵活、高效、安全的会话描述和管理服务。