如何设置 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:video
或 m: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 数据通道最大比特率?的主要内容,如果未能解决你的问题,请参考以下文章