在 docker 容器中录制本地音频

Posted

技术标签:

【中文标题】在 docker 容器中录制本地音频【英文标题】:Record local audio in a docker container 【发布时间】:2015-02-22 14:31:19 【问题描述】:

如何使用 ffmpeg 在 docker 容器中录制 Firefox 等应用程序的音频? 我找到了如何将 pulseaudio 转发到主机的示例 - netflix、skype。

当我尝试使用 pactl 时:

pactl list sources

或者

docker exec -it <container-id> bash
apt-get install pulseaudio
pactl load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/.pulse-socket

我收到一个错误:

Connection failure: Connection refused
pa_context_connect() failed: Connection refused

这也失败了

ffmpeg -f pulse -i default /tmp/pulse.wav

【问题讨论】:

【参考方案1】:

您不需要 docker 容器中的声卡 - 脉冲音频将为您创建一个空接收器/源,如果您愿意,您也可以添加一个环回设备。

但是!如果我使用需要 X 的脉冲音频库,我会遇到连接错误。我使用了 Xvfb。并做了这样的事情:

Xvfb :0 -screen 0 1600x1200x24+32 -ac -fbdir /shared_volume&
pulseaudio --start --disallow-exit -vvv --log-target=newfile:"$LOG_DIR/pulseaudio.log" --daemonize&

我只需要检测播放声音的时间,但this guide 似乎很好地详细介绍了如何使用环回设备录制内容。

【讨论】:

【参考方案2】:

默认情况下,您无法访问容器内的声卡。如果您将 --privileged 标志传递给 docker run,它应该可以工作。请注意,这将赋予容器对主机的完全权限,您可能希望将其限制为一组功能。

欲了解更多信息:https://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration

【讨论】:

主机是VPS所以也没有声卡。我有兴趣使用类似于使用虚拟帧缓冲区的虚拟声卡录制音频。 嗯,这改变了事情。不知道虚拟声卡,但我仍然怀疑这是一个权限问题。 这可能对***.com/questions/21688115/… 有所帮助,但看起来你在 Docker 中可能很难做到这一点。如果你成功了,这将是一个很好的博客。 我正在手动运行 pulseaudio:"pulseaudio --log-level=debug &" 添加环回:"pactl load-module module-null-sink sink_name=mix pactl load-module module- loopback sink=mix”和录制:“avconv -f pulse -i default /opt/recording /record.wav”。它确实记录了一些东西,但声音坏了。

以上是关于在 docker 容器中录制本地音频的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Docker 容器访问 JACK 音频

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

在 docker 容器内运行 pulseaudio 以记录系统音频

音频文件未从另一个 docker 容器播放

Docker 网络之pipework 工具将Docker容器配置到本地网络环境中

关于Docker中 容器镜像管理,数据卷网络,本地仓库,容器监控的一些笔记