Issue: FFMPEG GPU/Hardware acceleration is not enabled on RPI. FFPlay is jittery, patchy and takes close to 100% CPU.
Description: The video streaming of mpeg4 files is very slow (the video streaming is playing like a slide show) as well as consumes between 95% and 97%. The CPU consumption increases with increase in screen size. Other tools on RPI such as built in Webbrowser shows the same MPEG4 files smooth, infact the Webbrowser shows HD (720p) quality video well and with about 30-35% CPU.
Environment: RPI3, FFMPEG. FFMEG is compiled with MMAL decoder enabled and confirmed. Steps from Johnanath https://john.ly/rpi-h264-hw-acceleration/#comment-723" are used.
Rationale: The reason need to speed up FFMEG MMAL decoder on RPI 3 is that we are using PJSIP video call. PJSIP uses FFMPEG and is too is slow s(we believe for same reason FFMEG is slow) for a video call.
Setup and Tests: As per johnathan comments, I have enabled h264_mmal and h264_omx for decoding and encoding video respectively while configuring ffmpeg. Here below are the procedures followed on rpi3:
- Downloaded mp4 video file 1080P resolution.
- Followed the above procedure for installing ffmpeg
Executed the following commands:
ffmpeg -f -i test.mp4 -s 320*240 -c:v h264_omx test_h264_mmal.mp4
ffplay -vcodec h264_mmal test.mp4
ffplay -vcodec h264_mmal test_h264_mmal.mp4( with different resolution such as 320*240, 640*480 )
4) Set the gpu_mem value to 128 and 256
Below is the configuration on ffmpeg:
$ ffmpeg -decoders | grep h264 ffmpeg version git-2017-05-05-3c085c1 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10) configuration: --prefix=/usr --enable-mmal --enable-omx --enable-omx-rpi --enable-decoder=h264_mmal --enable-decoder=mpeg2_mmal --enable-encoder=h264_omx --enable-encoder=h264_omx --enable-libx264 --enable-nonfree --enable-gpl --enable-avresample --enable-shared --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libzvbi libavutil 55. 61.100 / 55. 61.100 libavcodec 57. 94.101 / 57. 94.101 libavformat 57. 72.101 / 57. 72.101 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 88.100 / 6. 88.100 libavresample 3. 6. 0 / 3. 6. 0 libswscale 4. 7.101 / 4. 7.101 libswresample 2. 8.100 / 2. 8.100 libpostproc 54. 6.100 / 54. 6.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)
Test Results: When ffplay is used we see Jittery Video image slide a slide show with close to 100% CPU.
Note: When streaming of HD video on RPI3 using default browser and chrome works well with 30-35% CPU.
Is there anything else needs to be taken care, or any help is highly appreciated as I am stuck on this issue for more than a week.