Не удается воспроизвести видео mp4 с помощью ffplay, но mpv может

#linux #video #ffmpeg #linaro #mpv

Вопрос:

Я хочу воспроизвести видео в формате mp4 на Debian 9.

Во-первых, я пытаюсь использовать ffplay для воспроизведения видео. Я использую команду ffplay test.mp4 , но она не может воспроизводиться и выводит много одинаковых ошибок Receive_frame and send_packet both returned EAGAIN, which is an API violation. . Есть подробные журналы.

 $ffplay test.mp4
ffplay version n3.4.1-1-g84bbe2b650-1 Copyright (c) 2003-2017 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18) 20170516
  configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-version3 --enable-rkmpp --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --cross-prefix=aarch64-linux-gnu- --arch=arm64 --target-os=linux --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':q=    0B f=0/0   
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    artist          : 陈奕迅
    comment         : 163 key(Don't modify):clknHbeu87C/TSIpwWw5 /XVNX46iNc6ZUUI/NNBEnGJkB4J9X28bm/OzW54 zpI0NB1 t6V7QGaqmB68bMFun4XNP4wNmDOIp4WWeRm39qy/b0byW/uCuwv/MCWns8cctlzaCGCgZ1BwPvgwiafBMYcHpKHd1o0LSoaK 04tV2kClpKQTalNso32/6iLaRha HEQqp6uyHtqsB8zoqnbIwint4Dni3AwFID6Y4aN
    title           : 梦想天空分外蓝
    encoder         : Lavf57.71.100
  Duration: 00:03:20.45, start: 0.000000, bitrate: 834 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 700 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
mpi: mpp version: 073ceeb author: Jacob Chen DEBIAN: update rules for release_20171218
mpp_log: can not found match soc name: rockchip,rp px30 linux rockchip,px30 
hal_h264d_api: hal_h264d_init mpp_buffer_group_get_internal used ion In
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
[h264_rkmpp @ 0x7f7003a000] Decoder noticed an info change (854x480), format=0
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.
[h264_rkmpp @ 0x7f7003a000] Receive_frame and send_packet both returned EAGAIN, which is an API violation.

 

Затем я пытаюсь использовать mpv для воспроизведения видео. Я использую команду mpv test.mp4 , и она успешно воспроизводит видео. Есть подробные журналы.

 $mpv test.mp4
Playing: test.mp4
 ( ) Video --vid=1 (*) (h264 854x480 25.000fps)
 ( ) Audio --aid=1 --alang=und (*) (aac 2ch 44100Hz)
File tags:
 Artist: 陈奕迅
 Comment: 163 key(Don't modify):clknHbeu87C/TSIpwWw5 /XVNX46iNc6ZUUI/NNBEnGJkB4J9X28bm/OzW54 zpI0NB1 t6V7QGaqmB68bMFun4XNP4wNmDOIp4WWeRm39qy/b0byW/uCuwv/MCWns8cctlzaCGCgZ1BwPvgwiafBMYcHpKHd1o0LSoaK 04tV2kClpKQTalNso32/6iLaRha HEQqp6uyHtqsB8zoqnbIwint4Dni3AwFID6Y4aNZYwtXYGiF6L7DDWSezw0ICX
 Title: 梦想天空分外蓝
ERROR: The DDK is not compatible with any of the Mali GPUs on the system.
The DDK was built for 0x860 r2p0 status range [0..15], but none of the GPUs matched:
/dev/mali0 detected as 0x7093 r0p0 status 0
[vo/x11] Warning: this legacy VO has bad performance. Consider fixing your graphics drivers, or not forcing the x11 VO.
AO: [alsa] 44100Hz stereo 2ch float
VO: [x11] 854x480 yuv420p
[ffmpeg] swscaler: No accelerated colorspace conversion found from yuv420p to bgra.
[ffmpeg] swscaler: No accelerated colorspace conversion found from yuv420p to bgra.
[ffmpeg] swscaler: No accelerated colorspace conversion found from yuv420p to bgra.
AV: 00:00:03 / 00:03:20 (1%) A-V:  0.000

 

Я мало что знаю о кодировании и декодировании видео. И mpv, и ffplay используют ffmpeg для декодирования видео, но почему результаты отличаются?
Заранее спасибо.

Есть информация о моей системе.

 $uname -a
Linux linaro-alip 4.4.189 #24 SMP Tue Jul 21 17:01:59 CST 2020 aarch64 GNU/Linux
 
 $cat /proc/version
Linux version 4.4.189 (rpdzkj@rpdzkj) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) ) #24 SMP Tue Jul 21 17:01:59 CST 2020
 
 $lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.13 (stretch)
Release:    9.13
Codename:   stretch
 

Комментарии:

1. @llogan 1) Я удалил изображения и вставил текст. 2) ffplay -codec:v h264 test.mp4 действительно помогает, видео было успешно воспроизведено. 3) Как я могу исправить, чтобы видео можно было воспроизводить без добавления -codec:vh264 ? Должен ли я перекомпилировать ffmpeg или rkmpp ? Спасибо!

Ответ №1:

Проблемы

  • h264_rkmpp, по-видимому, неправильно имеет приоритет над встроенным декодером FFmpeg H. 264 (с именем h264), поэтому по умолчанию используется h264_rkmpp.
  • у h264_rkmpp возникли проблемы с декодированием этого видео (я не знаю, почему).

Решения

Легко

Вручную попросите ffplay вместо этого использовать h264:

 ffplay -codec:v h264 input.mp4
 

Средний

Обновление

FFmpeg 3.4.1 устарел. Попробуйте обновить до сборки из текущей ветви git master (рекомендуется) или, по крайней мере, используйте FFmpeg 4.4. Возможно, проблема уже была исправлена (я не проверял).

Или отключить Rockchip

Опуская --enable-rkmpp во configure время компиляции.

Трудный

Если недавний файл FFmpeg все еще не работает, отредактируйте libavcodec/allcodecs.c , чтобы присвоить rkmpp более низкий приоритет, а затем перекомпилируйте.