实时语音通讯丢包补偿技术

文章目录

    • 基于发送端丢包补偿技术原理
      • 与媒体无关的前向差错纠正
      • 媒体相关前向差错纠正
      • 交织技术
    • 基于接受端丢包补偿技术
      • 基于插入方法
      • 基于插值方法
      • 基于重构的方法
    • 应用建议
    • 非交互式
    • 交互式
  • 拓展阅读
  • 参考

丢包补偿技术可以分为两类:基于发送端补偿、基于接受端补偿

基于发送端补偿:前向差错纠正、交织和重传技术

基于接受端补偿:错误隐蔽算法

基于发送端丢包补偿技术原理

  • 主动:主动重传
  • 被动:被动通道编码
    • 前向差错纠正技术(FEC)
      • 与媒体无关的方法
      • 利用音频属性的媒体相关方法
    • 基于交织的技术

与媒体无关的前向差错纠正

每个媒体数据包附带k个校验包,校验包的每个bit都是由相关数据包的同位置bit产生的。

下面是4个媒体数据包附带1个校验包:

在这里插入图片描述

TODO:疑问:具体怎么从FEC重构出3号包的呢?

优点:该方式补偿与具体的媒体内容无关,计算量小

缺点:不能立即解码,引入延时,带宽增加

媒体相关前向差错纠正

一种简单的抗丢包方式是,采用多个包传送同样的音频单元。一旦丢了一个,信息可以从另外一个包含该单元的恢复出来。

第一个传输的数据包称为主要编码,第二个传输的复本称为次要编码。

次要编码一般为主要编码的较低码率和较低音质的编码。

在这里插入图片描述

编码器的选择取决于带宽需求和计算复杂度需求。

如果主要编码器能做到高音质和低码率,那么次要编码器也可以采用和主要编码器一样的方法。

媒体相关前向差错纠正引起了包大小的额外开销:

8kHz PCM U律的主要编码器占用64kb/s带宽,全速率GSM编码的次要编码器占用13.2kb/s带宽,这样就增加了20%的带宽开销。

额外的带宽开销并不是固定而是可变的。分析表明,利用语音的特性,并不需要在每个语音包附加媒体相关前向差错纠正,加上这些策略,可以节省30%的带宽。

媒体相关前向差错纠正的一个好处就是不会引入大的延时,最多也就是一个包的延时。这适合实时交互的应用。

交织技术

当我们考虑比语音包还小的语音单元并且可以承受较大的延时,交织是一种很有用的抗丢包技术。

语音单元在传输之前重新排序,这样在传输流中原来领近的语音单元变成有规律间隔的单元,接收端再按原来的顺序排列回来。

下面将20ms包分为5ms单元:传输的一个丢包变成了分散的多包中的单元丢失。

在这里插入图片描述

交织的好处:

  • 长时间的丢包给听觉带来不舒适和难以理解,但是短时间的单元丢失是更易被听觉接受的,也容易理解;
  • 错误隐藏比较容易处理短时间的单元丢失,因为时间短语音的变化小。

交织的不足就是也会引入延时,只适合非交互式的应用。交织的另外一大好处就是不会引起带宽需求的增加。

基于接受端丢包补偿技术

错误隐蔽算法是接受端丢包补偿技术的主要理念。

它通过产生一个与丢失的语音包相似的替代语音,从而实现基于语音的短时语音相似性。它可以处理较小(<15%)的丢包率和较小的语音包(4~40ms)。

当丢包长度长度达到音素的长度(5~100ms),整个音素的丢失将导致该算法的失效。

音素概念:

https://baike.baidu.com/item/%E9%9F%B3%E7%B4%A0/5689615?fr=aladdin

基于接收端的差错隐藏技术可以分为三类:

  • 基于插入的方法
    • 拼接法
    • 静音置换法
    • 噪声置换法
    • 包重复法
  • 基于插值的方法
    • 波形置换法
    • 基音波形复制法
    • 时间尺度修正法
  • 基于重构的方法
    • 传输状态插值法
    • 基于模型的恢复法

基于插入方法

插入一个填充包来修复丢包,填充包一般都很简单,比如静音包、噪声包或重复前面的包。虽然容易实现,效果很差。

缺点:没有利用语音的信息来重新产生信号。

**拼接法:**直接把丢包两端的语音拼接起来,这种最简单的方法不但打乱了语音的时钟顺序,而且只适合很小的丢包间隔(4-16ms)和极低的丢包率,丢包率大于3%就不能忍受了。

**静音置换法:**该方法在丢包处加入静音,这样保持了语音的时钟顺序。它只有在很小的包大小(<4ms)和很低的丢包率(<2%)是有效的。随着包大小的增加,他的性能明显下降,到40ms的包大小就完全不能接受了。

**噪声置换法:**该方法在丢包处加入背景噪声或舒服噪声。它比静音置换法好处是提高了语音的可理解性,效果较好。

**重复法:**利用接受到的最近包来重复代替丢失的包,具有低计算量和适度的音质。较长的后续丢失包可以衰减重复的包来产生。比如GSM中,丢包前20ms采用重复,后续320ms的通过衰减重复包到零。

