随着技术和标准的不断成熟,伴随着“三网合一”的大潮,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网络上成为可能,导致数据的融合和未来电信市场的重组,并带来新的经济模式和价值链。

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

  1. 三网融合情况下,实时语音通信技术的研究

    随着技术和标准的不断成熟,伴随着"三网合一"的大潮,VoIP可望成为下一代电信基础设施结构的杨心,使未来各电信业务综合统一在IP网络上成为可能,导致数据的融合和未来电信市场的重组, ...

  2. Windows密码忘记,如何在无密码情况下进入系统的 解决方法。(失效)

    ​​​​​​​在有的时候,我们的电脑忘记了密码,那么我们如何取回呢?(PS:在这里我使用的是Windows系统) 1.账号分类 大家都知道,在我们个人电脑中,为了安全起见,我们会设置开机密码,而这个开 ...

  3. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...

    无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...

  4. 关于python3与python2同时存在情况下导入pyqt失败解决记录

    最近感觉tkinter功能还是比较不适合新手做出高大上的界面,故开始使用pyqt,通过pip安装好了之后,利用qt设计师设计好界面之后,cmd运行之,报错提示没有找到pyqt5模块,IDE运行能正常加 ...

  5. 前端如何实现:在不刷新页面的情况下实时看到自己的评论

    功能描述 1.类似CSDN论坛 右上角的消息通知 如果有新消息 整个页面不刷新 右上角的消息数字即时+1 2.类似于论坛评论区 ,发布评论之后,不刷新页面就可以立刻看到自己的评论 (2020-5-3更 ...

  6. python解析excel内存溢出_phpExcel大数据量情况下导出内存溢出解决

    1.将单元格数据序列化后保存在内存中 PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzi ...

  7. vs2010下backspace键失效解决之道

    现在的项目是linux项目,因为熟悉vs,所以工作模式一直是vs下写代码,阅读代码,linux下编译.最近一段时间只是看别人的代码,一直没有写,今天手痒,想写个东西,没想到发现在vs下backspac ...

  8. 如何做好游戏内实时语音体验

    游戏内语音沟通需求 早在2015年,艾媒咨询即有移动游戏社交相关数据统计:近40%的玩家因为社交因素选择一款游戏:15.6%的玩家因为一款游戏社交性差而选择离开.因此,如何提高游戏的社交属性已成为各大 ...

  9. 如何做好游戏内实时语音体验 1

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~. 作者:张晓愚,腾讯云游戏行业资深架构师 由腾讯游戏云发表在云+社区 游戏内语音沟通需求 早在2015年,艾媒咨询即有移动游戏社交相关数据统计: ...

最新文章

  1. js架构设计模式——由项目浅谈JS中MVVM模式
  2. WebSocket 原理
  3. C++测试申请最大内存空间
  4. HTML5 使用 JS 生成二维码,带头像
  5. 学号20145220《信息安全系统设计基础》第12周学习总结
  6. 世界上最奇特的国界线,万万没想到...
  7. AUTOSAR从入门到精通100讲(三十一)-AutoSar中RTE的生成准备
  8. java 数字信号_数字信号处理理论及C++和Java实现 数字信号处理理论算法与实现...
  9. 妙味css3课程---1-1、css中自定义属性可以用属性选择器么
  10. java disposable_rx-java – RxJava中的CompositeDisposable是什么
  11. 7-8 连续因子 (20 分)
  12. python中session的使用方法_python中requests库session对象的妙用详解
  13. OSPF 配置实验1
  14. PS使用:解决图片使用PS打开提示无法完成请求,因为找到不知名的或无效的JPEG标志符类型
  15. 导入csv_使用ADManager Plus从CSV批量导入用户
  16. 京瓷2211打印机清零_打印机墨粉盒清零的方法
  17. python解析mht文件_[原创].mht文件图片解析工具
  18. JAVA查询银行卡信息
  19. 基于单片机的打地鼠游戏仿真设计(#0040)
  20. 支持向量机(一)——线性可分支持向量机

热门文章

  1. .NET异步程序设计之任务并行库
  2. Java中泛型Class《T》、T与Class《?》
  3. Python 数据分析三剑客之 Matplotlib(四):线性图的绘制
  4. php version.,PHP_VERSION指什么
  5. python如何引发和处理异常_在python3.6中,如何捕捉异常并引发异常以便稍后处理?...
  6. 【CodeForces - 304B】Calendar (前缀和,水题)
  7. 【qduoj】C语言课程设计_约瑟夫问题
  8. Linux操作系统CentOS7安装
  9. dg oracle 切换模式_谈谈dg切换涉及的概念:switchover和failover区别
  10. 计算机手二进制,求教高手:计算机二进制运算法则?