再会,

我一直在与一位同事讨论关于 ALSA 与 PulseAudio 的一些细节,需要一些帮助才能得出结论。据我了解,ALSA 相对较低级别,直接与硬件对话,而 PulseAudio 作为服务位于 ALSA 之上。

此外,据我所知,ALSA 与 Linux 相关联,但 PulseAudio 只是作为 ALSA 之上的抽象层,可以在其他平台上工作。我的结论是 ALSA 将在大多数 Linux 系统上提供更低的音频延迟,而我的同事认为 PulseAudio 无论如何都提供更好(更短)的延迟。

我们谁是正确的?我的理由是,由于 PulseAudio 位于 ALSA 之上甚至包裹它,除非它提供自己的低级调用,否则它无法提供更好的延迟。

谢谢你。

最佳答案

ALSA(与许多其他声音 API 一样)为要播放的样本提供环形缓冲区。

使用此环形缓冲区的最常见方法是始终保持填充。
这意味着现在写入的样本仅在缓冲区中的所有其他样本都已播放后播放,即延迟与缓冲区的大小成正比。
(缓冲区大小可以由应用程序选择,但取决于硬件的能力,一旦选择就固定了。)

PulseAudio 能够仅填充缓冲区的一部分。
(这不是 ALSA 直接提供的功能,而是需要一个单独的计时器来监控播放进度。)
因此,它可以提供比使用相同缓冲区大小的其他应用程序更低的延迟,但更重要的是,这允许它动态调整延迟,而无需停止和重新配置设备。

其他应用程序也可以这样做,但使用 PulseAudio 比再次实现该缓冲区处理更容易。

关于linux - ALSA 与 PulseAudio - 延迟问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29245583/

10-11 21:21