博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视频直播之优化移动端WebRTC通信
阅读量:5933 次
发布时间:2019-06-19

本文共 2631 字,大约阅读时间需要 8 分钟。

序言

本文探讨范围仅限于移动端优化,android和iOS都适用。

惯例,先上介绍

官网介绍

WebRTC is a free, open project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

中文翻译大致意思:WebRTC是开源且免费的,可以用于浏览器和移动端的实时视频通讯,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。

参数配置

WebRTC通信最主要的配置,其实都在下的RTCConfiguration这个类里面,我们着重来看下这个类有什么。

public static class RTCConfiguration { public IceTransportsType iceTransportsType; public List
iceServers; public BundlePolicy bundlePolicy; public RtcpMuxPolicy rtcpMuxPolicy; public TcpCandidatePolicy tcpCandidatePolicy; public CandidateNetworkPolicy candidateNetworkPolicy; public int audioJitterBufferMaxPackets; public boolean audioJitterBufferFastAccelerate; public int iceConnectionReceivingTimeout; public int iceBackupCandidatePairPingInterval; public KeyType keyType; public ContinualGatheringPolicy continualGatheringPolicy; public int iceCandidatePoolSize; public boolean pruneTurnPorts; public boolean presumeWritableWhenFullyRelayed; public RTCConfiguration(List
iceServers) { iceTransportsType = IceTransportsType.ALL; bundlePolicy = BundlePolicy.BALANCED; rtcpMuxPolicy = RtcpMuxPolicy.NEGOTIATE; tcpCandidatePolicy = TcpCandidatePolicy.ENABLED; candidateNetworkPolicy = candidateNetworkPolicy.ALL; this.iceServers = iceServers; audioJitterBufferMaxPackets = 50; audioJitterBufferFastAccelerate = false; iceConnectionReceivingTimeout = -1; iceBackupCandidatePairPingInterval = -1; keyType = KeyType.ECDSA; continualGatheringPolicy = ContinualGatheringPolicy.GATHER_ONCE; iceCandidatePoolSize = 0; pruneTurnPorts = false; presumeWritableWhenFullyRelayed = false; } };复制代码
  1. IceTransportsType:收集的策略类型,目前可供选择的有ALL(全部收集),NOHOST(不收集host类的策略信息),RELAY(只使用服务器的策略信息,简言之就是不通过P2P,只走服务端流量),NONE(不收集策略信息,目前作用未知)。一般来说,如果你想减少流量,那么就用ALL,WebRTC会在能打通P2P情况下使用P2P;如果你想要保证客户端的联通率,那么RELAY是你最好的选择。
  2. bundlePolicy:协商策略,, , ,基本上是选择max-bundle,主要是防止另一个客户端属于策略不可协商型。
  3. rtcpMuxPolicy:实时传输控制协议多路策略,, ,第一个是获取实时传输控制协议策略和实时传输协议策略,第二个只获取实时传输协议策略,如果另一个客户端不支持实时传输控制协议,那么协商就会失败。Tiki客户端测试发现Require比较适合移动客户端。
  4. tcpCandidatePolicy:TCP候选策略控制开关,只有Enable和Disable,TCP策略虽然有握手来保证传输到达率,但这也是效率上最致命的,会极大拉低视频传输效率,所以建议不开启,除非有特别的需求。
  5. candidateNetworkPolicy:候选网络策略,属于新出的策略,有ALL和LowCost两个值,暂时未知作用,如果有童鞋了解的话,可以交流下。
  6. iceServers:服务端的候选地址,主要是用于客户端之间建立连接前的通信。
  7. continualGatheringPolicy:收集策略时间段,有GATHER_ONCE和 GATHER_CONTINUALLY两种值,默认值为GATHER_ONCE,可以不用改。
  8. keyType:加密类型,如果没有特殊需求,不建议更改。
  9. 其他参数,有些属于M52之后新加的类型,还没有测试过,不敢妄下定论,还有一些属于测试后觉得不需要修改默认值的。

结语

以上就是本人对WebRTC通信上的一些优化,如果大家觉得哪里有疑问或者错误,可以提出交流下。

转载于:https://juejin.im/post/5cdae4646fb9a0321a151e3f

你可能感兴趣的文章
20155332 实验二 Java面向对象程序设计
查看>>
[转]如何正确清理C盘
查看>>
异步复位同步释放
查看>>
公众号自定义菜单添加特殊符号
查看>>
关于java泛型
查看>>
51nod 拉勾专业算法能力测评消灭兔子 优先队列+贪心
查看>>
PHP中函数DIR和opendir有什么区别
查看>>
227. Basic Calculator II
查看>>
Centos7.3安装和配置Mysql5.7
查看>>
Java 位运算
查看>>
关于tcp/ip的理解
查看>>
jsp 接收汉字参数乱码
查看>>
ubuntu下配置java环境【转】
查看>>
Laravel 中缓存驱动的速度比较
查看>>
Vim设置括号自动补全和快速跳出
查看>>
通过 objc_setAssociatedObject alert 和 button关联 及传值
查看>>
SpringBoot分布式 - SpringCloud
查看>>
集合的筛选
查看>>
hdu 1887
查看>>
机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)...
查看>>