繁体   English   中英

如何将Docker容器中的音频暴露给Mac?

[英]How to expose audio from Docker container to a Mac?

我知道在Linux主机系统上使用脉冲音频是可能的但是paprefs是为linux而不是mac构建的。

Docker-for-Mac VM没有任何声音直通设备,因此没有任何东西可以从这个角度利用。 相比之下,虚拟机或vmware融合虚拟机确实具有直通音频的功能。

我能够使用以下命令安装pulseaudio并在OSX上工作:

brew install pulseaudio

我能够通过运行以下内容验证这是否有效,听到声音来自我的扬声器:

paplay cockatiel.wav

我的下一步是找到一个包含paplay副本的paplay 我找到了jess / pulseaudio ,它似乎是一个pulseaudio 服务器 ,但我也应该能够将它用作客户端

我在Archlinux Wiki上找到了以下关于设置pulseaudio网络声音的指南: https//wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network

通过执行以下操作,我能够适应这种情况。 我在我的Mac上编辑了/usr/local/Cellar/pulseaudio/9.0/etc/pulse/default.pa ,并取消注释以下两行:

load-module module-esound-protocol-tcp
load-module module-native-protocol-tcp

我在我的mac上重新使用paplay cockatiel.wav以确保我的更改仍然有效。 pulseaudio守护进程似乎是按需启动的,并且如果我paplay了, paplay它的投诉传回paplay ,然后打印在我的屏幕上。 我仍然对default.pa的更改有声音,所以我很满意我的更改没有破坏任何东西。

接下来,我在一个像这样的容器中运行pulseaudio客户端:

docker run --rm -v $HOME:$HOME -w $HOME -it \
  -e PULSE_SERVER=192.168.10.23 \
  -e HOME=$HOME --entrypoint paplay \
  jess/pulseaudio $HOME/cockatiel.wav

这样做是使用我的本地主目录作为卷运行容器。 这有两个目的。 首先是我的cockatiel.wav位于$HOME内部。 第二个是因为客户端和服务器都需要具有相同的~/.config/pulse/cookie文件的副本(根据archlinux wiki指南)。

PULSE_SERVER环境变量是我的OSX主机的en0 IP地址,因此paplay知道连接到什么。

HOME环境变量是必需的,因此paplay可以找到相同的~/.config/pulse/cookie文件。

我能够通过pulseaudio从我的docker-for-mac上运行的容器中播放声音。

只要您将~/.config/pulse/cookie文件显示在正确的位置,您就应该能够播放声音。 您不必使用主机卷来完成此操作 - 您还可以执行“docker cp”,甚至将其COPY到图像中。

在Mac上安装PulseAudio

brew install pulseaudio

运行守护进程:

pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon

在您的Docker容器中:

  1. 安装PulseAudio,例如apt-get install pulseaudio
  2. 设置以下环境变量: ENV PULSE_SERVER=docker.for.mac.localhost

运行它时,与容器共享~/.config/pulse目录以进行身份​​验证。

您可以运行测试以查看它是否像这样工作:

docker run -it -e PULSE_SERVER=docker.for.mac.localhost -v ~/.config/pulse:/home/pulseaudio/.config/pulse --entrypoint speaker-test --rm jess/pulseaudio -c 2 -l 1 -t wav

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM