当前位置: 首页 > 知识库问答 >
问题:

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

端木飞
2023-03-14

我知道在linux主机系统上使用pulse audio是可能的,但是< code>paprefs是为Linux而不是mac构建的。

共有2个答案

唐博文
2023-03-14

在Mac上安装PulseAudio:

brew install pulseaudio

运行守护程序:

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

在泊坞窗容器中:

    < li >安装PulseAudio,例如< code > apt-get Install pulse audio 。 < li >设置以下环境变量:< code > ENV PULSE _ SERVER = docker . for . MAC . localhost

运行它时,请共享您的< code>~/。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
尉迟兴修
2023-03-14

Mac VM的Docker没有任何声音传递设备,因此从这个角度来说,没有什么可以利用的。相比之下,virtualbox或vmware fusion VM确实具有传递音频的能力。

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

brew install pulseaudio

我能够通过运行以下程序来验证这一点,听到我的扬声器发出声音:

paplay cockatiel.wav

我的下一步是找到一个包含paplay副本的图像。我找到了jess/pulseaudio,它看起来像是一个pulseaudio服务器,但我也可以将其用作客户端。

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

我能够通过执行以下操作来适应这种情况。我在我的Mac上编辑了/usr/本地/地窖/脉冲音频/9.0/etc/脉冲/默认.pa,并取消了以下两行的注释:

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

我在mac上重新运行了< code>paplay cockatiel.wav,以确保我的更改仍然有效。pulseaudio守护程序似乎是按需启动的,如果我打错了,它会将其投诉反馈给< code>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

它所做的是以我的本地主目录作为卷运行一个容器。这有两个目的。首先是我的鸡冠花。wav位于$HOME内。第二个原因是客户机和服务器都需要一个相同~/的副本。config/pulse/cookie文件(按照archlinuxwiki指南)。

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

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

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

只要您得到~/。config/pulse/cookie文件出现在正确的位置,您应该能够播放声音。您不必使用主机卷来实现这一点,也可以执行“docker cp”,甚至COPY将其复制到映像中。

 类似资料:
  • 问题内容: 我正在尝试使用Docker容器运行PostgreSQL服务器,并从主机上与之连接。 我的配置是: 主机:Mac OS X 10.10.5 Docker 1.10.1 我已经做到了: 第1步 :为永久Postgres数据创建一个卷 步骤2 :启动postgres实例 更新 :如注释中所建议,我在运行容器时指定了端口映射 步骤3 :通过执行以下操作连接到Docker实例: 但是我只想通过以

  • 本文向大家介绍Docker动态给容器Container暴露端口操作,包括了Docker动态给容器Container暴露端口操作的使用技巧和注意事项,需要的朋友参考一下 查看Container的IP地址 docker inspect <container name or id>| grep IPAddress 查看Container的映射的端口 用iptables查看容器映射情况 iptables

  • 27.2 将Bean暴露给JMX MBeanExporter是Spring JMX 框架中的核心类。它负责把Spring bean注册到JMX MBeanServer。例如,下面的例子: package org.springframework.jmx; public class JmxTestBean implements IJmxTestBean { private Stri

  • 我有一个kubernetes文件,如下所示: 如果我想将其公开给外界流量,因为假设我的应用程序在端口上使用prometheus公开应用程序指标...如何向外界公开该端口? 我的应用程序有以下两行代码启动需要公开的http服务器: 那是普罗米修斯服务器

  • Exposing models over REST(将模型暴露给REST) 简介 REST 路径 使用 REST 路由 请求数据格式化 使用HTTP查询字符串传递JSON对象或数组 响应数据格式化 禁用 API Explorer 预定义的远程方法(remote methods) 暴露/隐藏 models, 方法, 端点(endpoints) 隐藏的方法和REST端点 案例: 只读端点(endpoi

  • 问题内容: 我需要在受控环境中测试我的使用者和消息触发器。所以我做了一个创建模拟服务器的项目:mokafelk。 它可以正常工作,但安全性很差。在旋转了3个节点 通过默认的簇但卡夫卡服务器上的监听端口暴露在所有。这里是模板的用于创建集群。 基本上,我希望容器能够相互通信。我不认为容器链接是一种选择,因为在我看来链接只是一种方式。但是,如果我正确的话,只使用暴露端口即可将端口暴露给主机,而不会暴露给