ALSA 与 PulseAudio - 延迟问题

Posted

技术标签:

【中文标题】ALSA 与 PulseAudio - 延迟问题【英文标题】:ALSA vs PulseAudio - Latency Concerns 【发布时间】:2015-05-28 12:41:21 【问题描述】:

早安,

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

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

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

谢谢。

【问题讨论】:

即使您假设您的后端是 ALSA,但情况并非总是如此,PulseAudio 使用它的方式与另一种音乐播放器使用的方式不同(这就是为什么有这么多新的 ALSA pulseaudio 到货时发现了驱动程序错误),并且独立的 ALSA 安装将使用 PulseAudio 可以放弃的 dmix 等功能。我想你是对的,但它并不像看起来那么简单。 【参考方案1】:

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

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

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

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

【讨论】:

非常感谢。这些信息很有帮助。

以上是关于ALSA 与 PulseAudio - 延迟问题的主要内容,如果未能解决你的问题,请参考以下文章

yocto 中的 Pulseaudio 构建问题

libeXosip2 + libosip2 + ortp + mediastream2 + alsa-lib + pulseaudio

解决Ubuntu SMPlayer播放视频无声音问题

使用 Python 在 linux 中获取系统音量(声级)

在 Ubuntu Linux 上操作音频输入缓冲区

不登陆的情况下非root用户使用pulseaudio 播放音频的方式