我想在捕获屏幕时用< code>ffmpeg录制音频。我在使用< code>alsa时遇到的错误是,我的映像没有声卡< code>-f alsa -ac 2 -i hw:0
以下是在新版本的Ubuntu上重现的方法
在新的ubuntu docker映像中启动一个会话。
docker pull ubuntu
docker run -it --rm ubuntu
安装程序 alsa(高级 Linux 声音体系结构)
apt-get update
apt-get install alsa-utils
列出声卡
aplay -l
# aplay: device_list:268: no soundcards found...
播放此声音将失败,因为此图像没有任何声卡
sudo aplay /usr/share/sounds/alsa/Front_Center.wav
这将比您希望的要困难得多。由于Docker在嵌入式虚拟机中运行,您需要首先将声卡映射到虚拟机。映射到虚拟机后,您将能够执行一个docker run--device=/dev/snd:/dev/snd…来将设备从虚拟机映射到容器中。
问题是第一部分,特别是因为苹果和Linux是不同的操作系统。似乎有一些选项可以安装工具来创建所需的跨平台 /dev设备。一旦你这样做了,你需要配置虚拟机来将这些设备共享到虚拟机中。
我认为关键在于docker运行命令将设备映射到容器中。试试这个:
docker run -ti --rm \
-v /dev/snd:/dev/snd \
--lxc-conf='lxc.cgroup.devices.allow = c 116:* rwm' \
myContainer sh -c "echo run something"`
从这里摘录。在此链接上,如果这对您不起作用,则还有更多选项。来看看吧!
编辑:在阅读了BMitch关于不需要在本地计算机上播放的第一条评论后
我推荐使用pulseaudio,因为它不需要用户空间代码和内核模块。在我看来,alsa不太可能为docker工作(尽管我可能是错的)
如果我这样做:
apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
apt-get install ffmpeg
# Start the pulseaudio server
pulseaudio -D --exit-idle-time=-1
# Load the virtual sink and set it as default
pacmd load-module module-virtual-sink sink_name=v1
pacmd set-default-sink v1
# set the monitor of v1 sink to be the default source
pacmd set-default-source v1.monitor
# Start the ffmpeg capture to an audio file
ffmpeg -f pulse -i default out.mp3
然后在单独的终端中
paplay /usr/share/sounds/alsa/Front_Center.wav
ffmpeg捕获WAV文件的音频,并显示在out.mp3中
我真的不知道你的X设置是什么样子的,但是如果你能将音频转到pulseaudio,那么ffmpeg将捕获音频,而不需要真正的声卡
原始答案:如果你想让音频进入Mac OS声卡
我最初看到这个页面是因为我试图将音频从虚拟机播放到Mac OS。但是如果你不在乎把它从VM中取出来,那么下面的就太复杂了。我把它留在这里,因为这个想法是我在这里结束的原因
可以在VM中使用pulseaudio将WAV文件播放回物理声卡。我在Mac OS Sierra上使用docker 17.03.1-ce,并使用brew安装sox。这个设置还需要在VM上安装socat,但我认为有更多的pulseaduio知识(或者如果我有更多的时间)的人应该能够删除这个部分
策略是使用paplay通过pulseaudio播放wav文件,并让pulseaudio通过网络在VM启动时发布的端口上发送音频。在Mac端,您将连接到这个发布的端口,并通过sox将数据发送到Mac。
1. MAC:拉取并运行带有发布端口的镜像
docker pull ubuntu
docker run -it --rm -p 127.0.0.1:3000:3000 ubuntu
2.VM:更新并安装所需的包
apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
我只为wav文件安装alsa-utils,所以您可以删除它
3.VM:启动pulseaudio服务器
pulseaudio -D --exit-idle-time=-1
这告诉服务器分叉到后台,而不是基于不活动退出
4.VM:为pulseaudio创建一个“接收器”
接收器是pulseaudio以特定格式发送音频数据的地方:
pacmd load-module module-pipe-sink file=/dev/audio format=s16 rate=44100 channels=2
这将把音频以44100Hz的带符号16位双声道发送到文件/dev/audio。
5. VM:将文件附加到网络
此文件现在需要“连接”到网络,socat用于在发布的地址创建侦听套接字(注意:此处没有身份验证),以便在Mac端连接时发送音频
socat file:/dev/audio tcp-listen:3000
6.MAC:将数据从网络读入sox
在Mac端,我们现在需要连接到该端口,并通过sox将详细信息发送到音频驱动程序:
nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
mac默认有netcat(nc),因此我在这里使用它连接到发布的端口,然后将数据通过管道传输到sox,并使用指向sox的标志来匹配上面“load module”语句中设置的值。
7.VM:玩!
最后,使用pulseaudio包中的paplay可以播放WAV文件:
paplay /usr/share/sounds/alsa/Front_Center.wav
8. MAC:听着!在mac端,您现在应该可以看到音频,并能够看到sox的输出,其中包括一个小电平表,它应该会移动:
$ nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
-: (raw)
File Size: 0
Encoding: Signed PCM
Channels: 2 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: unknown
In:0.00% 00:00:06.78 [00:00:00.00] Out:299k [ | ] Clip:0
通过类似的反向设置(模块管道源?)也可以执行反向操作(即将Mac音频发送到VM上的pulseaudio)
我没有针对ffmpeg页面上的命令进行测试,因为我没有X服务器。
问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-
我正在尝试设置一个 .NET Core 控制台应用程序,该应用程序使用硒 Web 驱动程序和 Docker 中的 Firefox,但我很难理解如何实际使用官方的硒泊坞窗映像。 目前,控制台应用程序只是一个尝试Google.com并成功报告的应用程序。 尝试创建新FirefoxDriver时,我始终收到以下错误消息: 预期的浏览器二进制位置,但无法在默认位置找到二进制,没有提供“moz:firefo
我正在运行Ubuntu 14,当我尝试运行但我收到此错误: 找不到gem的mysql2( 所以我运行< code>bundle install,然后我得到以下错误。 因此,我运行了,它成功安装了,但是当我再次运行时,它会给我同样的错误:
如何将多个标签附加到一个 Docker 映像?是否可以使用一个 Docker 文件创建多个标记? 不知何故,这是可能的;例如会得到几个图像,其中一些有多个标签:
我是多克的新手。安装Docker工具箱(操作系统:Windows 10)后,我运行Docker快速入门终端,并在控制台中看到以下内容: 我做错了什么?所有系统和安装步骤的检查都是从这里开始的。 非常感谢您的帮助!
几天前,我在新安装的ubuntu 22.04上安装了LAMP,一切都很顺利。但今天当我尝试启动mysql时,它显示了以下错误。 日记显示以下内容: