三网融合情况下,实时语音通信技术解决之道

随着技术和标准的不断成熟,伴随着“三网合一”的大潮,VoIP可望成为下一代电信基础设施结构的杨心,使未来各电信业务综合统一在IP网络上成为可能,导致数据的融合和未来电信市场的重组,并带来新的经济模式和价值链。


Internet在全世界范围内的快速发展和语音信号处理技术的进步,促进了voP(IP网络下的语音技术)业务的兴起。由于VoIP务以传统的Iternet为基本平台,具有不可比拟的价格优势,因此发展前景十分广阔。

   我门通过设计的两台计算机间的语音通信软件,实现了全双上语音通信信。PC-PC的语音传输,需要麦克风、音响。声卡等设备就可以通过IP网实现这种应 用。这种VoIP方案的显著优点就是可以支持多媒体通信,主要适用于计算机用户。其原理是利用电话软件把送入话筒的声音进行编码压缩、分组,变成IP数据 报,经Intemet网络传送;接收端利用软件进行解码,还原成原来的信号后送到扬声器中。由于软件所需要的设备较为简单,尤其是随着计算机的日益普及、 各种硬件设备不断发展;局域网不断增加;通信信道容量不断增加;计算机CPU处理能力不断增强;具有人工智能的可即插即用软件代码技术的出现等等,这些郡 为VoIP的发展提供了强有力的技术支持。

  在以上处理过程中,要用到一系列的网络接口以及缓冲区来处理数据,但是当前还没有一种固定的和通用的策略能够完全解决VolP应用中的QoS问题。本文就存在的问题进行了分析,并给出了一组解决问题的策略。

  2.问题的提出

  (1)时延、抖动和丢包三者之间的关系

   从网络的角度来看,时廷、抖动和丢包三省同时制约于网络的运行状况,当网络的服务质量下降时,三者均迅速恶化,从终端处理的角度来看,时延。抖动和丢包 三者之间又相互影响,比如:在终端处理中,为/减小抖动带来的影响,就要采用抗抖动缓冲区,这就引入了额外的时延;为了减小迟到的语音包数量,可以延迟语 音的回放,但也会引入额外的时延;为了采用丢包恢复技术,往往需要利用后续帧信息,这样也就引入了一定的时延;如果抖动效应加强,势必会引起迟到的语音包 数量增多。为了解决好话音质量出问题,就必须在这三者当中效虾权衡。

  (2)缓冲区机制对语音实时传输性能的影响

   缓冲区机制对语音实时传输性能的影响也就是对语音从采样到回放这一时间延迟的影响,特别是当为了满足内存分配的需求而移动全局内存块和抛弃可抛弃的内存 块时,消耗的系统时间将对一些实时性操作产生严重影响,在语音实时通信中,用扩大内存的有效的页面技术和磁盘交换技术将不再适用,因为这些语音数据块不能 放在真正的主存中以满足实时性要求,需要通过设计数据结构和信息列表实现优化的缓冲机制。

  同时缓冲机制对语音的连续性也有很大影响,如果定制的录音缓冲区过小,就会使录制的语音帧过小,从而使语音蛮得不连贯。对内存资源的过度占用将导致系统资源的不足。因此需要一种既高效利用内存,又尽量减少语音传输时延的缓冲区管理机制。

  (3)网络分组信息的丢失

   分组丢失对语音质量有非常大的不良影响。当语音经过—个使用分组丢失作为手段来管理数据网络阻塞的略由器的,这是很麻烦的。对于TCP的数据,端站简单 地重新发送丢失的数据并降低它们的通信速率,缓解阻塞,保证数据正确性,而对于UDP协议的语音,没有时间进行重新发送,所以VolP系统只能适应这种丢 失。除了由于中间网络部件引起的分组丢失外,语音网络中由于超出抖动缓冲区的可忍耐的到达延时也引起分组丢失。

  在分组被丢失的情况下, 如果语音分组丢失是随机的、不相关的,当前的语音编码器的声码器在分组丢失率小于10%的情况下,简单的办法是在丢失包的间隔处插入最后接收到的包,仍能 恢复出质量可接受的语音信号。当然,也可以设计出优化的缓冲区,从而前向纠错以减少对语音质量的影响。

  3.网络协议的选择策略

   实时语音的特点:实时性要求高,且允许语音数据在一定的范围内出错;IP语音的特点:由于IPV4不能够提供服务质量保证,所以丢包率和抖动是不可预知 的,并且把它们带到了上层协议——IP/UDP中。TCP的特点:能提供面向连接的流传输,可靠性很高,但是会占用网络较多的资源;UDP的特点:能提供 无连接的数据包传输,不可靠,对网络的资源占用较少。

  由于TCP在传输数据前建立的是虚链路,它不能保证各个语音包在相等的时间内到达,即无法避免话音抖动现象。而且当网络状况不佳时,也无法避免丢失语音包,即使重传也有可能无法满足语音的实坷性。更有甚者,它的窗口技术也会造成较大的附加抖动。

   至于UDP,则有可能出现语音包的丢失、重复和失序(好在语音通信允许出错),话音抖动现象也无法避(比TCP好),效率较TCP要高。但需要在应用层 增添排序、抗抖、抗重复和抗丢包等功能。所以,对于网络时延较大的场合,一般选用UDP来传输语音包;而在网络负载较小的场合,TCP更为方便。如图分别 为TCPAJDP编程时序图。

  随着IPv6的成熟应用,不仅用于解决In-ternet网络地址的危机,而且在解决Internet网 络性能方面也有很大的突破;在4ESV中提供了对QoS的支持,在IPv6中定义了两个参数;业务类别域和数据流标志位。业务类别域将IP包的优先级分为 16级,优先级分为两类:0-7用于在网络发生拥塞时通过减少数据包的发送速度来实现拥塞控制的业务;8-15用于一些实时性很强的业务,它在网络拥塞时 不作任何减少流量的控制。对于那些需要特殊QoS的业务,可在IP数据包中设置相应的优先级,路由器根据IP包的优先级来处理数据。因此,voIP将得到 更好的应用。

  4.缓冲区的设计策略

  (1)发送端缓冲区的设计

   在语音发送端,语音采集时必须要申请缓冲区,而且这种缓冲区既用作语音信号的输入,又用作语音帧的输出。如果采用单一缓冲区机制,将有可能出现数据覆盖 问题。数据发送操作中也存在此问题,实际应用必须通过实验确定缓冲区的数目,既保证语音数据库不丢失,又不会多用内存。

  决定发送缓冲区的数目的因素有两个,一个是编码缓冲区的数目;另一个是一个数据分组的发送的最长时间与一个数据分组的最短打包时间的比值,由于实际应用中,实时语音的传送一般采用非连接的网络传输协议,所以发送缓冲区的数目可以小于或者等于编码缓冲区的数目。

   决定编码缓冲区的数目的因素有两个,一个是录音缓冲区的数据目;另一个是一个数据分组的最长打包时间与一个数据分组的最短编码时间的比值,如果这个比值 小于1,则对编码缓冲区的数目没有特殊要求,如果大于1,则要求有尽可能大的编码缓冲区数目,但一般不要超过录音缓冲区的数目,这是由语音数据的实时性和 连续性所决定的。

  (2)接收端缓冲区数目

  在语音接收端必须有一组接收缓冲区,理由有三:

  ①IP网络阻塞状况不稳定,数据到达有时十分集中,而接收数据又会花费一定的时间,太少的缓冲区会造成数据的丢失;

  ②由于IP网络只提供一种尽力型服务,不可避免地造成分组丢失和乱序,如果不加以处理,必然会影响实时语音的效果。而处理这些情况都需要存储空间,表现为一定数目的缓冲区;

  ③必须对接收到的数据进行后续的处理,而这些处理要产生一定的时延,如果只有一个接收缓冲区,有可能接收到的数据来不及得到处理就被覆盖了。另外,与语音发送方相对应,在语音接收方需要解码缓冲区和回放缓冲区。

  由于网络延迟抖动的存在和语音应用天然的等时性要求,必须对语音回放设定一个回放延迟,即按照一定的时间间隔回放语音帧,这就需要有一定数目的缓冲区来存放等待回放的语音帧。

  (3)缓冲区的大小

   录音时,缓冲区大小的选择也是一个关键性的问题。因为如果缓冲区过小,生成的语音帧也就会过小,语音的连续性遭到破坏,同时数据分组的有效数据率也会过 小,相对增加了网络负担。如果缓冲区过大,会在语音录制时和其它处理时造成比较大的处理时延,还有可能造成发送的数据分组过大而导致某协议层的数据分割与 合并,形成很大的传输时延。所以录音缓冲区要选择合适的大小,必须在语音的连续性和时延之间进行平衡。

  编码缓冲区的大小取决于录音缓冲区的大小和所采用的编码算法。实际应用中有可能采用不同的编码算法,以适应多变的网络传输状况。缓冲区的大小要采用所需的最大值。

  计算方法如下:针对一个语音包,包长度=RTP头+UDP头+IP头+Ethemet头+有效载荷。

   其中RTP头=96bit (12byte);UDP头=64bit (8byte);IP头=160bit(20byte);Ethernet头=208bit(26byte)。所以,包长度= (96+64+160+208)十有效载荷=528bit+有效载荷。有效载荷=打包周期(秒)x每秒的比特数带宽=包长度x每秒包数=(528/打包周 期)+每秒比特数因此,要根据不同的语音编解码技术,设计不同的缓冲区: G.711,每秒比特数是64k G.729,每秒比特数是8k G.723,两种,一种是5.3k,另一种是6.3k G.711, 20ms打包,带宽为(528/20+64)kbit/s G.711,30ms打包,带宽为(528/30+64)kbit/s G.729,20ms打包,带宽为(528/20+8)kbit/s G.723, 5.3k, 30ms打包,带宽为(528/30+5.3)kbit/s

  (4)缓冲区的申请和释放

   语音通信中对数据块的使用是一次性的。在各个语音数据模块中,一个数据块只会在某个操作中作短暂缓存,处理之后,该数据块对操作不再有任何意义。我们根 据实时语音数据的需要,充分利用内存硬件容量优势,编制静态数据链表,循环使用缓冲区,即在应用开始时申请所有缓冲区,将这些缓冲区排成循环队列,用完一 个缓冲区就将其排到队尾等待调用,等到整个应用结束时,一次性释放所有缓冲区。

  5.结束语

  随着技术和标准的不断成熟,伴随着“三网合一”的大潮,VoIP可望成为下一代电信基础设施结构的杨心,使未来各电信业务综合统一在IP网络上成为可能,导致数据的融合和未来电信市场的重组,并带来新的经济模式和价值链。



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

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

