类似于webrtc这种基于IP网络实时通信中音质好坏受多方面因素的影响,一类为回声,噪声抑制等必须解决的问题,否则无法实现双向通话,另一类是网络丢包延迟等导致的音质变差。本文主要讨论第二类情况。

由于弱网引起的语音通话质量差通常是丢包,乱序,延迟等因素导致,针对这几种情况需要引入自适应 jitter buffer, PLC(丢包补偿),FEC(丢包恢复),NACK(重传)技术。

1.jitter buffer

jitter buffer 自适应抖动缓冲是实时音频通信中处理乱序,延迟,平滑播放的基础,一个好的jiiter buffer实现会基于网络延迟抖动情况自适应缓存大小,能在网络环境好的情况下延迟降到最低,也能在网络情况差的情况下实现平滑播放,这部分已知的实现有speex 开源的jitter buffer,不过效果一般,webrtc里的neteq 是已知开源里实现最好的,可以参考,如果单独拿neteq出来使用还是有一定工作量,因为里面融合了解码,重传,red,dtmf等内容。

2.PLC

plc是在丢包无法恢复情况下的一种语音补偿技术,有的语音编码内置了plc,比如opus,在丢包情况下,如果没有fec包的情况下,调用opus解码器,传空数据即可产生plc补偿包。如果codec不支持plc,则需要通过plc算法实现,这部分在webrtc 的neteq里也有实现。

3.FEC

前项纠错技术在视频丢包恢复里用的比较多,包括in-band fec和outband fec, inband fec是指codec 内部支持的fec机制,silk, opus这种语音编码内置支持,不过opus的fec只支持前一个包的fec 恢复,实测 opus 的fec在 30%以内效果还好,如果丢包率更高,需要配合其他技术,下面会说。

ouband fec是指codec无关的算法,其基本原理是发送端对原始数据包进行 FEC 编码,生成冗余数据包,接收端收到后,通过冗余数据包和原始数据包来恢复出丢失或者出错的数据包。这种方式的好处是能根据丢包率调节冗余包个数,快速恢复丢失的数据包,不过由于要等待冗余包,则需要引入额外的延迟,实际应用当中需要动态实现fec冗余度的计算。

4.rfc 2198

这个是rfc 是RTP Payload for Redundant Audio Data,这个rfc 定义了当前语音包可用于承载前面的几个包的语音数据,这个设计的好处能处理大量丢包的情况,小鱼易联的方式采用了这种方式。

5.重传

NACK重传技术是接收端检测到丢包后请求发送端重发的机制,这种做法实际当中用的很少,重传需要多个RTT 时间才能收到丢失的包,引入了延迟,不适合实时通话。

6.重复发送

这是一种在丢包率高,带宽又够用情况下的一种粗暴方式,好处是能处理连续丢包情况,坏处是浪费额外带宽。

总结:实际当中需要上面多个方案的组合,在不同丢包率情况下用不同方法,实际当中,使用outband fec/rfc 2198 其一,再结合codec内置的fec 和plc可处理80%丢包率。

