公司介绍 新闻动态 硬件产品 软件产品 解决方案 成功案例 政府部门
连锁商业 金融保险 远程教学 技术支持 网上演示 合作伙伴 技术论坛
“AcMeeting远程视频会议系统”独家通过“AVSCE电信级高清视频会议产品”标准体系认证。
远程多媒体高清软件视频会议系统
  首页 >> 新闻中心 >> 正文

视频会议中的音频通信之DirectX实现
 

  视频会议以其方便、快捷、“面对面”交流的优点逐渐得到了人们的认可,许多企事业单位、教育单位,医疗单位都希望使用视频会议来代替传统的会议形式。在视频会议中,与会者之间主要传输的是音频数据和视频数据,其中的音频数据显得更为重要。因为会议中的大部分有用信息都包含在与会者的言语交上,所以视频会议系统必须保证音频通信的流畅性和全双工,才能使视频会议更接近于真实的会议环境。

  DirectX是Microsoft开发的专门用于开发游戏和多媒体软件的应用程序接口(API),包括了对二维和三维图像、声音、音乐和针对网络多人游戏的网络通信的强大支持。DirectX是一种标准的软件接口,所有主要的硬件供应商都提供支持DirectX的驱动设备,应用DirectX的软件可以在不同的硬件环境下正常运行。另一方面,DirectX能根据所使用的不同硬件,来选择适当的方式使用硬件加速能力,便于开发高质量的多媒体和游戏软件。在DirectX所提供的众多组件中,用于音频处理的是Direct Sound组件。为保证视频会议系统中语音的流畅性,需要采用Direct Sound中提供的Streaming Buffer(流式缓冲)机制来实现。而为了保证视频会议系统中的全双工音频通信,主要利用的则是Direct Sound中的混音机制来实现。

  利用Streaming Buffer实现流畅的语音交流
  Direct Sound中提供了两种缓冲机制,分别是Static Buffer(静态缓冲)和Streaming Buffer(流式缓冲)。Static Buffer指一次将一段完整的声音存入缓冲中;Streaming Buffer指的是并不将全部的数据一次读入缓冲,而是在播放声音时动态地读入,占用空间较小。一般来说,如果声音需要反复播放而且容量有限(如游戏音效),使用Static Buffer更有助于提高程序的效率;相反,如果是容量很大、实时性要求较高的音频数据流,则使用Streaming Buffer为佳。在视频会议系统中,如使用Static Buffer,则在向缓冲区写入新的音频数据时,声音的回放必然出现短暂停顿,使与会者的完整话语不能够连续播放,影响通话的流畅性,而Streaming Buffer可克服语音不连续的缺点。

  Streaming Buffer提供了两个指针:Play Cursor(回放游标)和Write Cursor(写入游标),它们的值只是相对于缓冲区开头的偏移量而非绝对的内存地址。其中Play Cursor总是指向下一个被输出的数据字节,而Write Cursor指向的地址则指明从哪个地方开始可以安全地写入新的音频数据而不影响回放。按回放音频数据的顺序来看,Write Cursor总是在Play Cursor之前,并且它们间保持着一定的间距,而这个间距会根据不同的系统状况而有所不同,实验表明这个间距大概是100~200字节左右。当开始对缓冲区中的音频数据进行循环模式回放时,总是在Play Cursor所指的地方开始。回放后Play Cursor和Write Cursor会保持它们的间距等速度前移,并且Play Cursor总是指向下一个被输出的数据字节。当回放到达缓冲区的结尾处时,Play Cursor将重新指向缓冲区的开头,如此循环下去。而当程序停止对Streaming Buffer中的音频数据进行回放时,Play Cursor则不再移动,并停留在下一个被输出的数据字节处,直到重新回放才会继续前移。另外,在Play Cursor和Write Cursor之间的区域被认为是即将要进行回放的数据,所以不能够对其做更新。在理解了Streaming Buffer的基本工作方式后,接下来详细阐述如何用Visual C++作具体实现,其中会涉及到一些Visual C++的函数,具体可参考Microsoft MSDN。

  在程序中,设置一个大小为一帧音频数据的大小(一般相当于0.25秒的语音)的2倍的。并且在正中间和结尾处分别设置标志一个触发事件。程序开始时,通过调用Play函数对Streaming Buffer中的数据进行循环回放。当Play Cursor到达正中间和结尾时,事件就会产生,就可以通过程序向缓冲区写入新一帧的音频数据。在写入新一帧音频数据的过程中,首先调用Lock函数锁定缓冲区中的部分,此时的Write Cursor被锁定不再前移,而Play Cursor将跟随着声音的回放继续前进;利用回放Play Cursor和Write Cursor间的音频数据的一段时间内,根据锁定时获得的lplpvAudioPtr1(此时lplpvAudioPtr1指向的地方就是锁定时Write Cursor的所指的地方),lpdwAudioBytes1与Streaming Buffer相关的参数lplpvAudioPtr2、lpdwAudioBytes2等信息,把数据在指定的地方写入缓冲区,然后调用Unlock函数解除对Write Cursor的锁定。这样,Write Cursor重新调整回PlayCursor保持100~200字节间距的地方,继续对新的音频数据进行回放。上述这个过程在整个程序的运行过程中,不断地循环进行,如图1所示,实现了在对Streaming Buffer中旧一帧音频数据进行回放的同时写入新一帧的音频数据。

本新闻共3页,当前在第1页  1  2  3  


 
远程多媒体高清软件视频会议系统产品服务中心


  服务电话:8610 - 51662863

            8610 - 51658631

  电子信箱:kf@AcMeeting.com

  地    址:北京市西三环北路27号

            北科大厦 1207

 
 
·解决方案

·AcMeeting 视频会议 电信版
 
·AcMeeting 视频会议 企业版
 
·AcMeeting 视频会议 标准版
 
·AcMeeting 视频会议 小企业版

 

 
 
 
 

远程多媒体高清软件视频会议系统

 

服务电话:8610 - 51662863 、 51658631

北京移动视讯网络技术有限公司 京ICP备06032535号
北京市西三环北路27号 北科大厦

Copyright © 2006 iavs.cn All rights reserved