详解即时通讯音视频开发实时语音通讯丢包补偿技术

news2025/1/19 16:24:05

即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的。

 

现如今,随着移动互联网越来越普及,实时语音通讯应用越来越流行,但因网络状况及相关因素的影响,实时语音通讯的丢包问题在所难免,与视频不同,语音丢包处理不佳,会让通话双方体验非常糟糕。好在已经有越来越成熟的丢包补偿技术。

丢包补偿技术可以分为两类:基于发送端补偿和基于接受端补偿。基于发送端补偿包括前向差错纠正、交织和重传技术;基于接受端补偿包括了多种错误隐蔽算法。

基于发送端补偿可以分为两类:主动重传(本文不讨论)和被动通道编码。被动通道编码包含传统的前向差错纠正技术(FEC)和基于交织的技术。按照和媒体内容的关系,前向差错纠正包括与媒体无关的方法和利用音频属性的媒体相关方法。

这种方式中每n个媒体数据包附带k个校验包。校验包的每个比特都是由相关的数据包的同位置比特产生的。

优点:该方式补偿与具体的媒体内容无关,计算量小,易于实施。
缺点:不能立即解码,引入延时,带宽增加。

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

第一个传输的复本称为主要编码,第二个传输的复本称为次要编码。次要编码可以是和第一个相同,但是大部分采用较低码率和较低音质的编码技术。编码器的选择取决于带宽需求和计算复杂度需求。

如果主要编码器能做到高音质和低码率,那么次要编码器可以采用和主要编码器一样的方法。比如,ITU G.723.1可以采用这种方式,因其音质好,码率5.3/6.3kb/s,但计算量大。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

 

媒体相关前向差错纠正引起了包大小的额外开销。比如,8kHz PCM U律的主要编码器占用64kb/s带宽,全速率GSM编码的次要编码器占用13.2kb/s带宽,这样就增加了20%的带宽开销。但是,额外的带宽开销并不是固定而是可变的。分析表明,利用语音的特性,并不需要在每个语音包附加媒体相关前向差错纠正,加上这些策略,可以节省30%的带宽。

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

当我们考虑比语音包还小的语音单元并且可以承受较大的延时,交织是一种很有用的抗丢包技术。语音单元在传输之前重新排序,这样在传输流中原来领近的语音单元变成有规律间隔的单元,接收端再按原来的顺序排列回来。

交织带来两个好处:

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


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

当发送端不能做到较好的丢包补偿或发送端不能参与丢包补偿时,需要在接受端进行丢包补偿。错误隐蔽算法就是接受端的丢包补偿技术,它产生一个与丢失的语音包相似的替代语音。这种技术的可能性是基于语音的短时语音相似性,它可以处理较小的丢包率(<15%)和较小的语音包(4-40ms)。当丢包的长度达到音素的长度(5-100ms),该技术就不适应了,因为整个音素都会丢失。

插入一个填充包来修复丢包,填充包一般都很简单,比如静音包、噪声包或重复前面的包。虽然容易实现。但这种方法的效果是很差的。该方式的缺点就是没有利用语音的信息来重新产生信号。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章

【复习笔记】计算机组成原理复习重点——篇六

计算机组成原理复习重点笔记 第三篇 中央处理器 第6章 计算机的运算方法第7章 指令系统第8章 CPU的结构和功能 第&#xff16;章 计算机的运算方法 6.1 无符号数和有符号数 6.2 数的定点表示和浮点表示 6.3 定点运算 6.4 浮点四则运算 6.5 算术逻辑单元 6.1 定点数的表示 真值…

【JAVA程序设计】基于JAVA Swing的飞机票订票系统-有报告

基于JAVA Swing的飞机票订票系统零、项目获取一、项目简介二、开发环境三、项目结构四、运行截图零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一、项目简介 本项目是基于JAVA Sw…

华玉通软“雨燕”通信中间件通过德国莱茵TÜV ISO 26262 ASILD级功能安全产品认证

华玉通软&#xff08;下称“华玉”&#xff09;今天宣布“雨燕”通信中间件&#xff08;SWIFT DDS&#xff09;已通过独立第三方检测、检验和认证机构----德国莱茵TV集团&#xff08;下称*TV莱茵*&#xff09;的ISO 26262 ASIL D级功能安全产品认证&#xff0c;成为国内首个基于…

【简单项目实战】用C++实现学生成绩管理系统 | [面向对象]

目录 ●功能介绍 ●案例 ●代码展示 ●结果展示 ●功能介绍 用 C设计一个程序&#xff0c;能提供下列功能: 1. 录入学生成绩信息。按照学号&#xff0c;姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语的格式录入学生的成绩。 2.展示目前录入学生的成绩信息。以学…

丰立智能深交所上市:市值33亿 王友利家族色彩浓厚

雷递网 雷建平 12月15日浙江丰立智能科技股份有限公司&#xff08;简称&#xff1a;“丰立智能”&#xff0c;证券代码&#xff1a;301368&#xff09;今日在深交所创业板上市。丰立智能本次发行股票3010万股&#xff0c;发行价为22.33元&#xff0c;募资6.72亿元。丰立智能开盘…

java+控制台-学生选课管理系统

java控制台-学生选课管理系统一、系统介绍二、功能展示1.用户登陆2.管理员3.老师.学生四、其它1.其他系统实现2.获取源码一、系统介绍 系统实现了: 管理员&#xff1a; 1.管理课程 2.管理教师 3.管理学生 4.修改管理员密码 5.修改管理员名称 0.退出 老师&#xff1a; 1.修改密…

使用Maven创建多模块父子Spring Boot工程

