为什么音频流比视频流更难?

为什么音频流比视频流更难?

我在同一个局域网上有两台独立的 Linux 计算机。一台计算机有扬声器,另一台计算机有显示器。要播放带有视频和声音的电影,我有两个选择:

  1. 使用扬声器在计算机上播放电影,并通过网络将视频传输到带有显示器的计算机上。
  2. 使用显示器在计算机上播放电影,并通过网络将音频传输到使用扬声器的计算机。

第一个选项使用 X11 转发效果很好:

$ ssh -X computer1
$ mpv movie.avi

对于第二种选择,我尝试了PulseAudio 的网络设置/etc/pulse/default.pa,在两台电脑上设置以下内容:

load-module module-native-protocol-tcp auth-anonymous=1
load-module module-zeroconf-publish
load-module module-zeroconf-discover

然后,我在带显示器的电脑上运行mpv。这样可以,但音频太不连贯,导致电影无法观看。为什么流式传输视频没有问题,而流式传输音频却很难?未压缩的视频不是比未压缩的音频占用更多的带宽吗?

答案1

您说得对,带宽不是问题。您遇到的是抖动和欠载。解决此问题的经典方法是增加延迟(这样软管就不会干涸,可以这么说)。
对于 PulseAudio 本身,在 中/etc/pulse/daemon.conf,增加default-fragment-size-msec,也许还有default-fragments。另请参阅 中的调度部分https://linux.die.net/man/5/pulse-daemon.conf,以及讨论可能还
需要对 TCP 连接进行进一步的参数调整,但我对这方面不太熟悉。

答案2

为了我自己和其他任何人将来的参考,以下是我用来成功传输音频而没有缓冲区不足的设置。只要两个系统都有良好的网络连接,它就可以完美运行。(对我来说,在 2.4 GHz WiFi 上它很不稳定,但在 5 GHz WiFi 上它很好。)

我们将带扬声器的系统speakers和带屏幕的系统称为screen

  • 在两个系统上,安装 Zeroconf 模块:

    $ sudo apt install pulseaudio-module-zeroconf
    
  • 在 上speakers,将以下内容添加到/etc/pulse/default.pa

    load-module module-native-protocol-tcp
    load-module module-zeroconf-publish
    
  • 在 上screen,将以下内容添加到/etc/pulse/default.pa

    load-module module-zeroconf-discover
    
  • 将文件~/.config/pulse/cookiescreen复制到speakers(或者反过来,大概)。

  • screen运行时pavucontrol设置输出设备。如下面的截图所示,系统自动添加了以下“虚拟输出设备”(这也表明我的speakers系统实际上名为sea)。

帕武控制

相关内容