Можно ли заставить ffmpeg использовать аппаратное декодирование с входным потоком H.264? - PullRequest
0 голосов
/ 26 августа 2018

Я использую Raspberry Pi 3B с ffmpeg, скомпилированным с опцией --enable-omx-rpi.Я пытаюсь сделать захват кадров из потока веб-камеры (h.264, 1920x1080) в файлы JPG со скоростью 5 кадров в секунду.Эта операция в настоящее время приводит к тому, что плата показывает очень высокую загрузку процессора и сильно нагревается.По этой причине я предполагаю, что аппаратный декодер не используется.

Есть ли способ 1) определить, использует ли ffmpeg аппаратное декодирование, и 2) принудительно включить его?

РЕДАКТИРОВАТЬ: вот журнал:

ffmpeg -probesize 4096 -analyzeduration 10000 -threads 1 -i rtsp://192.168.1.88:554/11 -vf fps=fps=5 -y test%03d.png
ffmpeg version 3.2.10-1~deb9u1+rpt1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1) 20170516
  configuration: --prefix=/usr --extra-version='1~deb9u1+rpt1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --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-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
[rtsp @ 0x1d9b630] Stream #0: not enough frames to estimate rate; consider increasing probesize
[rtsp @ 0x1d9b630] decoding for stream 0 failed
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, rtsp, from 'rtsp://192.168.1.88:554/11':
  Metadata:
    title           : 10
  Duration: N/A, bitrate: 64 kb/s
    Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1920x1080, 90k tbr, 90k tbn, 180k tbc
    Stream #0:1: Audio: pcm_alaw, 8000 Hz, mono, s16, 64 kb/s
[swscaler @ 0x1e50a80] No accelerated colorspace conversion found from yuv420p to rgb24.
Output #0, image2, to 'test%03d.png':
  Metadata:
    title           : 10
    encoder         : Lavf57.56.101
    Stream #0:0: Video: png, rgb24, 1920x1080, q=2-31, 200 kb/s, 5 fps, 5 tbn, 5 tbc
    Metadata:
      encoder         : Lavc57.64.101 png
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
[rtsp @ 0x1d9b630] max delay reached. need to consume packetN/A speed=   0x
[rtsp @ 0x1d9b630] RTP: missed 13 packets
[h264 @ 0x1dfb650] error while decoding MB 24 3, bytestream -5
[h264 @ 0x1dfb650] concealing 7825 DC, 7825 AC, 7825 MV errors in P frame
[rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 88 packets
[h264 @ 0x1dfb650] error while decoding MB 38 41, bytestream -11
[h264 @ 0x1dfb650] concealing 3251 DC, 3251 AC, 3251 MV errors in P frame
frame=    4 fps=2.2 q=-0.0 size=N/A time=00:00:00.20 bitrate=N/A speed=0.111x   [h264 @ 0x1dfb650] Increasing reorder buffer to 1
frame=    4 fps=0.8 q=-0.0 size=N/A time=00:00:00.20 bitrate=N/A speed=0.0413x  [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 30 packets
[h264 @ 0x1dfb650] error while decoding MB 37 5, bytestream -9
[h264 @ 0x1dfb650] concealing 7572 DC, 7572 AC, 7572 MV errors in P frame
frame=    5 fps=0.9 q=-0.0 size=N/A time=00:00:00.40 bitrate=N/A speed=0.069x   [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 34 packets
[h264 @ 0x1dfb650] error while decoding MB 98 4, bytestream -9
[h264 @ 0x1dfb650] concealing 7631 DC, 7631 AC, 7631 MV errors in P frame
frame=    6 fps=0.9 q=-0.0 size=N/A time=00:00:00.60 bitrate=N/A speed=0.0894x  [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 30 packets
[h264 @ 0x1dfb650] error while decoding MB 20 10, bytestream -9
[h264 @ 0x1dfb650] concealing 6989 DC, 6989 AC, 6989 MV errors in P frame
frame=    6 fps=0.8 q=-0.0 size=N/A time=00:00:00.60 bitrate=N/A speed=0.0808x  [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 3357 packets
[rtsp @ 0x1d9b630] RTP: PT=60: bad cseq 0fed expected=02d0
[rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 3358 packets
[h264 @ 0x1dfb650] concealing 3400 DC, 3400 AC, 3400 MV errors in P frame
frame=    8 fps=1.0 q=-0.0 size=N/A time=00:00:01.00 bitrate=N/A speed=0.124x   [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 5 packets
[h264 @ 0x1dfb650] error while decoding MB 33 42, bytestream -5
[h264 @ 0x1dfb650] concealing 3136 DC, 3136 AC, 3136 MV errors in P frame
frame=    8 fps=0.9 q=-0.0 size=N/A time=00:00:01.00 bitrate=N/A speed=0.117x   frame=   41 fps=0.9 q=-0.0 size=N/A time=00:00:07.40 bitrate=N/A speed=0.156x   [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 6 packets
[h264 @ 0x1dfb650] error while decoding MB 72 17, bytestream -5
[h264 @ 0x1dfb650] concealing 6097 DC, 6097 AC, 6097 MV errors in P frame
frame=   42 fps=0.9 q=-0.0 size=N/A time=00:00:07.60 bitrate=N/A speed=0.155x   frame=   44 fps=0.9 q=-0.0 size=N/A time=00:00:08.00 bitrate=N/A speed=0.162x   [rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 19325 packets
[rtsp @ 0x1d9b630] RTP: PT=60: bad cseq 5c13 expected=1096
[rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 19326 packets
[h264 @ 0x1dfb650] cabac decode of qscale diff failed at 5 15
[h264 @ 0x1dfb650] error while decoding MB 5 15, bytestream 14471
[h264 @ 0x1dfb650] concealing 6404 DC, 6404 AC, 6404 MV errors in P frame
[rtsp @ 0x1d9b630] max delay reached. need to consume packet
[rtsp @ 0x1d9b630] RTP: missed 32 packets
[h264 @ 0x1dfb650] error while decoding MB 40 13, bytestream -11
[h264 @ 0x1dfb650] concealing 6609 DC, 6609 AC, 6609 MV errors in P frame
frame=   44 fps=0.9 q=-0.0 size=N/A time=00:00:08.00 bitrate=N/A speed=0.159x   

Вот вывод ffmpeg -decoders |grep -i h264:

 ffmpeg -decoders | grep -i h264
ffmpeg version 3.2.10-1~deb9u1+rpt1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1) 20170516
  configuration: --prefix=/usr --extra-version='1~deb9u1+rpt1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --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-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
 VFS..D h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 V..... h264_mmal            h264 (mmal) (codec h264)
 V....D h264_vdpau           H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) (codec h264)
...