三、SDP会话描述格式:WebRTC媒体协商要点与SIP INVITE区别联系

协议详解 精选 16 分钟 |
三、SDP会话描述格式:WebRTC媒体协商要点与SIP INVITE区别联系

WebRTC SDP(Session Description Protocol)是WebRTC实现P2P连接的核心“会话描述格式(format)”,用于承载媒体协商与连接参数;SIP(Session Initiation Protocol)则是“信令协议”。本文聚焦SDP在WebRTC中的作用,并梳理其与SIP INVITE之间的区别与联系。

SDP基础与定位

SDP(会话描述) 由 RFC 4566 定义,是一种“文本格式”的会话描述信息集合,用于表达多媒体会话的参数本身,而非一种“传输/信令协议”。在WebRTC中,SDP承担媒体能力与参数的协商表达。

SDP基本信息表

属性说明示例值
标准文档定义SDP内容格式的标准RFC 4566
格式类型会话描述格式(纯文本)键值对/行语义
主要用途媒体会话描述编解码器、带宽、方向等
WebRTC接口宿主对象RTCSessionDescription(offer/answer)

SDP描述的核心信息

媒体信息对照表

信息类型SDP标识说明常见值
媒体类型m=指定媒体流类型audio, video, application
连接信息c=网络连接地址IN IP4 0.0.0.0
属性信息a=媒体属性描述rtpmap, ice-ufrag, sendrecv
会话信息s=会话名称- (通常为空)
时间信息t=会话时间0 0 (永久会话)

编解码器支持对照表

媒体类型编解码器载荷类型采样率特点
音频Opus11148000/2高质量,低延迟
音频PCMU08000标准G.711
音频PCMA88000标准G.711
视频VP89690000Google开源
视频VP99890000高效压缩
视频H.2649790000广泛支持

WebRTC中的Offer/Answer模型

SDP交换流程图(WebRTC)

sequenceDiagram
    participant A as 发起方(Caller)
    participant S as 信令服务器
    participant B as 接收方(Callee)
    
    A->>A: 创建本地SDP Offer
    A->>A: setLocalDescription(offer)
    A->>S: 发送Offer SDP
    S->>B: 转发Offer SDP
    B->>B: setRemoteDescription(offer)
    B->>B: 创建本地SDP Answer
    B->>B: setLocalDescription(answer)
    B->>S: 发送Answer SDP
    S->>A: 转发Answer SDP
    A->>A: setRemoteDescription(answer)
    Note over A,B: SDP协商完成,开始媒体传输

SDP交换状态表(WebRTC)

阶段发起方状态接收方状态SDP类型描述
1创建Offer等待offer发起方生成本地媒体能力描述
2等待Answer处理Offeroffer接收方收到并设置远程描述
3等待Answer创建Answeranswer接收方生成应答描述
4处理Answer等待连接answer发起方收到并设置远程描述
5连接建立连接建立-双方完成媒体协商

SDP 与 SIP INVITE:区别与联系

结论先行:SDP是“描述内容”,SIP INVITE是“承载信令”。在典型的SIP呼叫流程中,INVITE报文的消息体可携带SDP(作为Offer);对端在200 OK中回送SDP(作为Answer),完成与WebRTC相同的Offer/Answer协商模型。

概念区分表

维度SDP(会话描述格式)SIP INVITE(信令请求)关系
定位描述媒体能力与会话参数的文本格式会话发起/修改/终止的信令请求方法INVITE的消息体可携带SDP
作用揭示编解码器、媒体方向、带宽、网络等负责呼叫流程控制与路由信令承载描述内容
标准RFC 4566RFC 3261(及相关扩展)不同标准、互补协作
协商模型Offer/Answer(RFC 3264)通过INVITE/200 OK/ACK驱动的交易Offer/Answer在SIP交易中落地

SIP携带SDP的时序(与Offer/Answer对应)

sequenceDiagram
    participant UAC as 发起方(UAC)
    participant Proxy as SIP代理/中继
    participant UAS as 接收方(UAS)

    UAC->>Proxy: INVITE (SDP=Offer)
    Proxy->>UAS: INVITE (SDP=Offer)
    UAS-->>Proxy: 180 Ringing / 183 Progress (可选,含早期媒体SDP)
    UAS->>Proxy: 200 OK (SDP=Answer)
    Proxy->>UAC: 200 OK (SDP=Answer)
    UAC->>Proxy: ACK
    Proxy->>UAS: ACK
    Note over UAC,UAS: SDP要素达成一致,媒体(RTP/RTCP)开始传输

SIP INVITE 关键信息承载表

元素位置示例/说明作用
方法起始行INVITE sip:[email protected] SIP/2.0发起会话请求
会话路由首部Via/Route/Record-Route传递/记录信令路径
会话标识首部Call-ID / From / To / CSeq识别一次会话与顺序
会话能力首部Contact / Allow / Supported标示终端能力与特性
负载类型首部Content-Type: application/sdp声明消息体类型为SDP
描述内容消息体SDP文本(Offer或Answer)承载媒体能力与参数

与WebRTC信令的对照

