三、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:bob@example.com 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 进行屏幕共享

媒体获取 体验