我正在写一个视频播放器。对于音频部分我正在使用XAudio2。为此,我有单独的线程正在等待BufferEnd事件,然后用新数据填充缓冲区并调用SubmitSourceBuffer。 问题是如果缓冲区大小很小(1024字节),XAudio2(驱动程序或声卡)在播放下一个缓冲区之前会有很大的延迟。我进行了测量,XAudio需要多达两倍的时间来播放这样的块。 (1024字节的48khz原始2通道pcm应该在将近5ms内播放,但在我的电脑上播放时间长达10ms)。如果我制作4kbytes或更多的缓冲区,几乎没有延迟。 我需要这么小的缓冲区才能与视频时钟或外部时钟同步(就像ffplay一样)。如果我让我的缓冲区太大,那么最终用户会因为同步内容而听到很多输出噪音。
此外,我对所有正在解码和同步音频或其他任何可能阻塞或产生延迟的功能进行了测量,它们需要0或1 ms才能执行,所以它们不是100%的问题。
有谁知道它能成为什么以及它为什么会发生?任何人都可以检查他是否有与小缓冲区相同的延迟问题?
答案 0 :(得分:0)
我没有遇到使用.wav文件的任何延迟或暂停。如果您使用的是mp3格式,它可能会在压缩操作期间在声音的开头和结尾添加静音,从而导致声音播放延迟。 See this post了解更多信息。