首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于高带宽应用的WebRTC数据通道

用于高带宽应用的WebRTC数据通道
EN

Stack Overflow用户
提问于 2019-05-27 22:14:39
回答 1查看 2.8K关注 0票数 1

我想通过WebRTC数据通道发送单向流数据,并且正在寻找最佳配置选项(高BW,低延迟/抖动)以及其他人在这种应用程序中预期比特率的经验。

我的测试程序发送2k的块,bufferedAmountLowThreshold事件回调为2k,并再次调用send,直到bufferedAmount超过16k。在Chrome中使用它,我在LAN上实现了~135Mbit/s,在两端都有100Mbit/s的WAN连接的远程连接上实现了~20Mbit/s。

这里的限制因素是什么?

我如何才能看到数据是否真正直接进行点对点传输,或者是否使用了TURN服务器?

我的最终应用程序将使用Android上的google-webrtc库-我只使用JS进行原型设计。是否可以在库中设置选项来提高码率,这在JS官方API中是不能做到的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 02:13:57

影响吞吐量的变量有很多,这在很大程度上取决于您是如何衡量吞吐量的。但我将列出我为提高WebRTC数据通道的吞吐量而进行调整的几件事。

免责声明:我没有为libwebrtc做这些调整,而是为了我自己的WebRTC数据通道库RAWRTC,btw也为Android编译了这个库。但是,两者在底层使用相同的SCTP库,都使用一些OpenSSL-ish库和UDP套接字,因此所有这些都应该适用于libwebrtc。

请注意,在同一台机器上执行时,使用usrsctp的WebRTC数据通道实现通常是受CPU限制的,因此在测试时请记住这一点。使用RAWRTC的默认设置,我可以在我的i7 5820k上达到约520Mbit/s的速度。根据我自己的测试,Chrom(e|ium)和Firefox在默认设置下都能够达到~350Mbit/s。

好的,让我们开始调整……

UDP发送/接收缓冲区大小

默认情况下,Linux中UDP套接字的默认发送/接收缓冲区非常小。如果可以,您可能想要调整它。

DTLS密码套件

大多数Android设备都有ARM处理器,但不支持硬件AES。ChaCha20通常在软件中执行得更好,因此您可能会更喜欢它。

(这是RAWRTC默认协商的内容,所以我没有将其包含在最终结果中。)

SCTP发送/接收缓冲区大小

usrsctp的默认发送/接收窗口大小,libwebrtc和is 256 KiB使用的SCTP堆栈太小,无法在中等延迟的情况下实现高吞吐量。理论上的最大吞吐量受到mbits = (window / (rtt_ms / 1000)) / 131072的限制。因此,使用window=262144的默认窗口和相当适中的rtt_ms=20 RTT,您最终将得到理论上的最大值100Mbit/s。

实际的最大值低于这个值。实际上,远远低于理论最大值(参见my test results)。这可能是usrsctp堆栈中的错误(请参阅sctplab/usrsctp#245)。

缓冲区大小在Firefox (参见bug 1051685)中增加了,但在Chrom(e|ium)使用的libwebrtc中没有增加。

发布版本

优化级别3会带来不同(duh!)。

消息大小

您可能希望发送256条KiB大小的消息。

除非你需要支持Chrome <?(对不起,我目前不知道它落在哪里了…),那么最大消息大小是64 KiB (请参阅issue 7774)。

除非您还需要支持Firefox < 56,在这种情况下,最大消息大小为16 KiB (请参阅bug 979417)。

它还取决于您在暂停发送之前发送了多少(即缓冲区的高水位线),以及在缓冲区耗尽后何时继续发送(即缓冲区的低水位线)。我的测试表明,将高水位线设置为1 MiB并将低水位线设置为256 KiB会产生足够的吞吐量。

这减少了API调用量,并可以提高吞吐量。

最终结果

在RAWRTC上使用默认设置的优化级别3将我的速度提高到大约600Mbit/s。

在此基础上,将SCTP和UDP缓冲区大小增加到4Mbit/s,进一步提高到~700Mbit/s,其中一个MiB核心的负载为100%。

然而,我相信仍然有改进的空间,但它不太可能是低悬念的。

如何查看数据是否真正直接进行点对点传输,或者是否使用TURN服务器?

在火狐中打开about:webrtc,或者在Chrom中打开chrome://webrtc-internals,然后查找所选的ICE候选对。或者使用Wireshark。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56327783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档