没有合适的资源?快使用搜索试试~ 我知道了~
RFID技术中的使用DirectX技术实现视频会议中的音频通信(图)
需积分: 0 0 下载量 24 浏览量
2020-12-13
05:20:22
上传
评论
收藏 95KB PDF 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/13671395/0001-1d3c00e5f17b054928cd3834f434568b_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
2页
摘 要:本文详细分析如何采用Microsoft公司的DirectX技术,实现视频会议系统中流畅的全双工音频通信功能,这是开发视频会议系统的重要一步。关键词:DirectX;全双工;缓冲区 前 言 视频会议以其方便、快捷、“面对面”交流的优点逐渐得到了人们的认可,许多企事业单位、教育单位,医疗单位都希望使用视频会议来代替传统的会议形式。在视频会议中,与会者之间主要传输的是音频数据和视频数据,其中的音频数据显得更为重要。因为会议中的大部分有用信息都包含在与会者的言语交流上,所以视频会议系统必须保证音频通信的流畅性和全双工,才能使视频会议更接近于真实的会议环境。
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/13671395/bg1.jpg)
RFID技术中的使用技术中的使用DirectX技术实现视频会议中的音频通信技术实现视频会议中的音频通信(图图)
摘 要:本文详细分析如何采用Microsoft公司的DirectX技术,实现视频会议系统中流畅的全双工音频通信功能,
这是开发视频会议系统的重要一步。关键词:DirectX;全双工;缓冲区 前 言 视频会议以其方便、快捷、
“面对面”交流的优点逐渐得到了人们的认可,许多企事业单位、教育单位,医疗单位都希望使用视频会议来代替
传统的会议形式。在视频会议中,与会者之间主要传输的是音频数据和视频数据,其中的音频数据显得更为重
要。因为会议中的大部分有用信息都包含在与会者的言语交流上,所以视频会议系统必须保证音频通信的流畅
性和全双工,才能使视频会议更接近于真实的会议环境。
摘摘 要要:本文详细分析如何采用Microsoft公司的DirectX技术,实现视频会议系统中流畅的全双工音频
通信功能,这是开发视频会议系统的重要一步。
关键词关键词: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倍的Streaming Buffer。
并且在Streaming Buffer的正中间和结尾处分别设置标志一个触发事件。程序开始时,通过调用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重新调整回与Play Cursor保持100~
200字节间距的地方,继续对新的音频数据进行回放。上述这个过程在整个程序的运行过程中,不断地循环
进行,如图1所示,实现了在对Streaming Buffer中旧一帧音频数据进行回放的同时写入新一帧的音频数
据。
从理论上讲,这已经保证了音频回放的流畅性。但在实现过程中,由于操作的对象是一帧的音频数
据,其回放的时间仅是0.25秒,所以必须考虑的一个问题是程序的反应速度问题。如果忽略由事件触发到
真正用Lock函数锁定缓冲区的部分以进行新数据写入之间的时间,则这种实现方法没有任何问题。除了最
开始的两帧数据外,新的一帧数据会紧跟在前一帧数据之后,彼此之间没有重叠部分,也没有空隙存在,
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38624746
- 粉丝: 3
- 资源: 946
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)