XAudio2延迟小缓冲区大小

我在写一个视频播放器。 对于音频部分我使用XAudio2。 为此,我有单独的线程正在等待BufferEnd事件,并在此之后用新数据填充缓冲区并调用SubmitSourceBuffer。 问题是如果缓冲区大小很小(1024字节),则在播放下一个缓冲区之前,XAudio2(驱动程序或声卡)会有大量延迟。 我做了测量,XAudio需要长达两倍的时间才能播放这样的大块。 (1024字节大小的48khz原始2声道pcm应该在接近5ms播放,但在我的电脑上播放时间可达10ms)。 如果我使缓冲区为4kbytes或更多,几乎没有延迟。 我需要这样的小缓冲区才能与视频时钟或外部时钟同步(如ffplay一样)。 如果我让我的缓冲区太大,那么由于同步的原因,最终用户会听到很多输出噪音。

此外,我对所有解码和同步音频或其他可能阻塞或产生延迟的功能进行了测量,它们需要0或1毫秒才能执行,所以它们不是100%的问题。

有人知道它是什么以及它为什么会发生? 任何人都可以检查他是否有与小缓冲区相同的延迟问题?


我没有经历任何延迟或使用.wav文件暂停。 如果您使用的是mp3格式,则可能会在压缩操作过程中在声音的开头和结尾添加静音,从而导致声音播放延迟。 看到这个职位了解更多信息。

链接地址: http://www.djcxy.com/p/33819.html

上一篇: XAudio2 delay with small buffer size

下一篇: Can I pause the callback from within itself?