需求:访问宿主机声卡
docker 播放宿主机上的音乐文件,可在宿主机指定声卡上正常播放出声音
使用的是工具是alsa
docker镜像
- 系统:ubuntu20.04
拉取一个纯净系统:
$ sudo docker pull ubuntu:20.04
宿主机
- 系统:ubuntu
- 使用外接耳机
可以直接打开镜像,安装环境;也可以使用dockerfile
方法一:镜像内安装
运行镜像
将需要的资源挂载,安装完后可以直接测试。这里使用的是宿主机的一个音频文件:musicDemo.mp3
docker run -it --privileged -v /dev/snd:/dev/snd -v $宿主机/audio/:/audio/ --name alsa-test $IMAGE_NAME /bin/bash
安装alsa工具
root@xxx:~# apt-get update
root@xxx:~# apt-get install -y vim alsa-utils
刚下载的ubuntu20.04纯净镜像,需要先更新一下apt
查看声卡驱动
root@xxx:~# aplay -l
也可在宿主机查看。因为这里的驱动列表是挂载的宿主机的
root@xxx:~# vim /etc/asound.conf
打开的配置文件,写入以下内容
pcm.!default{
type hw
card 1
device 0
}
ctl.!default{
type hw
card 1
device 0
}
timer.!default{
type hw
card 1
device 0
}
保存退出即可
/etc/asound.conf 必须添加,否则耳机中可能会没有声音
安装sox
使用play指令
root@xxx:~# apt-get install -y sox libsox-fmt-all
测试
root@xxx:~# cd audio/
root@xxx:~/audio/# play musicDemo.mp3
play WARN alsa: can't encode 0-bit Unknown or not applicable
music_demo.mp3:
File Size: 6.62k Bit Rate: 32.0k
Encoding: MPEG audio
Channels: 1 @ 16-bit
Samplerate: 24000Hz
Replaygain: off
Duration: 00:00:01.66
In:98.6% 00:00:01.63 [00:00:00.02] Out:72.0k [ | ] Clip:0
Done.
耳机中听到声音则为正常
方法二:dockerfile
使用dockerfile创建镜像,这里只展示主要部分
查看声卡
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC1220 Digital [ALC1220 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
记录指定声卡的信息。我这里耳机是: card 1, device 0
dockerfile主要部分
RUN apt-get update
# 安装alsa工具
RUN apt-get install -y vim alsa-utils
# 添加asound.conf配置文件
RUN echo -e 'pcm.!default{
\ttype hw
\tcard 1
\tdevice 0
}
ctl.!default{
\ttype hw
\tcard 1
\tdevice 0
}
timer.!default{
\ttype hw
\tcard 1
\tdevice 0
}' > /etc/asound.conf
# 安装play
RUN apt-get install -y sox libsox-fmt-all
测试
同方法一
热插拔
支持耳机热插拔,后续更新