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

在乌班图泊坞窗图像上录制声音

柏阳炎
2023-03-14

我想在捕获屏幕时用< 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

共有3个答案

广乐邦
2023-03-14

这将比您希望的要困难得多。由于Docker在嵌入式虚拟机中运行,您需要首先将声卡映射到虚拟机。映射到虚拟机后,您将能够执行一个docker run--device=/dev/snd:/dev/snd…来将设备从虚拟机映射到容器中。

问题是第一部分,特别是因为苹果和Linux是不同的操作系统。似乎有一些选项可以安装工具来创建所需的跨平台 /dev设备。一旦你这样做了,你需要配置虚拟机来将这些设备共享到虚拟机中。

葛磊
2023-03-14

我认为关键在于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"`

从这里摘录。在此链接上,如果这对您不起作用,则还有更多选项。来看看吧!

桂阳文
2023-03-14

编辑:在阅读了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时,它显示了以下错误。 日记显示以下内容: