【发布时间】:2021-09-02 04:00:49
【问题描述】:
虽然使用 Liquidsoap 的 output.alsa(..) 在 Docker 中进行简单的音频播放工作正常,但我无法让实时音频正常工作。基本上我想将模拟音频输入路由到模拟音频输出,例如output.alsa(input.alsa())。以下三个示例可以正常工作:
示例 1:缓冲 I/O
# Successfully tested with Liquidsoap 1.4.4 & ALSA 1.1.3 (native)
# Low latency, no buffer underruns
set("frame.audio.size", 2048)
set("alsa.alsa_buffer", 8192)
set("alsa.buffer_length", 10)
input_analog = input.alsa(device="default", bufferize=true)
output.alsa(device="default", input_analog, bufferize=true)
示例 2:额外缓冲 I/O
# Successfully tested with Liquidsoap 1.4.4 + 1.1.3 (native)
# High latency, no buffer underruns
set("frame.audio.size", 2048)
set("alsa.alsa_buffer", 8192)
set("alsa.buffer_length", 10)
input_analog = input.alsa(device="default", bufferize=true)
input_analog = mksafe(buffer(input_analog))
output.alsa(device="default", input_analog, bufferize=true)
示例 3:无缓冲 I/O
# Successfully tested with Liquidsoap 2 & ALSA 1.2.4 (native)
# Almost no latency, no buffer underruns
# Doesn't work in Liquidsoap 1.4 because of some calculation bug
set("frame.audio.size", 7526)
set("frame.video.framerate", 0)
input_analog = input.alsa(device="default", bufferize=false)
output.alsa(device="default", input_analog, bufferize=false)
通过这些示例在 Docker 中,我得到了大量的音频中断和缓冲区欠载,无论我尝试哪种缓冲区或帧设置。 Docker Container 的 CPU 使用率通常
我正在像这样启动容器(之前也尝试过为容器提供额外 CPU 和内存的特定设置):
docker run -it \
--network="host" \
--mount type=tmpfs,destination=/tmp \
-v /dev/snd:/dev/snd \
-v "/etc/asound.conf":"/etc/asound.conf" \
--group-add audio \
--privileged \
savonet/liquidsoap:main \
...
default ALSA 设备的定义很简单:
#/etc/asound.conf
defaults.pcm.card 2
defaults.ctl.card 2
需要什么秘方吗?你有一个例子吗?
也许这根本不是 Liquidsoap 的问题。希望结合一些隐藏的 Docker 标志来做一些特殊的 ALSA 设备配置就足够了。
【问题讨论】:
标签: docker alsa liquidsoap