问题描述
我使用 PulseAudio 通过 LAN 将声音发送到音频服务器。
在 Firefox 或 Chrome 中播放任何 Flash 媒体时,声音会颤动 ( example ),就好像音量每秒都在上下变化。
我发现如果我按照以下步骤操作,就可以停止声音颤动:
-
启动 Flash 视频,例如 YouTube 上的视频
-
在服务器上运行
pulseaudio --kill
-
等待约7秒
之后,PulseAudio 服务器会自动重新生成,Flash 视频中的声音正常。
问题是我每次启动 Flash 视频时都必须执行此操作。这显然是不可取的。
当我执行这些步骤时,如何使声音发挥作用,以便我不必执行这些步骤?
我怀疑有人会想出一个立即而简单的解决方案(尽管那会很好),因此赏金可以给予至少提供一种诊断问题的方法的任何人。
Details
这是我的声音设备输出设置。据我所知,所有四个设备都指向完全相同的物理设备。
PulseAudio log output ,在尝试播放 Flash 视频时拍摄。
我尝试从 Flash 获取日志记录详细信息,但尽管安装并启用了 Flash 进行调试,但 it has not generated any ouput at all 。
任何其他软件都不会出现此问题,因此我有理由确定它是 Flash 与我的声音设置交互方式所特有的。
以下是一些可能有用的错误输出:
$ cat /var/log/syslog | grep pulseaudio
Jul 30 01:40:08 mythbuntu pulseaudio[17388]: [pulseaudio] module.c: Failed to open module "module-esound-protocol-tcp": file not found
Jul 30 01:40:08 mythbuntu pulseaudio[17388]: [pulseaudio] module-gconf.c: pa_module_load() failed
Jul 30 01:40:08 mythbuntu pulseaudio[17388]: [pulseaudio] module.c: module-combine is deprecated: Please use module-combine-sink instead of module-combine!
Jul 30 01:40:08 mythbuntu pulseaudio[17388]: [pulseaudio] module-combine.c: We will now load module-combine-sink. Please make sure to remove module-combine from your configuration.
Jul 30 01:55:07 mythbuntu pulseaudio[17406]: [pulseaudio] module.c: Failed to open module "module-esound-protocol-tcp": file not found
Jul 30 01:55:07 mythbuntu pulseaudio[17406]: [pulseaudio] module-gconf.c: pa_module_load() failed
Jul 30 01:55:07 mythbuntu pulseaudio[17406]: [pulseaudio] module.c: module-combine is deprecated: Please use module-combine-sink instead of module-combine!
Jul 30 01:55:07 mythbuntu pulseaudio[17406]: [pulseaudio] module-combine.c: We will now load module-combine-sink. Please make sure to remove module-combine from your configuration.
Jul 30 02:04:43 mythbuntu pulseaudio[17433]: [pulseaudio] module.c: Failed to open module "module-esound-protocol-tcp": file not found
Jul 30 02:04:43 mythbuntu pulseaudio[17433]: [pulseaudio] module-gconf.c: pa_module_load() failed
Jul 30 02:04:43 mythbuntu pulseaudio[17433]: [pulseaudio] module.c: module-combine is deprecated: Please use module-combine-sink instead of module-combine!
Jul 30 02:04:43 mythbuntu pulseaudio[17433]: [pulseaudio] module-combine.c: We will now load module-combine-sink. Please make sure to remove module-combine from your configuration.
这是 the server (computer with speakers) 的 pactl list
的输出。
这是 the client 的 pactl list
的输出。
最佳方案
Preface
我能够在实验中复制 Dave 的问题,它们让我相信 Flash 会以某种方式将声音发送到 PulseAudio,从而产生大量网络流量(想想很多小数据包,而不是带宽);这淹没了 “tunnel” PulseAudio 创建的网络,即您有
Youtube => [PA-client => network => PA-server] => speakers
我可以通过将客户端和服务器放在自己的虚拟网络上来解决这个问题,从而在它们之间提供有效的无限快速连接(10 Gbits/秒);显然,这不适用于 real-world 网络:)
因此,谷歌搜索和 this post 和 this one 给了我放弃隧道(中间人,正如 Dave 恰当地指出的那样)的想法,并让客户端直接与服务器对话,即
Youtube => network => PA-server => speakers
这对我有用; Flash 视频/声音播放完美。
我们来试试吧!
这假设您的 client-server 在本地网络(路由器等)上
-
初步:在客户端计算机上,如果您有现有设置,请打开
paprefs
并取消选中所有内容;然后杀死 PulseAudio 以确定。 -
在服务器计算机(即带有扬声器的计算机)上,启动 PA 首选项 (
paprefs
) 并按如下方式进行设置:\n
\n\n\n
\n
-
然后关闭它,并在终端中终止 PulseAudio,如图所示,等待并检查它现在是否正在侦听端口 4713:
\n
\n
-
如果您没有看到它,请再次打开
paprefs
并选中“网络访问”和“网络服务器”选项卡中的其余框(它们不会造成影响) -
确保您知道服务器的 IP 地址 – 使用
ifconfig
等。我们将在示例中使用192.168.0.4
。
-
-
在客户端计算机上,打开终端,并首先使用语音示例 WAV 测试我们的直接连接(将 192.168… 替换为您的服务器 IP!)\n\nwget http://www.signalogic.com/melp/EngSamples /Orig/female.wav\npaplay –server=192.168.0.4:4713 female.wav\n\n
-
如果有效的话,用 Ctrl-C 中止,它会变得无聊;)
-
现在,关闭所有正在运行的浏览器实例,然后启动它(假设此处使用 Firefox,语法如下):
PULSE_SERVER=192.168.0.4:4713 firefox &
-
将
192...
替换为适合您服务器的 IP! -
在该 Firefox 实例中,打开 Youtube(或任何 Flash 视频网站),然后尝试播放视频 — 祈祷吧,它应该可以正常工作而不会卡顿/暂停!
让它粘住
如果您希望将此修复应用于所有程序,而不必将 PULSE_SERVER=192.168.0.4:4713
放在每个命令前面,请在客户端上编辑 /etc/environment
并将 PULSE_SERVER=192.168.0.4:4713
添加到文件末尾的新行中。还要在末尾添加换行符。
这将使客户端上的所有声音都发送到 Pulseaudio 服务器,因此在对 /etc/environment
文件进行此编辑之前,请确保这就是您想要的。
重新启动,享受流畅的音频体验。 😉
次佳方案
我认为您的问题可能与Flash播放器有关。
有一个FireFox插件Flash-Aid,可以根据您的环境安装appx flash版本。
第三种方案
如果问题是 Gnash,这里是如何修复它:
关闭所有浏览器并运行以下命令:
sudo apt-get purge gnash mozilla-plugin-gnash adobe-flashplugin
然后这个\n sudo apt-get install adobe-flashplugin
这解决了我的问题:基本上它删除了与 Gnash 相关的所有内容并安装 Flash。