RTC实时通信提高音质方法QOS(一)相关推荐

  1. 提高QPS方法基本思路

    提高QPS方法浅谈 最近看了一篇博文,题目是 <天池中间件大赛dubboMesh优化总结(qps从1000到6850)>,点击链接,对其中笔者优化RPC链路,提高QPS的过程非常感兴趣,所 ...

  2. 强大的心理素质如何锻炼?心理素质提高五大方法

    强大的心理素质如何锻炼?心理素质提高五大方法 强大的心理素质 强大的心理素质如何锻炼? 心理素质提高五大方法 1. 利用注意力训练来培养心理灵活性 2. 锻炼 3. 多自言自语 4. 休息 5. 明确 ...

  3. 让电脑提速的小方法-----QoS数据计划程序

    [让电脑提速的小方法]开始菜单里点击"运行",输入gpedit.msc指令后确定,会出现一个小屏幕,然后单击计算机配置--管理模板--网络--QoS数据计划程序,选"限制 ...

  4. Linux NTFS 碎片整理,提高系统性能方法:NTFS文件格式、碎片整理和NTFS压缩

    当电脑运行了一段时间之后,可能会在性能上有所降低,这时候,你可能需要优化一下系统,以提高电脑的运作性能. 这里介绍几个提高系统性能的方法 磁盘格式从FAT改为NTFS 首先,需要澄清读者对于文件系统的 ...

  5. ​独立站卖家如何优化落地页!20个落地页设计优化技巧与提高转化率方法!

    在竞争激烈的环境中发展业务很难.在争取领导和成功的斗争中,有必要使用有效的营销工具.如果您的目标是增加销售,进行产品促销或仅仅是为了吸引新客户,请通过这些简单的目标网页设计技巧来关注目标网页的机会. ...

  6. 艾司博讯:拼多多店铺权重提高的方法?

    有的小伙伴在问:店铺的权重重要吗?其实拼多多店铺的权重是非常很重要的,权重高了,关键词的排名会提高,商品的曝光才大,店铺的流量也会增多,所以接下来艾司博讯的小编将告诉你提高店铺权重的方法. 要提高店铺 ...

  7. 【提高准确率方法总结】

    文章目录 1.数据集扩增 2.增大数据集差异性,随机性 3.使用tensor transform对数据进行预处理 4.调节batch_size大小 5.设置shuffle=True 6.调节学习率(l ...

  8. rust腐蚀怎么单人游戏_腐蚀RUST怎么提高帧数_腐蚀RUST提高FPS方法_52pk单机游戏

    一.如何查看你当前的FPS.(steam办法) 一种方法是激活Steam FPS: 在Rust客户端关闭的情况下,进入主Steam程序窗口的"Steam"选项卡 点击"设 ...

  9. 软件工程师英文提高的方法分享

    什么需要提高英文 英文对软件工程师的效用不言而喻.对于国内的工程师来说 游览国外一手的技术分享.文档,紧跟最新的国外技术趋势等 又或是 和国外工程师的交流和合作 都需要较好的英文作为铺垫:对于在国外工 ...

最新文章

  1. 2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)
  2. centos7 docker
  3. springboot和quartz整合实现动态定时任务(持久化单节点)
  4. 多线程百度网盘爬虫Python完整源码
  5. 转 【MQTT】在Windows下搭建MQTT服务器
  6. Java基础学习总结(186)—— GraalVM 是 Java 在云原生时代保持强大竞争力的大杀器吗
  7. C语言编辑飘扬的红旗代码,C语言 飘动的红旗(要有旗杆)
  8. 做了5年程序员才明白,这项能力原来这么重要
  9. MacOS Monterey 12.3 (21E30) OC 0.7.9 / Cl 5145 / PE 三分区原版黑苹果镜像
  10. 基于udp端口转发程序设计(一)
  11. 黑苹果10.15.7安装comfast永存,CF-811AC驱动方法
  12. 微信公众号H5网页支付
  13. 铺地毯(NOIP真题)
  14. Perl CGI重构原则
  15. otsu天空分割 matlab,matlab图像处理--Otsu阈值分割
  16. 三态内容寻址寄存器(TCAM)
  17. 前端开发如何配置一个新电脑 VScode
  18. BUAA 计网实验笔记 3
  19. 计算机图形学【GAMES-101】5、几何(距离函数SDF、点云、贝塞尔曲线、曲面细分、曲面简化)
  20. 【题解】P1971 [NOI2011] 兔兔与蛋蛋游戏

热门文章

  1. pwm调速流程图小车_循迹+pwm调速的小车源程序
  2. 01-线性回归sklearn实现
  3. antD布局不能占满屏幕问题
  4. Linux 常用命令参考手册, 非常适合入门, 基本能满足工作日常使用。
  5. 简明扼要阐述synchronized和lock的区别
  6. TPLinker实体关系抽取新范式TPLinker:单阶段联合抽取,并解决暴漏偏差~
  7. Hadoop Namenode元数据文件 Fsimage、editlog、seen_txid说明
  8. vue怎么调用子元素的方法_vue 父组件中调用子组件函数的方法
  9. win10系统找不到telnet服务器,win10找不到telnet服务怎么办_win10没有telnet服务如何找回...
  10. 学习记录,linux使用wget命令实现整站下载