当两个设备(比如你的手机和朋友的手机)要进行视频通话或语音聊天时,它们需要先互相"沟通"一下,确认"我们能用什么语言交流"(比如音频编解码器)、"在哪个频道上通话"(比如IP地址和端口)等问题。SDP(会话描述协议)就是为这次"沟通"提供标准格式的说明书。
🍽 把SDP想象成一份菜单
你可以把SDP理解为一顿多媒体大餐的"菜单 "或"宴会筹备清单 "。这份清单是基于文本的,每一行都遵循 =<类型><值> 的简单格式,清晰列出了这顿"大餐"的各项信息。
这份"菜单"主要包含两大部分:
- 会话级描述 :好比是整场宴会的通用信息 。包括宴会名称(
s=)、发起人信息(o=)、宴会有效的起止时间(t=)以及网络连接的基本信息(c=)等。这些信息对整个会话有效,是所有媒体流的默认设置。 - 媒体级描述 :则像是针对每道具体菜肴 的说明。例如,会详细描述"音频"这道菜:用什么方式传输(传输协议,如RTP/UDP)、送到哪个端口(端口号)、具体是哪道菜(编码格式,如OPUS、G.711),以及这道菜有什么特点(通过属性行
a=描述,如采样率)等。一个SDP里可以包含多个媒体描述,比如同时描述音频流和视频流。
会话级描述中的信息是默认值,媒体级描述可以继承或覆盖这些默认值。
🤝 SDP是如何工作的?
SDP本身并不能直接传送数据,它需要"搭乘"其他的传输协议,比如SIP(用于网络电话)、RTSP(用于流媒体)或在WebRTC中通过信令通道来交换。
一个常见的工作模式是 Offer/Answer 模型:
- 发起方 生成一个SDP Offer(就像主人先拟好一份初步的菜单草稿),说明自己支持的能力。
- 接收方 收到Offer后,会根据自己的能力进行匹配,生成一个SDP Answer(就像客人根据忌口和喜好确认菜单),最终双方协商出一致认可的媒体参数。
- 之后,设备间就可以根据协商好的参数建立直接的媒体流传输了。
💡 主要用途与特点
- 核心作用 :SDP的核心作用在于媒体协商。通过交换SDP信息,通信双方可以了解彼此的能力(如支持的编解码器),并最终协商出一套双方都支持的方案,确保通话或会议能够顺利进行。
- 重要特点 :SDP是一个文本协议 ,易于阅读、生成和调试。它被设计得足够通用和灵活 ,可以通过自定义属性行(
a=)来扩展,以适应新的编解码格式或技术需求(如WebRTC中用于NAT穿越的ICE候选信息)。
WebRTC和网络语音通话VoIP中就使用了SDP协议。