前言:
以下所有内容均与 --audio-device=alsa 或 --audio-device=pulse 无关。mplayer 或 mpv 也会发生类似情况。Arch 和 Debian 10.x 稳定版均如此。
重现步骤(Arch):
打开 Konsole/终端 ( ctrl+ alt+ T),
输入以下音乐音频流:
$ mpv https://secure.live-streams.nl/flac.flac
您将收到一堆 ffmpeg 错误,但无论如何流都会播放:
这些是 ffmpeg 使用 FLAC 流时出现的错误,会导致 CPU 使用率(逐渐)飙升至 100%:
(+) Audio --aid=1 (flac 2ch 44100Hz) [ffmpeg/audio] flac: Multiple frames in a packet. AO: [pulse] 44100Hz stereo 2ch s32 [ffmpeg/audio] flac: invalid sync code [ffmpeg/audio] flac: invalid frame header [ffmpeg/audio] flac: decode_frame() failed Error decoding audio. Invalid audio PTS: 0.092880 -> 1552320.005805
立即打开新的 Konsole 选项卡
类型
$ htop
按F3/ Fn+F3并输入
mpv
。观察 CPU 使用率如何稳定但逐渐地达到 100%。
奇怪的是,这种现象在 opus 或 vorbis 或 mpeg layer 3 上根本不会发生。
奇怪的是,VLC ($ cvlc https://secure.live-streams.nl/flac.flac)
它确实会启动自身的多个实例 - 就像 mpv 一样 - 但很快就会杀死它们,并且有一个“CPU 使用率低”的实例。
这是否意味着 VLC 有一些特殊的官方 ffmpeg“调整版本”,而其余版本无法消除任何 ffmpeg 的疯狂行为?
请修复它。
PS. 在播放相同音频时,mplayer 占用的 CPU 比 mpv 少 2 倍以上。请不要责怪 mpv 或 mplayer,因为播放此音乐流时会出现大量错误(https://secure.live-streams.nl/flac.flac)。
答案1
升级你的 ffmpeg
惰性测试表明,使用 FFmpeg 4.3.1 可重现 CPU 负载,但使用来自 git master 分支的版本(使用--enable-gnutls
HTTPS 支持编译)则无法重现。我没有执行git bisect
或搜索错误追踪器。
测试命令(您将听不到任何声音):
ffmpeg -i https://secure.live-streams.nl/flac.flac -f null -
升级ffmpeg
并重新链接/重新编译依赖的播放器或等待 FFmpeg 4.4。