基于插值方法

该方式通过某种形式的模式匹配和插值技术以期望得到与原来丢包相似的代替包。该方式比插入方法实现难度要大但效果好些。该方式相对插入法的好点就是考虑到了语音的变化信息来产生信号。

波形置换法(Waveform substitution):该方式使用丢包前(可选后)的语音来找到合适的信号代替丢包。它通过单端或双端模式来确认合适的基音周期。单端模式时,基因周期重复跨越丢包区域,双端模式时需要对两边的周期进行插值。

基音波形复制法(Pitch waveform replication):这是一种带有基音周期检测算法的改进型波形置换法。它利用丢包双端的信息,在无声状态时可以重复前面的包,有声状态时重复基音波形。其效果比波形置换法要好。

时间尺度修正法(Time scale modification):该方法允许语音从丢包两端按基音周期伸展来跨越丢包区域,在两者交叠的地方进行平均。该方法计算量较大,但是效果比前面两个好些。

基于重构的方法

该方式通过丢包前后的解码信息来重构产生一个补偿包。该方式音质最好但是实现难度也是最大的。重构修复技术使用语音压缩算法的知识来获得编码参数,这样丢失的包就可以合成。该方法依赖于编码算法,但是由于有大量信息可用,效果较好,计算量也大。

传输状态插值法(Interpolation of transmitted state):对变换域编码和线性预测编码而言,解码器可以在传输状态之间进行插值。比如 ITU G.723.1对丢包两端的线性预测系数进行插值,使用原先帧的周期激励。这种方法的计算量和解码是一样的,不会增加。

基于模型的恢复法(Model-based recovery):该方法把丢包前后的语音嵌入到一个语音模型中用来产生丢失的包。有研究者采用过去的样本对语音进行自回归分析建模。这种方法的适应性是因为,第一,间隔的语音帧如果足够小(8-10ms)就有很强的相关性;第二,大部分的低比特率编码技术就是采用的自回归分析和激励信号的模型。

在这里插入图片描述

要获得好的丢包补偿效果就必须采用复杂的算法。上图显示了各种错误隐蔽算法的复杂度和质量对应关系,可以根据需要采用。比如带有衰减的包重复法是一种折衷方案。

应用建议

非交互式

对于非交互式的语音应用,比如多点广播,对延时的要求没有音质高。交织是强烈推荐的丢包补偿技术,对于交织后的语音,还要采用合适的错误隐蔽算法。与媒体无关的前向误差纠正技术也适合这种应用。

交互式

交互式的应用比如IP电话、即时通讯应用中的实时语音聊天等,对延时很敏感,因此,交织和与媒体无关的前向误差纠正技术都不适合这种应用。媒体相关的前向误差纠正技术只引入很小的延时和较小的带宽增加,是较好的选择,可以利用低比特率的次要编码器获得丢包补偿效果。另外,还可以采用带有衰减的包重复法等效果较好计算简单的错误隐蔽算法进一步提高音质。

拓展阅读

https://hanhandi.blog.csdn.net/article/details/108795644

参考

http://www.52im.net/thread-251-1-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于并发概念的一些笔记

目录1、基于锁的并发数据结构1、并发计数器2、懒惰计数器3、并发链表4、并发队列5、并发散列表总结2、条件变量使用&#xff08;POSIX&#xff09;生产者/消费者 &#xff08;有界缓冲区问题&#xff09;覆盖条件扩展3、信号量使用二值信号量&#xff08;锁&#xff09;0值信号…

对于线程并发模型与事件并发模型的思考

这里将以对话的形式进行&#xff1a; A&#xff1a; 普通的线程是可以被其他线程中断掉的&#xff0c;而基于select、epoll的事件处理函数实际上是不可以被其他事件&#xff08;线程&#xff09;中断的。 我这个理解对吗&#xff1f; B&#xff1a; 图片里的应该是对是否…

Ubuntu 14.10 -- 异次元软件世界

Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]一说到 Linux&#xff0c;就不得不提目前最红火的 Ubuntu 发行版了&#xff01;它拥有绚丽的界面&#xff0c;甚至跟以时尚为卖点的 Mac OSX 相比也有过之而…

System Design笔记:在线售票系统设计

文章目录何为在线售票系统&#xff1f;系统目标和要求1、功能要求2、非功能性需求3、设计注意事项4、容量估算5、系统API1.SearchMovies2.ReserveSeats6、数据库设计7、高级设计8、细节模块设计9、流程服务器如何跟踪所有尚未预订的active预订&#xff1f;服务器如何跟踪所有等…

流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)

目录一、综述需求分析协议定制二、MPEG2-TS协议三、RTSP协议、RTP、RTCP、SDPRTSPRTP、RTCP、SDP四、RTMP五、HLS、HDS、HSSHLSHDS和HSS六、MPEG-DASH协议具体内容应用七、流媒体服务器流媒体服务器的功能与挑战客户端支持协议支持应用场景应用特点扩展技术广告投放录屏其他一、…

