MPlayer MKV demuxer bug
Недавно мне попался видео-файл, который оказался не по зубам великому и ужасному 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 демуксером по умолчанию.