使用Maven创建Spring Boot工程_紫月下枫叶的博客-CSDN博客目录1、开发环境2、创建普通maven工程3、添加Spring Boot父工程4、添加Web场景依赖5、添加主程序6、添加Controller7、添加配置文件8、运行服务9、浏览器访问服务1、开发环境IDE&#xff1a;IntelliJ IDEA 2020.3.4JDK&…

【VScode插件开发】<一>开发环境准备

VScode作为一款轻量级的IDE开发工具&#xff0c;非常好用&#xff0c;也是跨平台&#xff0c;对于习惯在命令行敲代码的人来说&#xff0c;简直不要太优秀。 VScode强大的一点就在于能够支持各种插件&#xff0c;对于一个想自己倒腾的程序员来说&#xff0c;能自己定义自己的写…

STM8开发实例-UART及重定向

UART及重定向 文章目录 UART及重定向1、UART简单介绍2、硬件准备3、软件准备4、驱动实现4.1 UART1基本定义4.2 驱动函数实现4.2.1 UART1驱动实现4.2.2 UART3驱动实现5、串口重定向1、UART简单介绍 串行通信可能是最常用的经典通信方法,用于将 PC 或其他机器与 micro 接口。 只…

如何将PDF转换为PPT?2个免费好用的pdf转ppt工具

这个教程教你如何将PDF文件变成PowerPoint演示文稿文件。有几个不同的免费在线网站&#xff0c;您可以使用它们将PDF转换为PowerPoint演示文稿。请记住&#xff0c;扫描的 PDF&#xff08;如扫描到计算机中的文档&#xff09;无法转换为可编辑的 PowerPoint 演示文稿。 方法1、…

(五)本地镜像发布到私有库将私有库上的镜像下载到本地

目录 一、下载镜像Docker Registry 二、运行私有库Registry 三、创建一个新镜像&#xff0c;例如&#xff1a;ubuntu安装ifonfig命令 四、curl验证私服库上有什么镜像 五、将新镜像修改符合私服规范的tag 六、修改配置文件使之支持http 七、push推送到私服库 八、curl再…

Anaconda和python是什么关系?

【anaconda】指的是一个开源的【Python】发行版本&#xff0c;是一个安装、管理【python】相关包的软件&#xff0c;自带了【python、Jupyter Notebook编辑器、Spyder、conda】等工具&#xff0c;常见的科学计算类的库都包含在里面了&#xff0c;使得安装比常规【python】安装要…

BI@report钻取操作

1.创建的表为浮动表 注意设置成浮动维单元格 把东西都选在红色框框里面 2.在对需要进行钻取的表元设置 设置参数 注意 参数是传递用的&#xff0c;值取的是当前表的值&#xff0c;这样参数可以带着这个表的值往下传 使用的是SQL数据源 在最后加上这行代码 having rso1.par…

「WGCLOUD」搭建安装教程, 极简高效的服务器状态监控面板

WGCLOUD安装部署步骤&#xff08;Linux版&#xff09; 1、首先我们在网站&#xff08;​ ​www.wgstart.com​​&#xff09;下载安装包 下载最新版本即可&#xff0c;如下图Linux版本的wgcloud-v3.4.2包中&#xff0c;默认包含server和agent&#xff0c;如果其他VPS要监测&a…

我通过了软考高项,有些话想说

文章目录1. 软考成绩2. 备考过程与经验3. 遇到的坑4. 论文准备5. 资料及寄语1. 软考成绩 昨天下午得到了一个振奋人心的消息&#xff0c;我的软考通过了&#xff0c;感觉努力没有白费很欣慰&#xff0c;也感觉有很多话要说&#xff08;真不是得瑟&#xff09;。可能很多人不了…

汇编语言dos功能调用(顺序程序练习)

目录 1号功能键盘输入并回显 2号功能显示器显示一个字符 9号功能显示器显示字符串 4C号功能&#xff0c;返回DOS &#xff0c; 10号功能&#xff0c;输入字符串&#xff08;大纲上有&#xff0c;但是没考过&#xff09; 练习 1小写字母转大写 2&#xff1a;输出hello wor…

【Java版oj】逆波兰表达式求值

目录 一、原题再现 二、问题分析 三、完整代码 一、原题再现 150. 逆波兰表达式求值 有效的算符包括 、-、*、/ 。每个运算对象可以是整数&#xff0c;也可以是另一个逆波兰表达式。 注意 两个整数之间的除法只保留整数部分。 可以保证给定的逆波兰表达式总是有效的。换句话…

Kubernetes核心指标监控——Metrics Server详解

1、概述 从Kubernetes v1.8 开始&#xff0c;资源使用情况的监控可以通过 Metrics API的形式获取&#xff0c;例如容器CPU和内存使用率。这些度量可以由用户直接访问&#xff08;例如&#xff0c;通过使用kubectl top命令&#xff09;&#xff0c;或者由集群中的控制器&#x…

Simulink|电动汽车、永磁电动机建模与仿真

目录 1 永磁同步电机 1.1 概述 1.2 PMSM 的建模 1.3 PMSM 的矢量控制 1.4 使用 SIMSCAPE 块建模 1.5 子系统ECU 2 直流电机 3 电动车 1 永磁同步电机 1.1 概述 本文旨在模拟永磁同步电机的性能&#xff0c;该电机使用 Rinehart 运动系统-交流电机控制器进行控制。首先收…

基于C+++Oracle11实现(PC)学生成绩教务管理系统【100010050】

学生成绩教务管理系统 一.分析与建模 系统业务流程图 项目用例图&#xff1a; 功能需求分析与建模 数据需求分析与建模 体之间的联系&#xff1a;学生信息表&#xff08;student&#xff09;、教师信息表&#xff08;teacher&#xff09;、管理员信息表&#xff08;Administ…