Docker中带有实时ALSA音频的Liquidsap无法工作(断断续续和缓冲区不足)



虽然使用Liquidsap的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使用率通常为<1%,有时高达5%。使用当前的Liquidsoap 2分支,当设置一些超高缓冲区时,情况变得更好;帧大小,但仍在发生不足。

我这样启动容器(之前也尝试过为容器提供额外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 
...

defaultALSA设备定义如下:

#/etc/asound.conf
defaults.pcm.card 2
defaults.ctl.card 2

需要什么秘制酱汁吗?你有一个例子吗?

也许这根本不是Liquidsap的问题。希望结合一些隐藏的Docker标志进行一些特殊的ALSA设备配置就足够了。

我发现,如果我第一次在主机系统上播放音频,在启动docker之前停止播放,那么所有的例子都有效。

在不首先在主机上播放音频的情况下重新启动docker会导致所描述的缓冲区不足。

--编辑

另一个观察结果是:在启动liquidsoap之前,在docker容器(aplay文件(中播放一个声音文件总是会导致缓冲区不足。

相关内容

  • 没有找到相关文章

最新更新