我使用的是 Ubuntu 14.04.5,在从源代码重建 PulseAudio 时遇到了麻烦。这里的 PulseAudio 是 4.0-0ubuntu11.1,但我需要重建它并包含最新的补丁https://patchwork.freedesktop.org/patch/65100/从而改进了echo-cancel
模块。
我尝试按照 Ubuntu 社区文档中的说明重建 PAhttps://help.ubuntu.com/community/UpdatingADeb。即apt-get build-dep ...
,,,,,,apt-get source ...
。构建成功,只有一个错误 - “pulseaudio:postrm-does-not-call-updaterc.d-for-init.d-script etc/init.d/pulseaudio”,但我认为应该忽略它。然后我使用安装了构建的软件包patch ...
,尝试启动 PA 并出现以下错误:debchange -i
dpkg-source --commit
debuild -us -uc -i -I
debi
$ pulseaudio -vvv
<...>
D: [pulseaudio] module-systemd-login.c: Added new session c2
I: [pulseaudio] module.c: Loaded "module-systemd-login" (index: #14; argument: "").
I: [pulseaudio] module.c: Loaded "module-position-event-sounds" (index: #15; argument: "").
I: [pulseaudio] module.c: Loaded "module-filter-heuristics" (index: #16; argument: "").
I: [pulseaudio] module.c: Loaded "module-filter-apply" (index: #17; argument: "").
Inconsistency detected by ld.so: dl-open.c: 689: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!
启动失败的时刻正是echo-cancel
模块应该启动的时刻。此外,即使我重建 PA 而没有任何重大更改 - 我也会遇到同样的错误。如果我使用来自官方 Ubuntu repo 的 PA - 它会启动而不会出现任何错误并成功启动echo-cancel
模块。
这是我启用的方法echo-cancel
,我在末尾添加了以下几行/etc/pulse/default.pa
:
load-module module-echo-cancel source_name=noechosource sink_name=noechosink
set-default-source noechosource
set-default-sink noechosink
有人能建议我如何通过重建 PA 来解决这个问题吗?也许我重建包的方式在某些方面是错误的。正如我所说,问题甚至不在于重建修改后的 PA,而在于简单地重建它而不进行任何更改,所以问题似乎出在构建过程本身。
答案1
至少在主要内容上已经弄清楚了:
这是一个特定的 deb 构建问题,与 PulseAudio 本身无关:
- 断言
RT_CONSISTENT
失败是由于缺少以下依赖项导致的module-echo-cancel.so
:
ldd
此模块显示libwebrtc-util.so => not found
并且根据debuild
日志构建了此文件,但未打包到 deb因此没有安装到系统中 - 默认
trusty
PA 包已构建不支持 WebRTC AEC(这就是您不需要并且不安装的原因libwebrtc-util.so
)。 - 但我恰恰需要这种 AEC,这就是为什么我
libwebrtc-audio-processing-dev
在重建 PA 之前安装了该软件包。这些 WebRTC 库被 PA 配置脚本捕获,并且 PA 是在 WebRTC 支持下构建的,但在构建后的步骤中,并非所有必需的文件都打包到 deb 中。 - 现在,作为临时措施,我手动将其移动
libwebrtc-util.so
到所需位置。稍后我将找出如何修复构建脚本以正确处理这种情况,然后回来更新此答案。