You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Directshow音频采集滤镜每秒仅生成1个Sample相关问题咨询

问题解答

问题1:DirectShow的Sample与音频采样定义区别

两者定义完全不同:

  • 音频录制领域的*sample(采样点)*指单声道单次模数转换得到的数值,你当前场景下16bit位宽的单个采样点占2字节,双声道模式下每次同步采集左右两个采样点,组成1个nBlockAlign=4字节的音频帧。
  • DirectShow范畴内的*Sample(媒体样本)*是IMediaSample接口封装的一段连续媒体数据缓冲区,音频采集Filter默认会将连续多个音频采样点打包成一个IMediaSample向下游传递,并非单次音频采样就生成一个DirectShow Sample,你现在遇到的就是多采样聚合到同一个缓冲区的情况。

问题2:缓冲区大小与计算值不符的原因

你当前的配置依然是双声道采集,并非单通道,原因如下:

  • 按你给出的WAVEFORMATEX参数计算:每个88200字节的缓冲区对应音频帧数量为 88200 / 4 = 22050 帧,对应实际时长为 22050 / 44100 = 0.5s,刚好是半秒的音频数据量。
  • 出现你观测到的“每秒仅触发1次回调、每次返回88200字节”的现象,有两种常见可能:
    • 你对回调触发的计数统计存在误差,实际回调是每500ms触发一次,每秒触发两次,统计时漏记了其中一次
    • 你的采集链路存在Sample丢包,音频采集Filter输出的半秒大小Sample有一半被丢弃,每秒仅成功传递1个到SampleGrabber回调
  • 验证方法:你可以在回调中调用当前IMediaSample的GetTime()方法获取样本的起止时间戳,计算单个样本的时长,同时对比连续两个样本的时间差,即可确认是计数误差还是丢包问题。

内容的提问来源于stack exchange,提问作者irous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:45:02