环节SIP场景WebRTC场景共同点
Offer产生INVITE携带SDPcreateOffer()/setLocalDescription生成本地媒体能力描述
Answer返回200 OK携带SDPcreateAnswer()/setLocalDescription返回应答媒体能力描述
确认ACKsetRemoteDescription(Answer)双端达成一致
传输信道SIP信令(UDP/TCP/TLS)自定义信令(WS等)承载SDP并驱动协商

常见误区澄清

  • SDP不是“协议”,而是“会话描述格式”;其本身不负责信令传输。
  • SIP是“信令协议”,可在其消息体中承载SDP;WebRTC也可通过自定义信令承载SDP。
  • Offer/Answer是协商模型(RFC 3264),既适用于SIP(INVITE/200 OK/ACK),也适用于WebRTC(createOffer/createAnswer)。
  • 传输层(RTP/RTCP)与信令层(SIP或自定义信令)分离:前者负责媒体,后者负责协商与路由。

SDP与SIP的互操作(补充)

协议对比表

特性WebRTCSIP共同点
传输协议UDP/TLS/RTP/SAVPFRTP/AVPRTP基础(媒体层)
安全机制DTLS强制加密可选TLS支持加密
NAT穿越ICE必需可选STUN/TURN网络穿越
会话描述SDP(格式)SDP(格式)相同内容格式,不同信令承载
信令方式自定义(WebSocket等)SIP协议栈不同实现

WebRTC-SIP互操作架构图

graph TB
    subgraph "WebRTC端"
        W1[Web浏览器] --> W2[WebRTC API]
        W2 --> W3[SDP Offer/Answer]
    end
    
    subgraph "网关层"
        G1[协议转换网关]
        G2[SDP格式转换]
        G3[媒体中继]
    end
    
    subgraph "SIP端"
        S1[SIP客户端] --> S2[SIP协议栈]
        S2 --> S3[SDP处理]
    end
    
    W3 --> G1
    G1 --> G2
    G2 --> G3
    G3 --> S3
    
    G1 -.-> |移除ICE属性| G2
    G2 -.-> |调整传输协议| G3

SDP转换对照表

WebRTC属性SIP等效转换操作
UDP/TLS/RTP/SAVPFRTP/AVP协议名称替换
a=ice-ufrag移除属性
a=ice-pwd移除属性
a=fingerprint移除DTLS指纹
a=setup:actpass移除DTLS设置
a=mid移除媒体标识

应用场景对照表

场景类型WebRTC优势SIP优势互操作价值
企业通信浏览器直接接入成熟PBX系统统一通信平台
呼叫中心快速部署稳定可靠混合座席模式
移动应用原生集成运营商支持全网互通
视频会议多媒体丰富标准兼容跨平台会议

SDP调试和优化

常见问题诊断表

问题现象可能原因SDP检查点解决方案
无音频编解码器不匹配a=rtpmap音频部分检查双方支持的音频格式
无视频视频格式协商失败a=rtpmap视频部分确认VP8/H.264支持
连接失败ICE协商问题a=ice-ufrag/pwd检查STUN/TURN配置
音质差编解码器选择不当载荷类型顺序调整编解码器优先级
延迟高带宽限制b=AS带宽行优化带宽设置

SDP信令状态流程图

stateDiagram-v2
    [*] --> stable: 初始状态
    stable --> have_local_offer: createOffer()
    have_local_offer --> stable: setRemoteDescription(answer)
    stable --> have_remote_offer: setRemoteDescription(offer)
    have_remote_offer --> stable: setLocalDescription(answer)
    
    have_local_offer --> have_local_offer: setLocalDescription(offer)
    have_remote_offer --> have_remote_offer: setRemoteDescription(offer)
    
    stable --> closed: close()
    have_local_offer --> closed: close()
    have_remote_offer --> closed: close()

性能优化对照表

优化目标SDP调整方法示例配置适用场景
降低延迟编解码器优先级Opus > PCMU实时通话
节省带宽限制比特率b=AS:500移动网络
提高质量高质量编解码器H.264 High Profile视频会议
兼容性基础编解码器PCMU/PCMA传统系统

总结

SDP作为WebRTC的核心协议,不仅负责媒体协商,还为与传统通信系统的互操作提供了基础。理解SDP的工作机制对于:

  • 开发稳定的WebRTC应用
  • 实现跨协议通信
  • 优化音视频质量
  • 排查连接问题

都具有重要意义。随着WebRTC技术的发展,SDP协议也在不断演进,开发者需要持续关注相关标准的更新。

标签

#WebRTC #SDP #会话描述协议 #媒体协商 #SIP #信令协议 #P2P连接 #编解码器

版权声明

本文由 WebRTC.link 创作,采用 CC BY-NC-SA 4.0 许可协议。本站转载文章会注明来源以及作者。如果您需要转载,请注明出处以及作者。

评论区

Giscus

评论由 Giscus 驱动,基于 GitHub Discussions

相关文章

探索更多相关内容,深入了解 WebRTC 技术的各个方面

演示 Demo

LIVE

基础摄像头访问

展示如何使用 getUserMedia API 获取摄像头和麦克风

媒体获取 体验

PTZ 摄像头控制

控制支持 PTZ 功能的摄像头进行平移、倾斜和缩放

媒体获取 体验

屏幕共享

使用 getDisplayMedia API 进行屏幕共享

媒体获取 体验