浏览器中的 Flash 无法使用 Pulse 网络音频准确播放声音

Que*_*ner 18 flash sound pulseaudio

我使用 PulseAudio 通过 LAN 将声音发送到音频服务器。

在 Firefox 或 Chrome 中播放任何 Flash 媒体时,声音会颤动(例如),好像音量每秒都在上升和下降。

我发现如果我按照以下步骤操作,我可以停止声音颤动:

  • 启动 Flash 视频,例如 YouTube 上的视频

  • pulseaudio --kill服务器上运行

  • 等待约 7 秒

此后,PulseAudio 服务器自动重生,Flash 视频中的声音很好。

问题是我每次启动 Flash 视频都必须这样做。这显然是不可取的。

当我完成这些步骤时,我如何制作使声音正常工作的任何东西,这样我就不必这样做了?

我怀疑有人会想出一个直接和简单的解决方案(尽管那会很好),所以任何人都可以提供至少一种解决问题的方法的人。


细节

这是我的声音设备输出设置。据我所知,所有四个设备都指向完全相同的物理设备。

声音设置

PulseAudio 日志输出,在尝试播放 Flash 视频时获取。

我试图从 Flash 获取日志详细信息,但是尽管安装并启用 Flash 进行调试,它根本没有生成任何输出

任何其他软件都不会出现此问题,因此我有理由确定它特定于 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.
Run Code Online (Sandbox Code Playgroud)

这是pactl list来自服务器(带扬声器的计算机)的输出。

这是pactl list来自客户端的输出。

ish*_*ish 10

前言

我能够在实验中复制 Dave 的问题,他们让我相信 Flash 以某种方式将声音发送到 PulseAudio,以创建大量网络流量(想想很多小数据包,而不是带宽);这压倒了 PulseAudio 创建的网络“隧道”,即您有

Youtube => [PA-client => network => PA-server] => speakers
Run Code Online (Sandbox Code Playgroud)

我可以通过将客户端和服务器放在他们自己的虚拟网络上来解决这个问题,让他们在它们之间有效地无限快速连接(10 Gbits/sec);显然,这不适用于现实世界的网络:)

所以,有点谷歌搜索和这篇文章这一个给我滴隧道(中间人,戴夫恰如其分地把它),并直接将其客户与服务器,即理念

Youtube => network => PA-server => speakers
Run Code Online (Sandbox Code Playgroud)

这对我有用;Flash 视频/声音播放完美无缺。

让我们试试吧!

这假设您的客户端服务器位于本地网络(路由器等)上

  1. 初步:在客户端机器上,如果您有现有设置,请打开paprefs并取消选中所有内容;然后杀死PulseAudio以确保。

  2. 在服务器机器(即带有扬声器的机器)上,启动 PA Preferences ( paprefs) 并进行如下设置:

    在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

    • 然后关闭它,并在终端中杀死 PulseAudio,如图所示,等待并检查它现在是否正在侦听端口 4713:

    在此处输入图片说明

    • 如果你没有看到它,paprefs再次打开并检查网络访问和网络服务器选项卡中的剩余框(它们不会造成伤害)

    • 确保您知道服务器的 IP 地址 - useifconfig等。我们将192.168.0.4在我们的示例中使用。

  3. 在客户端机器上,打开一个终端,首先测试我们的直连,用语音样本 WAV(用你的服务器 IP替换 192.168... !)

    wget http://www.signalogic.com/melp/EngSamples/Orig/female.wav
    paplay --server=192.168.0.4:4713 女性.wav
    
    • 如果有效,请使用 Ctrl-C 中止,它会变得很无聊;)

现在,关闭所有正在运行的浏览器实例,然后启动它(假设 Firefox 使用以下语法):

PULSE_SERVER=192.168.0.4:4713 firefox &
Run Code Online (Sandbox Code Playgroud)
  • 替换192...为适合您服务器的 IP!

  • 在那个 Firefox 实例中,打开 Youtube(或任何 Flash 视频网站),然后尝试播放视频 --- 手指交叉,它应该可以正常工作而不会卡顿/停顿!

让它坚持

如果您想让此修复适用于所有程序,而不必放在PULSE_SERVER=192.168.0.4:4713每个命令的前面,请/etc/environment客户端PULSE_SERVER=192.168.0.4:4713上进行编辑并在文件末尾添加一个新行。还要在末尾添加换行符。

这将使客户端上的所有声音转到 Pulseaudio 服务器,因此在对/etc/environment文件进行此编辑之前,请确保这是您想要的。

重新启动,享受流畅的音频体验。;)