gpt4 book ai didi

c++ - 缓冲区大小较小的 XAudio2 延迟

转载 作者:行者123 更新时间:2023-12-03 02:22:26 25 4
gpt4 key购买 nike

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

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

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

最佳答案

我在使用 .wav 文件时没有遇到任何延迟或暂停。如果您使用的是 mp3 格式,它可能会在压缩操作期间在声音的开头和结尾添加静音,从而导致您的声音播放延迟。 See this post了解更多信息。

关于c++ - 缓冲区大小较小的 XAudio2 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com