Алексей Владыкин


MPlayer MKV demuxer bug

30 января 2011

Недавно мне попался видео-файл, который оказался не по зубам великому и ужасному MPlayer’у. При этом он прекрасно воспроизводился Totem’ом. Невероятно, но факт. Симптомы у MPlayer’а такие:

MPlayer SVN-r29796-4.4.4 (C) 2000-2009 MPlayer Team

Playing MyBuggyFile.mkv.
[mkv] Track 1 has been compressed with an unknown/unsupported compression
[mkv] algorithm (3). Skipping track.
[mkv] Track 2 has been compressed with an unknown/unsupported compression
[mkv] algorithm (3). Skipping track.
[mkv] Track 3 has been compressed with an unknown/unsupported compression
[mkv] algorithm (3). Skipping track.
[mkv] Track ID 1: video (V_MPEG4/ISO/AVC) "My Buggy File", -vid 0
[mkv] Track ID 2: audio (A_AC3) "Dubljaz, 48 kHz, AC3, 3/2 (L,C,R,l,r) + LFE ch, ~ 448.00 kbps", -aid 0, -alang rus
[mkv] Track ID 3: audio (A_AC3) "Original, 48 kHz, AC3, 3/2 (L,C,R,l,r) + LFE ch, ~ 448.00 kbps", -aid 1, -alang eng
[mkv] Track ID 4: subtitles (S_TEXT/UTF8) "Forced", -sid 0, -slang rus
[mkv] Track ID 5: subtitles (S_TEXT/UTF8), -sid 1, -slang rus
[mkv] Track ID 6: subtitles (S_TEXT/UTF8), -sid 2, -slang ukr
[mkv] Track ID 7: subtitles (S_TEXT/UTF8), -sid 3, -slang eng
[mkv] Track ID 8: subtitles (S_TEXT/UTF8) "Commentary", -sid 4, -slang eng
[mkv] Will play video track 1.
Matroska file format detected.
VIDEO:  [avc1]  1280x544  24bpp  23.976 fps    0.0 kbps ( 0.0 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [liba52] AC3 decoding with liba52
Using SSE optimized IMDCT transform
a52: CRC check failed!
Using MMX optimized resampler
AUDIO: 32000 Hz, 2 ch, s16le, 256.0 kbit/25.00% (ratio: 32000->128000)
Selected audio codec: [a52] afm: liba52 (AC3-liba52)
==========================================================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
a52: error at resampling
[h264 @ 0xa5f580]AVC: nal size 190726
[h264 @ 0xa5f580]no frame!
Error while decoding frame!
[h264 @ 0xa5f580]AVC: nal size 7489
[h264 @ 0xa5f580]no frame!
Error while decoding frame!

... same error many times ...

[h264 @ 0xa5f580]AVC: nal size 908289
[h264 @ 0xa5f580]no frame!
Error while decoding frame!

Too many audio packets in the buffer: (4096 in 7331840 bytes).
Maybe you are playing a non-interleaved stream/file or the codec failed?
For AVI files, try to force non-interleaved mode with the -ni option.
A:   5.9 V:   0.0 A-V:  5.865 ct:  0.000   0/  0 ??% ??% ??,?% 0 0 [J


Exiting... (End of file)

Totem сам по себе вовсе не плох, но он не использует VDPAU, и поэтому дает высокую загрузку процессора и тормоза. Может, когда-нибудь я найду способ заставить его декодировать видео через VDPAU, но в данном случае оказалось проще разобраться с MPlayer’ом.

Решение нашлось в дебиановском багтрекере: #595452 1.0rc3 native mkv demuxer fails to decode some files.

Оказывается, в MPlayer’е зашиты два демуксера формата MKV. В том, что по умолчанию (mkv), есть баг. Во втором (lavf) бага нет. Так что запуск MPlayer’а с флагом -demuxer lavf устраняет проблему.

Дополнение от 2011-01-30. На днях в Gentoo amd64 стабилизировалась свежая версия MPlayer — 1.0_rc4_p20101114. В этой версии проблемный файл воспроизводится без единой запинки. Судя по тому, что с флагом -demuxer mkv проблема возвращается с теми же симптомами, разработчики MPlayer просто сделали lavf демуксером по умолчанию.

К оглавлению блога