WebRTC SDP 概念和解释

40 阅读12分钟

访问 chrome://webrtc-internals/ 后所呈现的参数具体什么意义参考,他所能体现的是WebRTC连接的SDP(Session Description Protocol)消息。SDP用于描述多媒体会话的细节,包括媒体格式、网络信息和协商参数等。以下是对每个字段的详细解释及专业术语的定义和作用:

全局字段

  • v=0: SDP版本号。
  • o=- 1873153383 3 IN IP4 127.0.0.1: 会话起始行,包含用户名、会话ID、版本号、网络类型(IN表示Internet)、地址类型(IP4表示IPv4)和IP地址。
  • s=-: 会话名称,通常为空。
  • t=0 0: 会话时间,表示会话是永久性的,不受时间限制。
  • a=groupvideo-stream audio-stream 0: BUNDLE是WebRTC中使用的一种技术,可以在同一个传输连接中复用多个媒体流。
  • a=msid-semantic: WMS stream1: 媒体流标识,表示这些流属于同一个WebRTC媒体流(WebRTC Media Stream)。

媒体部分(视频)

  • m=video 10002 UDP / TLS /RTP/SAVPF 102 103: 媒体类型为视频,端口为10002,使用UDP/TLS/RTP/SAVPF传输协议,102和103是RTP有效负载类型。

    • UDP: 用户数据报协议,提供无连接的数据传输。
    • TLS: 传输层安全协议,确保数据传输的安全性。
    • RTP: 实时传输协议,用于在互联网上传输音视频数据。
    • SAVPF: 安全的实时传输协议有效负载格式,结合了安全性和灵活的有效负载格式。
  • c=IN IP4 10.237.0.61: 连接信息,表示该媒体流的IP地址。

  • a=rtcp:9 IN IP4 0.0.0.0: RTCP(实时传输控制协议)连接信息,表示RTCP的传输端口。

    • RTCP: 实时传输控制协议,与RTP一起工作,监控传输统计数据并控制会话质量。
  • a=candidate: ICE候选者,用于NAT穿越和防火墙穿越。ICE(Interactive Connectivity Establishment)是一种用于在NAT环境中建立P2P连接的协议。

    • ICE: 交互式连接建立,处理NAT和防火墙穿越问题。
  • a=ice-ufrag: ICE用户名片段,用于ICE协商。

  • a=ice-pwd: ICE密码,用于ICE协商。

  • a=fingerprint26:EC:E4:BE:54:2C:07:59:75:A7:18:75:20:CF:7D:0B:1E:28:68:EF:D6:8D:C5:E1:C9:CC:C5: DTLS指纹,用于验证对等体的身份。

    • DTLS: 数据报传输层安全协议,用于加密UDP流量。
  • a=setup: DTLS连接角色,表示对等体可以是主动或被动角色。

  • a=mid: 媒体流标识符。

  • a=sendonly: 表示此媒体流为发送模式。

  • a=rtcp-mux: 表示RTCP与RTP复用在同一端口上。

  • a=extmap: 定义了RTP头扩展的映射。

  • a=rtpmap:102 H264/90000: RTP有效负载类型102对应的编码格式为H.264,采样率为90000Hz。

    • H264: 一种视频压缩标准,广泛用于视频流和录制。
  • a=rtpmap:103 RTX/90000: RTP有效负载类型103对应的编码格式为RTX,采样率为90000Hz。

    • RTX: RTP重传,用于提高传输可靠性。
  • a=fmtp: 特定格式参数,配置视频编码器的特性。

  • a=ssrc: 同步源标识符,用于标识RTP流。

    • cname: 同步源标识符的CNAME,用于同步多个媒体流。
  • a=msid: 媒体流标识符。

媒体部分(音频)

  • m=audio 10002 UDP / TLS /RTP/SAVPF 111: 媒体类型为音频,端口为10002,使用UDP/TLS/RTP/SAVPF传输协议,111是RTP有效负载类型。

  • c=IN IP4 10.237.0.61: 连接信息,表示该媒体流的IP地址。

  • a=rtcp:9 IN IP4 0.0.0.0: RTCP连接信息。

  • a=ice-ufrag: ICE用户名片段。

  • a=ice-pwd: ICE密码。

  • a=fingerprint26:EC:E4:BE:54:2C:07:59:75:A7:18:75:20:CF:7D:0B:1E:28:68:EF:D6:8D:C5:E1:C9:CC:C5: DTLS指纹。

  • a=setup: DTLS连接角色。

  • a=mid: 媒体流标识符。

  • a=sendonly: 表示此媒体流为发送模式。

  • a=rtcp-mux: 表示RTCP与RTP复用在同一端口上。

  • a=rtpmap:111 OPUS/48000/2: RTP有效负载类型111对应的编码格式为Opus,采样率为48000Hz,声道数为2。

    • Opus: 一种高效的音频编解码器,适用于实时音频传输。
  • a=fmtp:111 minptime=10;useinbandfec=1: Opus格式参数,包括最小包时间和使用带内前向纠错。

  • a=ssrc: 同步源标识符。

数据通道

  • m=application 10002 UDP /DTLS/SCTP webrtc-datachannel: 数据通道,端口为10002,使用UDP/DTLS/SCTP传输协议。

    • SCTP: 流控制传输协议,用于在IP网络上传输多流数据。
  • c=IN IP4 10.237.0.61: 连接信息。

  • a=ice-ufrag: ICE用户名片段。

  • a=ice-pwd: ICE密码。

  • a=fingerprint26:EC:E4:BE:54:2C:07:59:75:A7:18:75:20:CF:7D:0B:1E:28:68:EF:D6:8D:C5:E1:C9:CC:C5: DTLS指纹。

  • a=setup: DTLS连接角色。

  • a=mid:0: 媒体流标识符。

  • a=sctp-port:5000: SCTP端口号。

  • a=max-message-size:262144: 最大消息大小。

专业术语解释

  • DTLS(Datagram Transport Layer Security : 用于加密UDP流量,确保数据传输的安全性。
  • ICE(Interactive Connectivity Establishment) : 处理NAT和防火墙穿越问题,确保对等体之间建立P2P连接。
  • RTP(Real-time Transport Protocol) : 用于在IP网络上传输音视频数据,提供实时性和同步性。
  • RTCP(Real-time Transport Control Protocol) : 与RTP一起工作,监控传输统计数据,提供质量控制和反馈机制。

从云测拿RTP,给云测发送RTCP,画面的丢包率和码率等相关都是通过RTCP去反馈,如果不发这块,云测就知道我们是断开掉的。

  1. 代码层面 window.onoffline 通过浏览器window自带熟悉去判断是否断连
  2. 在 peerConnection.onconnectionstatechange 是通过云机检测连接状态改变的反馈
  3. Data Channel 是基于OS与C++打通后,消息信息都是通过这个通道传送,在原有OS和端侧消息通信是通过信令传送消息,如 在OS复制消息信息时候
  4. Offer = Data Channel + video +Audio

通过这些字段,SDP描述了WebRTC连接的详细信息,包括音视频流的格式、网络连接信息、加密和安全参数等,确保对等体能够正确地建立和管理实时通信会话。

物理机和云手机如何沟通

在 WebRTC 中,涉及到两个重要的角色:offer 和 answer。这些角色在协商过程中扮演着关键的角色,确保连接的建立和参数的协商。

  1. Offerer(提议者) :通常是发起连接的一方,它创建并发送一个 SDP(Session Description Protocol)offer 给对方。这个 SDP offer 包含了提议者设备的音视频能力、网络信息以及连接的意图(例如,想要建立音视频通话)。
  2. Answerer(应答者) :是接收方,它收到来自提议者的 SDP offer 后,会生成一个 SDP answer。SDP answer 中包含了应答者设备的音视频能力、网络信息,并且接受了或修改了提议者的 SDP offer 中的内容。

在 WebRTC 的协商过程中,具体步骤如下:

  • Offer 的生成和发送:提议者(例如物理机)生成一个 SDP offer,并通过信令服务器将其发送给应答者(例如云手机)。
  • Answer 的生成和发送:应答者收到 SDP offer 后,根据自身的能力和策略生成一个 SDP answer,并将其通过信令服务器返回给提议者。
  • 协商确认:提议者和应答者通过信令服务器交换 SDP offer 和 SDP answer,彼此确认对方的连接参数和意图。
  • ICE 连接候选人交换:在 SDP offer 和 SDP answer 的交换过程中,也会交换 ICE 候选地址,以确定最佳的网络连接路径。
  • 连接建立:一旦双方完成了 SDP offer 和 SDP answer 的交换,并且通过 ICE 确定了可用的网络路径,就可以开始直接在两端之间建立音视频或数据通信连接。

因此,answer 在 WebRTC 中充当了应答者的角色,负责接收并应答提议者发送的 SDP offer,并生成相应的 SDP answer,从而完成连接的协商和建立过程。

ICE 候选地址

ICE 候选地址的收集和交换是在 WebRTC 连接的两端设备(比如你提到的物理机和云手机)之间完成的

  1. ICE 候选地址的收集:每个 WebRTC 设备(比如物理机和云手机)会自行收集自己的网络地址,包括本地 IP 地址、通过 STUN 服务器获取的公共 IP 地址(服务器反射候选地址)、以及通过 TURN 服务器获取的中继地址(中继候选地址)。
  2. ICE 候选地址的交换:一旦设备收集到候选地址,它会将这些地址发送给对方设备,通过信令服务器传递。对方设备也会将自己的候选地址发送给你的设备。这样,双方可以在协商过程中比较彼此的候选地址,并选择最佳的连接路径。
  3. 信令服务器的作用:信令服务器在 ICE 协商过程中主要负责传递 SDP(Session Description Protocol)信息,包括 SDP offer 和 SDP answer。它也可以帮助设备在连接建立之前进行初始的信息交换,比如告知对方自己的网络地址或初始化 ICE 过程。

SDP参数

sdp通常指的是会话描述协议(Session Description Protocol)的数据。SDP是一种用于描述多媒体会话(如音频和视频会议)的网络协议。它被用于在通信双方之间建立和描述多媒体会话的参数,如编解码器信息、传输格式、带宽要求等。


```
v=0
o=rtc 718875617 0 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=group:LS video-stream audio-stream
a=msid-semantic:WMS *
a=setup:actpass
a=ice-ufrag:1ax9
a=ice-pwd:9e3CDcSU8bV/CgGSiwtQtZ
a=ice-options:ice2,trickle
a=fingerprint:sha-256 4A:AE:A0:48:AC:81:79:B6:5A:DF:A7:55:4D:A2:C2:1E:35:B8:2E:2D:0A:C8:9F:1B:E2:C3:67:14:BB:CC:10:F8

m=video 10001 UDP/TLS/RTP/SAVPF 102 103
c=IN IP4 172.17.0.7
a=mid:video-stream
a=sendonly
a=extmap:8 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:10 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=ssrc-group:FID 1 5
a=ssrc:1 cname:video-stream
a=ssrc:5 cname:video-stream
a=ssrc:1 msid:stream1 video-stream
a=ssrc:5 msid:stream1 video-stream
a=ssrc:1 label:video-stream
a=ssrc:5 label:video-stream
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 rrtr
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=rtcp-fb:102 goog-remb
a=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1
a=rtpmap:103 RTX/90000
a=fmtp:103 apt=102
a=candidate:1 1 UDP 2122317823 172.17.0.7 10001 typ host
a=end-of-candidates

m=audio 10001 UDP/TLS/RTP/SAVPF 111
c=IN IP4 172.17.0.7
a=mid:audio-stream
a=sendonly
a=ssrc:2 cname:audio-stream
a=ssrc:2 msid:stream2 audio-stream
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 ptime=10;maxaveragebitrate=48000;stereo=1;sprop-stereo=1;useinbandfec=1

m=application 10001 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 172.17.0.7
a=mid:0
a=sendrecv
a=sctp-port:5000
a=max-message-size:262144

组成结构特点

  1. 版本信息(v=):SDP消息的版本号。
  2. 会话标识(o=):会话所有者或创建者的信息,包括用户名和会话标识符。
  3. 会话名称(s=):会话的名称或标题。
  4. 时间描述(t=):会话的有效时间或活动时间。
  5. 媒体描述(m=):每个媒体流的描述,包括媒体类型(如音频、视频)、传输端口、传输协议、支付类型等。
  6. 属性(a=):一系列属性行,提供额外的信息,如编解码器的具体参数、带宽限制、电子邮件地址等。

SDP 编解码器

编解码器(Codec)主要用于描述音视频流的编码格式,并通过 a=rtpmapa=fmtp 字段进行详细配置。以下是常见的音视频编解码器及其在SDP中的表示方式,常见的编解码器有:

出流是H264 相机是VP8

在 WebRTC 中,每个媒体轨道(如视频、音频)在同一连接中最终只会使用一种编解码格式,但在协商过程中,SDP(Session Description Protocol)会列出所有支持的编解码器,并通过 Offer/Answer 模型 选择最优解

  • 单轨单编解码器:

    • 对于 单个视频轨道(或音频轨道),WebRTC 连接最终只会使用 一种 协商后的编解码器(如 H.264 或 VP8)。
    • 不能同时使用多种编解码器传输同一路流(例如:不能同时用 H.264 和 VP8 发送同一摄像头画面)。
  • 多轨多编解码器:

    • 如果连接中有 多个视频轨道(如屏幕共享 + 摄像头),每个轨道可以独立选择编解码器(例如:摄像头用 H.264,屏幕共享用 VP8)。