zoukankan      html  css  js  c++  java
  • DirectShow音频采集声音不连续问题分析与解决办法经验总结

    最近广州大雨不断,并且多数无前兆,突然就来场大雨,给同学们降降温,说来本也是好事,但有时候下的真不是时候,最近这段时间都是即将下班了,大雨就来了,昨晚快下班前又出现了大雨,北方人总爱忘带雨伞,这不就被堵在公司回不了家了。

    正在盘算如何回家的空档,有同事来我的座位咨询:音频输出给音频播放设备后音频低层(OS或驱动层)处理会主动丢失先前通过调用waveOutWrite提交的待播放音频数据吗?通过记录输出给音频设备的音频数据到PCM文件A,同时将采集回来的音频数据记录到PCM文件B,在客户机性能消耗并不高的情况下发现B中记录的音频数据比A中在中间部位少了一小段。因为这个直播推流客户端最初版本是我开发的,对整个音频处理流程是知道的,然后结合Audacity音频波型分析与同事的新加功能的描述,快速将问题锁定到DShow音频采集的DoRenderSample(来自CBaseRenderer的接口函数),因为这个函数是DShow框架控制的采集线程执行的,印像中DShow参考资料上说不要在这个函数中执行高耗时操作,否则视频采集达不到预设的帧率,这样看来音频也存在同样的问题,通过尽一步与同事沟通发现,同事在DoRenderSample中调用了回声消除相关的一些函数,并且这些函数还处于开发中,目前并不太稳定,有可能偶尔出现长时间运算而不返回。至此问题原因得以定位。解决方法:1 起新的线程专门完成回声消除任务 2 在编码线程中执行编码逻辑前完成回声消除。

     一定记住了DShow音频采集的DoRenderSample接口函数中不要执行高耗时逻辑

  • 相关阅读:
    js正则验证邮箱格式
    PHP面向对象简易验证码类
    php 中 instanceof 操作符
    防止SQL注入
    通过实例详细讲解PHP垃圾回收机制
    PHP实现上传视频的功能
    二维数组分组
    时间戳转换为几分钟、几小时、几天、几周、几月、几年前
    自定义接口错误响应格式
    laravel写crontab定时任务(发送邮件)和laravel crontab不执行的问题
  • 原文地址:https://www.cnblogs.com/oldmanlv/p/5579826.html
Copyright © 2011-2022 走看看