首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在docker容器中使用音频运行应用程序

在docker容器中使用音频运行应用程序
EN

Stack Overflow用户
提问于 2015-03-11 11:41:07
回答 4查看 44.2K关注 0票数 42

这个问题是由你能在一个码头容器中运行GUI应用程序吗?提出的。

其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype、.)

我在寻找使用脉冲音频的码头容器,但是我找到的所有容器都是在tcp上使用脉冲音频流的。(应用程序的安全沙箱)

在我的例子中,我会先播放容器内的应用程序的音频,直接播放到我的主机脉冲音频。(没有ssh隧道和臃肿的码头图像)

因为我的qt应用程序正在使用它;)

EN

Stack Overflow用户

发布于 2015-03-11 19:22:48

受您发布的链接的启发,我能够创建以下解决方案。它是我所能得到的最轻巧的。但是,我不确定它是否(1)安全,(2)完全适合您的用例(因为它仍然使用网络)。

  1. 在主机系统上安装paprefs,例如在Ubuntu计算机上使用sudo apt-get install paprefs
  2. 启动PulseAudio首选项,转到"Network“选项卡,并选中”启用网络访问本地声音设备“复选框1
  3. 重新启动计算机。(只在Ubuntu14.10上重新启动Pulse音频对我没有作用)
  4. 在容器中安装Pulse音频,例如sudo apt-get install -y pulseaudio
  5. 在容器中运行export "PULSE_SERVER=tcp:<host IP address>:<host Pulseaudio port>"。例如,export "PULSE_SERVER=tcp:172.16.86.13:4713" 2。您可以使用ifconfig查找您的IP地址,使用pax11publish 1查找Pulse音频端口。
  6. 就这样。如果IP地址和Pulse音频端口可能会发生更改,则可能会自动执行第5步。此外,我不确定Docker是否永久存储环境变量,如PULSE_SERVER:如果没有,则必须在每个容器启动后对其进行初始化。

让我的方法更好的建议将受到极大的赞赏,因为我目前正在处理与OP类似的问题。

参考文献:

1

2

更新(可能还有更好的解决方案):

这还可以使用Unix套接字而不是TCP套接字:

  1. 使用-v /run/user/$UID/pulse/native:/path/to/pulseaudio/socket启动容器
  2. 在容器中,运行export "PULSE_SERVER=unix:/path/to/pulseaudio/socket"

/path/to/pulseaudio/socket可以是任何东西,为了测试目的,我使用了/home/user/pulse

也许它甚至可以使用与主机相同的路径(负责$UID部件)作为默认套接字,这样最终的解决方案将是-v /run/user/$UID/pulse/native:/run/user/<UID in container>/pulse;但是,我还没有测试过这一点。

票数 8
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28985714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档