相关文章

ipv6相对于ipv4的改进

v更大的地址空间:16字节,128位v首部的简化:只有7个固定域,撤消了有关分段的域和校验和域,以便更快地处理分组,提高路由器的吞吐量缩短延时。v更好地支持选项:选项是有次序的,以便路由…

轻量高效的开源JavaScript插件和库 【转】

图片布局轮播图弹出层音频视频编辑器字符串表单存储动画时间其它加载器构建工具测试包管理器CDN图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果脚本。demoLightgallery.js - 是一个功能齐全的JavaScript图像灯箱插件。demoviewerjs - 是一个图像预览插件。democrop…

Linux内核中的常用宏container_of其实很简单【转】

转自:http://blog.csdn.net/npy_lp/article/details/7010752 开发平台:Ubuntu11.04 编 译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本…

mysql concat例子_MYSQL中CONCAT详解

concat()函数1. 功能:返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。2. 语法concat(str1, str2,...)3. 例子案例一:mysql> select concat(苹果,香蕉,梨子);------------------------------| CONCAT(苹果,香蕉…

常见的状态响应码

200:请求正常,服务器正常的返回数据 301:永久重定向。比如在访问www.jingdong.com的时候,会重定向到www.jd.com。 302:临时重定向。比如在访问一个需要登录的界面时,而此时没有登录,那么就会重定…

软件行业为什么那么多项目经理

记得听谁说过,软件行业的项目经理太滥了,二十几岁的毛头小伙子,动不动就是项目经理,手下没几个人,管的也没几个事,在其他行业,项目经理一般都是四五十岁的老头子做,要联系这&#xf…

ipv6的表示方法

v冒分十六进制表示法X:X:X:X:X:X:X:X 其中X表示地址中16位二进制数的十六进制值 例:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 v零压缩法如其中有多个连续的零,则可用零压缩法 如 :1080:0000:0000:0000:0008:0800:200C:417A 可写成&am…

mysql php7安装配置_centos7无网络下安装部署php7.1.33+mysql5.7.28+apache2.4.6-Go语言中文社区...

centos7无网络下安装部署php7.1.33mysql5.7.28apache2.4.6一、1、先ping www.baidu.com,root账户下,如果未联网,创建目录,把提前下载好的rpm包拷贝到rpm目录下如图:(如果没有安装包请查看我的另一篇教程下载这些安装包…

webkit渲染

2019独角兽企业重金招聘Python工程师标准>>> 参考链接 理解WebKit和Chromium 简明魔法学院 Chrome软件渲染 WebKit渲染基础 Webkit 渲染基础 Webkit不是浏览器,它是一个渲染引擎 软件渲染 硬件渲染(GPU加速) 会触发GPU加速的属性 CSS3 3D transformation, trans…

element ui中dialog相关问题

一&#xff0c;今天需要在dialog里面引入另一个页面&#xff0c;就是打开dialog显示该页面&#xff08;把页面放到dialog中&#xff09;&#xff0c;引入的语句如下&#xff1a; <iframe src"view?pathrkdj_b" ></iframe> 二&#xff0c;使用table组件时…

数据结构与算法--4.使用堆栈模拟队列

问题&#xff1a; 队列的插入和删除遵循先入先出的原则&#xff0c;而堆栈遵循后进先出的原则。用两个堆栈模拟队列&#xff0c;要求实现时不能分配超过O&#xff08;1&#xff09;的内存&#xff0c;时间复杂度必须是o&#xff08;m&#xff09;。 思路&#xff1a; 用两个…

IT行业的你,在成本部门还是利润部门

题外话&#xff1a;本文应该引起项目管理者和开发人员的思考&#xff1a;如何进行薪酬管理&#xff1f;如何规划职业生涯&#xff1f; 生在IT行业&#xff0c;发现周围很多朋友对薪酬问题有疑问&#xff0c;因为这种不解&#xff0c;导致经常带情绪&#xff0c;对工作、生活很…

ipv4到ipv6的过渡

v双协议站&#xff1a;过渡时期&#xff0c;站点必须同时支持IPv4和IPv6v隧道技术&#xff1a;IPv6主机之间通信必须使用IPv4的隧道v首部转换&#xff1a;用于发送方使用IPv6&#xff0c;而接收方使用IPv4

关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...

http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子&#xff0c;主要是单单写 lxml 与 bs4 这两个 py 模块名可能并不能一下引起大众的注意&#xff0c;一般讲到网页解析技术&#xff0c;提到的关键词更多的是 BeautifulSoup 和 xpat…

java如何去掉html标签_Java后端去掉HTML标签获取纯文本-Fun言

今天又对我的博客首页进行了一次版本的更新&#xff0c;使其自适应屏幕&#xff0c;获得更好的用户体验&#xff0c;然后就出现点小问题&#xff0c;那就是原来的摘要是人为添加的&#xff0c;有长有短&#xff0c;对自适应屏幕有影响&#xff0c;所以我们现在是截取文章的前20…

单/双中括号与测试条件

测试命令 tesst[]内置命令[[]]bash中的关键字 单中括号 格式[#express1#op#express2#] 注意&#xff1a;   其中#代表括号不能省略   不能匹配模式   变量引用应用双引号括起&#xff0c;尤其当变量引用有空格时   与或非形式-a –o -not   常量应用单/双引号括起  …

暗时间--平凡与优秀间的距离

每个人都希望&#xff0c;在他所从事的领域很优秀&#xff0c;那么如何才能优秀呢&#xff1f;有人做过一个研究&#xff0c;说那些优秀的音乐家&#xff0c;在他们成名之前&#xff0c;已经训练过10000小时。有人可能成功得早&#xff0c;如莫扎特16岁&#xff0c;有些可能需要…

IP分组

IP分组就是根据Ip地址来进行分组&#xff0c;目的可以是为了对不同 的地址组分配不同的带宽&#xff08;限速&#xff09;配置地址组时&#xff0c;其输入格式为A.B.C.D-A.B.C.E&#xff0c;例如&#xff1a;192.168.1.1-192.168.1.250

python3基础3--数据类型--数据运算--表达式if -else-while-for

一、python3 数据类型 1.1 数字例如&#xff1a;1,2,3,4等1.2 int&#xff08;整型&#xff09; 在32位机器上&#xff0c;整数的位数为32位&#xff0c;取值范围为-2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647在64位系统上&#xff0c;整数的位…

spark java教程_(Spark)学习进度十四(Spark之Java独立应用编程)

环境如下:(更新了林子雨教程中不可使用的部分) Hadoop 2.6.0以上 java JDK 1.7以上 Spark 3.0.0-preview2 二、java独立应用编程(在下载依赖jar包的过程中如遇到卡顿现象可以Ctrl+C停止下载,然后重新执行本条命令即可继续下载相应的依赖jar包) 1、安装maven ubuntu中没有自带…