eclipse偶尔会反映迟钝,直接无视其报错

比如&#xff0c;你在web.xml中配置了什么东西&#xff0c;在有的时候不一定就会立即被eclipse察觉到&#xff0c;即便你的配置正确了&#xff0c;甚至重启了几次服务器&#xff0c;它仍然给你报错 比如说&#xff0c;刚才我在web.xml中配置了一个taglib&#xff0c;并且tld文件…

Qos(Quality of Service)

QOS&#xff08;即Quality of Service&#xff0c;服务质量&#xff09;主要指网络环境下服务满足用户的程度&#xff0c;在视频服务的语境下也可认为是Quality of Streaming&#xff0c;即流媒体服务的质量。通常&#xff0c;QOS可以由一系列指标表达&#xff0c;如传输的速度…

Popline:帅气的浮动 HTML5 文本编辑器工具栏

Popline 是一个基于 HTML5 实现的富文本编辑器工具栏&#xff0c;设计灵感来自 PopClip &#xff0c;相比传统的文本编辑器工具&#xff0c;Popline 能够浮动在编辑的文本周围&#xff0c;操作起来十分方便。 您可能感兴趣的相关文章Metronic – 基于 Bootstrap 响应式后台管理…

流媒体技术优化

文章目录1、下载策略优化CDN选择策略错误处理策略码率选择策略2、协议和架构优化HTTP2TCP变种拥塞控制QUIC架构流媒体协议的选择与分发体系架构的设计对优化起着关键作用。 HLS和DASH协议在点播和OTT直播服务中已逐渐占据主流&#xff0c;其思想主要是将视频转为不同码率并切为…

API设计笔记:pimpl技巧

pimpl pointer to implementation&#xff1a;指向实现的指针&#xff0c;使用该技巧可以避免在头文件暴露私有细节&#xff0c;可以促进API接口和实现保持完全分离。 Pimpl可以将类的数据成员定义为指向某个已经声明过的类型的指针&#xff0c;这里的类型仅仅作为名字引入&am…

《设计模式》-责任链模式

责任链模式是一种对象的行为模式【GOF95】。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的用而链起来形成一条链&#xff0c;请求在这个链上传递&#xff0c;直到链上的某一个对象决定处理此请求。 发出请求的客户端并不知道链上的哪一个对象终处理这个请求&#…

【机器学习】EM最大期望算法

EM, ExpectationMaximization Algorithm, 期望最大化算法。一种迭代算法&#xff0c;用于含有隐变量(hidden variable)的概率参数模型的最大似然估计或极大后验概率估计&#xff0c;其概率模型依赖于无法观测的隐变量。 经常用在ML与计算机视觉的数据聚类领域。 EM应用&#xf…

做一个给自己手机免费发送“天气预报”信息的软件

实现一个以下截图这样的功能&#xff01;没错&#xff0c;就是你手机可以收到“免费”的天气预报短信&#xff01; 一、在做之前必须了解以下四个功能&#xff1a; 1、WebService 2、Quartz.Net&#xff08;定时任务框架&#xff09; 3、SMTP&#xff1a;简单邮件传输协议,它是…

Android_Chronometer计时器

最近做一个项目用到Handler 和Message &#xff0c;开始时不是很明白&#xff0c;不了解其中的内部机制&#xff0c;所以开发起来有点难度&#xff0c;之后自己找了Android 时间服务 这一节的内容&#xff0c;总结了一点关于时间的知识&#xff0c;在这里大概写一下&#xff0c…

置顶 | wolai博客

最近用wolai记录笔记较多&#xff0c;这里放一下我wolai的地址&#xff0c;当然csdn这边也会同时更文。 hanhan的博客

为你的程序添加监听器

平时在写程序时经常会遇到监听器&#xff0c;比如按钮的click监听器&#xff0c;按键监听器等等。而android中的监听器和java中的回调函数是同一个概念&#xff0c;都是在底层代码中定义一个接口来调用高层的代码。那么什么是回调函数呢&#xff1f;网上说的是“在WINDOWS中&am…

Git push 时每次都需要密码的疑惑

2015.1.13更新&#xff1a; 在本地搭建Git服务器时&#xff0c;也是有每次操作需要密码的情况。 是因为每次做推送动作时&#xff0c;Git需要认证你是好人。所以需要密码。 可以在 /home/username/.ssh/authorized_keys 文件里添加你的 ssh 公钥。一行一个。这样就可以在你push…

【PS】Gold words tutorials 赤金字教程

material_01material_021. White background and black words.The font of "Laker" is Teenick, and "Huang" is 中國龍粗魏碑2.Open material_01 and select a part of it.Copy and paste the part part into our workspace.You can drag and move to pa…

Android中的Handler机制

直接在UI线程中开启子线程来更新TextView显示的内容&#xff0c;运行程序我们会发现&#xff0c;如下错 误&#xff1a;android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.翻译过来就是&…

并行编程——内存模型之顺序一致性

1 定义 Sequential consistency , 简称 SC&#xff0c;定义如下 … the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequen…