Zend certified PHP/Magento developer

No video out from ffmpeg h264_v4l2m2m encoder on rtmp or fifo file

I am using ffmpeg to stream /dev/video0 to rtmp server.
I use -codec:v h264_v4l2m2m as encoder.

What ever I try I get no video out on the stream.
On my command line if I just replace -codec:v h264_v4l2m2m as -codec:v h264_omx I get video.

And if I capture the output as a video file, I get video.
But if I capture the output on a fifo file, then also I get no video.

This seems a well know bug in ffmpeg even on v6.0
But how come no one fixed this issue yet ?
Or I do some major mistake on my commands ?

As a workaround if I use pipe, then I get video with the same -codec:v h264_v4l2m2m. But pipe give some artifacts on video after few hours.

What’s happening ?
How to fix this on the command line with some magic flags ?

Here is a sample commandline:

NO VIDEO:

ffmpeg -re -input_format mjpeg -video_size 1280x720 -framerate 30 -thread_queue_size 1024 -i /dev/video0 -f alsa -ac 2 -thread_queue_size 2048 -i hw:CARD=MS2109,DEV=0 -strict -2 -codec:v h264_v4l2m2m -preset ultrafast -x264opts "nal-hrd=cbr" -b:v 2500k -minrate 2500k -maxrate 2500k -bufsize:v 3750k -ac 2 -ar 44100 -codec:a aac -b:a 128k -tune zerolatency -vf "format=yuv420p" -r 30 -g 30 -threads 0 -f flv rtmp://IP/live/KEY

YES VIDEO BUT ARTIFACTS AFTER FEW HOURS:

ffmpeg -re -input_format mjpeg -video_size 1280x720 -framerate 30 -thread_queue_size 1024 -i /dev/video0 -f alsa -ac 2 -thread_queue_size 2048 -i hw:CARD=MS2109,DEV=0 -strict -2 -codec:v h264_v4l2m2m -preset ultrafast -x264opts "nal-hrd=cbr" -b:v 2500k -minrate 2500k -maxrate 2500k -bufsize:v 3750k -ac 2 -ar 44100 -codec:a aac -b:a 128k -tune zerolatency -vf "format=yuv420p" -r 30 -g 30 -threads 0 -f flv - | ffmpeg -i - -c copy -f flv rtmp://IP/live/KEY

My System Info:

Raspberry Pi 4 B+
OS: Raspberry Pi OS (Buster 32bit)
Memory: 4GB

ffmpeg (v4.x, v5.x, v6.x):

configuration: –extra-version=ffmpeg-2023 –pkg-config=/usr/bin/pkg-config –prefix= –incdir=/usr/include/arm-linux-gnueabihf –libdir=/usr/lib/arm-linux-gnueabihf –bindir=/home/pi/ffmpeg_build/ffmpeg-6.0/bin –pkg-config-flags=–static –extra-ldflags=-L/home/pi/ffmpeg_build/ffmpeg_build/lib –extra-libs=’-lpthread -lm -latomic’ –cpu=arm1176jzf-s –arch=armhf –target-os=linux –disable-shared –enable-static –enable-ffplay –enable-ffprobe –enable-nonfree –enable-gmp –enable-gpl –enable-libass –enable-libfdk-aac –enable-libfreetype –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopus –enable-libsoxr –enable-libvorbis –enable-libvpx –enable-libzimg –enable-libwebp –enable-libx264 –enable-libx265 –enable-mmal –enable-omx –enable-omx-rpi –enable-version3 –enable-pthreads –enable-openssl –enable-protocol=libsrt –enable-libsrt –enable-libpulse –enable-v4l2-m2m –enable-indev=alsa –enable-outdev=alsa –enable-swscale