如何将音频从Docker容器公开到Mac? [英] How to expose audio from Docker container to a Mac?

查看:522
本文介绍了如何将音频从Docker容器公开到Mac?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道在Linux主机系统上使用脉冲音频是可能的,但是对于linux而言, c

解决方案

Docker-for-Mac VM没有任何声音传输设备,所以没有什么可以利用从这个角度。相比之下,虚拟机或vmware融合虚拟机确实有能力进行直通音频。



我可以使用以下命令获取pulseaudio安装并在OSX上工作: / p>

  brew install pulseaudio 

我能够通过运行以下操作来验证这一点:听到声音从我的演讲者中出来:

  cockatiel.wav 

我的下一步是找到一张有 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上重新安装了$ code> paplay cockatiel.wav ,以确保我的更改仍然工作。 pulseaudio守护进程似乎是按需开始的,如果我输错了,则将其投诉返回到 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指南)。 p>

PULSE_SERVER 环境变量是我的OSX主机的en0 IP地址,所以paplay知道要连接什么。 p>

HOME 环境变量是必要的,所以paplay可以找到相同的〜/ .config / pulse / cookie 文件。



我可以通过pulseaudio播放在docker-for-mac上运行的容器中的声音。



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


I know it's possible by using pulse audio on a Linux host system But paprefs is built for linux not mac.

解决方案

The Docker-for-Mac VM doesn't have any sound passthrough device, so there isn't anything that you could take advantage of from that angle. By contrast, a virtualbox or vmware fusion VM does have the ability to do passthrough audio.

I was able to get pulseaudio installed and working on OSX with the following command:

brew install pulseaudio

I was able to verify this worked by running the following, hearing sound come out of my speakers:

paplay cockatiel.wav

My next step is to find an image that has a copy of paplay. I found jess/pulseaudio, which appears to be intended to be a pulseaudio server, but I should be able to use it as a client as well.

I found the following guide on the Archlinux Wiki discussing setting up pulseaudio network sound: https://wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network

I was able to adapt it to this situation by doing the following. I edited /usr/local/Cellar/pulseaudio/9.0/etc/pulse/default.pa on my mac, and uncommented the following two lines:

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

I reran paplay cockatiel.wav on my mac to make sure my changes still worked. the pulseaudio daemon seems to start on demand, and passes its complaints back to paplay to be printed on my screen if I made a typo. I still have sound with those changes to default.pa, so I'm satisfied that my changes didn't break anything.

Next, I ran the pulseaudio client in a container like this:

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

What this does is run a container with my local home directory as a volume. This serves two purposes. The first is the fact that my cockatiel.wav is located inside $HOME. The second is because both the client and the server need to have a copy of the same ~/.config/pulse/cookie file (per that archlinux wiki guide).

The PULSE_SERVER environment variable is the en0 IP address of my OSX host, so paplay knows what to connect to.

The HOME environment variable is necessary so paplay can find the same ~/.config/pulse/cookie file.

I was able to play sound from a container running on my docker-for-mac via pulseaudio.

As long as you get the ~/.config/pulse/cookie file to appear in the correct location, you should be able to play sound. You don't have to use a host volume to accomplish this-- you could also do a 'docker cp', or even COPY it into an image.

这篇关于如何将音频从Docker容器公开到Mac?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