如何设置 WebRTC 数据通道最大比特率?

Posted

技术标签:

【中文标题】如何设置 WebRTC 数据通道最大比特率?【英文标题】:How to set WebRTC data channel max bitrate? 【发布时间】:2022-01-23 12:43:18 【问题描述】:

我想设置我的 WebRTC 客户端可以支持的最大比特率。我只能访问客户端(接收视频帧)而不是主机(发送视频)。如何发出信号表明我的客户端只能支持低比特率(例如 512kbps)。

到目前为止,我已尝试修改 SDP 报价,添加 b=AS 字段以尝试设置最大比特率。这是我的代码:

const rtcPeer = new RTCPeerConnection()
...
rtcPeer.createOffer().then((offer) => 
    offer.sdp += `b=AS:512\r\n`; // <-- trying to set max bitrate to 512 kbps here
    rtcPeer.setLocalDescription(offer)
    ...

创建的完整 SDP 如下所示:

v=0
o=- 2186277925215273999 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0
a=extmap-allow-mixed
a=msid-semantic: WMS
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:7+MK
a=ice-pwd:removed
a=ice-options:trickle
a=fingerprint:sha-256 05:37:61:F1:48:8B:0B:9D:77:84:2C:74:5E:E3:25:7B:86:D2:E2:CF:E1:5E:A2:F6:14:C2:F5:9C:03:38:3D:ED
a=setup:actpass
a=mid:0
a=sctp-port:5000
a=max-message-size:262144
b=AS:512

请注意,我的 SDP 报价没有 m:videom:audio,因为它只是发送帧的数据通道(我无法控制它;主机)。我不确定没有m:video 是否会成功,所以我无法发送最大比特率?更多细节在这里:https://webrtchacks.com/limit-webrtc-bandwidth-sdp/

我的问题是:

    在 SDP 中设置 b=AS 是否提供了设置最大比特率的正确方法? 这是否适用于普通数据通道(SDP 报价中的非 m:video 报价)? 比特率是在客户端还是主机端强制执行的?我想知道是否可能没有设置 WebRTC 主机来尊重这个参数?并继续以它想要的任何速率发送视频帧? 我看到了其他设置比特率的方法,例如这里https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpEncodingParameters/maxBitrate。还有其他设置比特率的方法吗?

有关更多详细信息,以下是我在使用和不使用 b=AS:512 标志时记录的比特率。我注意到它的峰值高达 6mbps,在某些情况下 > 10mbps(太大了)。

感谢你们提供的任何帮助!

【问题讨论】:

【参考方案1】:

我不相信b=AS 会影响 SCTP 拥塞控制。我将深入研究 libwebrtc,但它是一个 RTP 特定值。

您对客户端有多少控制权?它只是一个浏览器吗?是移动的吗?它是在 Linux/Windows 上运行的进程吗?

使用 SCTP,您有一个 a_rwnd,它可以传达您作为接收者有多少缓冲区空间。您可以人为地限制这一点,以使发送方拥塞控制器获得您想要的行为?

【讨论】:

以上是关于如何设置 WebRTC 数据通道最大比特率?的主要内容,如果未能解决你的问题,请参考以下文章

webrtc分辨率和比特率--问题集锦

webrtc分辨率和比特率--问题集锦

如何最大化 DDR3 内存数据传输率?

react-native 的 Mediasoup 比特率限制问题

音频 属性详解(涉及采样率通道数位数比特率帧等)

复试问题(通信篇)总结