webrtc windows api音频采集总结
来源:互联网 发布:golang chan 编辑:程序博客网 时间:2024/04/23 20:00
最近看了一下webrtc中音频采集部分代码,重点查看了采用windows api接口的实现方式。
代码文件名称:audio_device_wave_win.cc 和audio_device_wave_win.h
AudioDeviceWindowsWave类中创建了一个线程,线程调用函数为ThreadFunc,并在其中调用ThreadProcess函数,线程的调用通过_timeEvent事件进行控制,而_timeEvent中通过timer触发线程的周期性调用,周期为TIMER_PERIOD_MS = 2,说明为2ms调用1次。同时为了对声卡音量进行设置,创建2个线程分别设置音量和获取音量,线程函数为:GetCaptureVolumeThread()和 SetCaptureVolumeThread。也采用事件驱动方式实现。
异常处理:
如果timer两次调用间隔超过7ms,且连续多次出现,则说明可能有异常发生,则对timer进行重置。
对播放的处理:
如果连续两次播放间隔超过某一门限(5ms), 则进入PlayProc()接口,获取播放buffer中当前没有播放的数据长度,即播放延时。根据此播放延时,自动调整播放缓冲区的延时值(_minPlayBufDelay,_playBufDelay和_waitCounter).
当播放buffer中数据少于某门限值时,从JBM中获取一帧数据,并将从JBM中获取的数据写入声卡buffer.
当播放buffer中数据超过某门限值时,则不从JBM中获取数据.
在20s后,buffer大小已经比较稳定时,则自适应降低播放缓冲区大小( _playBufDelay = _minPlayBufDelay;).当播放延时超过150ms时,则限制播放延时不超过150ms。以此避免播放延时过大.
可以看出,这种设计方法能够最大程度上缩小端到端音频通话的延时。假设帧长为20ms,JBM有40ms延时,声卡采集10ms延时,声卡播放10ms延时,那么端到端的延时则为:20+10+2+40+10 = 82ms,如果帧长为10ms,那么端到端的延时可以做到更小。
应该说webrtc的这种设计应该是保证端到端延时最小的一种很好的参考设计。
- webrtc windows api音频采集总结
- 【webrtc】音频采集-链接错误总结
- WebRTC原生音频采集
- WebRTC原生音频采集
- Windows下wave API 音频采集
- webrtc音频引擎总结
- WebRTC手记之本地音频采集
- WebRTC手记之本地音频采集
- WebRTC手记之本地音频采集
- WEBRTC 音频从采集到网络发送
- WebRTC学习之五:本地音频采集
- WebRTC手记之本地音频采集
- webrtc中的音频设备 音频采集 AudioDeviceModule
- WebRTC之本地音频采集(四)
- webrtc中的音频采集,播放,record,Playout
- windows音频声卡采集
- windows 下wav采集音频
- WebRTC音频
- java入门第三天 switch case 运算符 小游戏准备
- [PAT (Advanced Level) ]1031.Hello World for U 解题文档
- Android adb.exe程序启动不起来,如何处理
- 内核list.h在用户态使用举例
- javaweb学习笔记之关于分层结构的初步理解
- webrtc windows api音频采集总结
- X86-64寄存器和栈帧
- Android中解析html网页
- 堆、栈面面观
- Android 学习之Android四大组件(一)——Activity
- 黑马程序员——重点:自己不太懂的小题
- GIT@OSC源码分析之发现界面(2)
- php常量的赋值与取值
- spring4.0 spring MVC(三)学习