Opened 2 years ago
Last modified 2 years ago
#10037 new defect
EXT-X-STREAM-INF is missing CODECS attribute when using h264_v4l2m2m encoder
Reported by: | nls | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | git-master | Keywords: | hls v4l2m2m |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
Trying to encode for HLS live stream using ffmpeg on a Raspberry Pi 4. Everything is working but the EXT-X-STREAM-INF is missing the CODECS attribute that's present for other h264 encoders like libx264 or the old OMX encoder. We don't use audio in these streams. This makes the stream break in Chrome, because it assumes an audio track when the CODECS attrib is missing.
A possible cause is the v4l2 driver's inability to take the -profile parameter, so it must be omitted from the command line. This might affect the logic for adding the attribute (a wild guess).
How to reproduce:
Command: ffmpeg-new -f v4l2 -thread_queue_size 1024 -input_format yuyv422 -r 30 -video_size 1280x720 -i /dev/video0 -filter:v scale=1024:576 -f hls -hls_playlist_type event -hls_segment_filename http://localhost:3000/upload/segment_04_%06d.ts -master_pl_name master_04.m3u8 -hls_time 6 -c:v h264_v4l2m2m -level:v 4.2 -b:v 2000k -pix_fmt yuv420p -threads 4 -maxrate 1500k -force_key_frames expr:gte(t,n_forced*6) -keyint_min 30 -ss 1 -movflags faststart -headers content-type: application/octet-stream? -method POST http://localhost:3000/upload/stream_04.m3u8 ffmpeg output: ffmpeg version 5.1.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2022 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516 configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libxml2 --enable-libxvid --enable-libzimg libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 [video4linux2,v4l2 @ 0x4229a60] Dequeued v4l2 buffer contains corrupted data (0 bytes). Input #0, video4linux2,v4l2, from '/dev/video0': Duration: N/A, start: 0.000000, bitrate: 442368 kb/s Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 442368 kb/s, 30 fps, 30 tbr, 1000k tbn Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_v4l2m2m)) Press [q] to stop, [?] for help [video4linux2,v4l2 @ 0x4229a60] Dequeued v4l2 buffer contains corrupted data (0 bytes). Last message repeated 30 times [h264_v4l2m2m @ 0x422dff0] Using device /dev/video11 [h264_v4l2m2m @ 0x422dff0] driver 'bcm2835-codec' on card 'bcm2835-codec-encode' in mplane mode [h264_v4l2m2m @ 0x422dff0] requesting formats: output=YU12 capture=H264 [h264_v4l2m2m @ 0x422dff0] Failed to set gop size: Invalid argument Output #0, hls, to 'http://localhost:3000/upload/stream_04.m3u8': Metadata: encoder : Lavf59.27.100 Stream #0:0: Video: h264, yuv420p(tv, progressive), 1024x576, q=2-31, 1500 kb/s, 15 fps, 90k tbn Metadata: encoder : Lavc59.37.100 h264_v4l2m2m [hls @ 0x422b220] Opening 'http://localhost:3000/upload/segment_04_000000.ts' for writing [hls @ 0x422b220] Opening 'http://localhost:3000/upload/master_04.m3u8' for writing [hls @ 0x422b220] Opening 'http://localhost:3000/upload/segment_04_000001.ts' for writing frame= 149 fps= 29 q=-0.0 Lsize=N/A time=00:00:10.00 bitrate=N/A speed=0.891x video:910kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Exiting normally, received signal 2.
Correct master manifest:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:BANDWIDTH=1320000,RESOLUTION=1024x576,CODECS="avc1.64002a" stream_04.m3u8
Incorrect master manifest:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:BANDWIDTH=1650000,RESOLUTION=1024x576 stream_04.m3u8
Environment:
OS: Debian 11.5 (Raspberry OS) Kernel: 5.15.61-v7l+ ffpmeg 5.1.1 static from https://johnvansickle.com/ffmpeg/
The 20220910 build from https://johnvansickle.com/ffmpeg/ exhibits the same issue (can't use that because of another bug).
Change History (6)
follow-up: 4 comment:1 by , 2 years ago
Component: | ffmpeg → undetermined |
---|---|
Keywords: | hls v4l2m2m added; ffmpeg HLS removed |
follow-up: 3 comment:2 by , 2 years ago
Version: | 5.1.2 → unspecified |
---|
comment:3 by , 2 years ago
Sorry, I can't check for you, as this would need a recompile and I don't really know how. If you see a chance that since 10 Sep it might have been fixed, I might try to find a way to produce a new build. Is it possible to ask the maintainer of johnvansickle.com?
comment:4 by , 2 years ago
Is the issue reproducible with current FFmpeg git head?
I was able to reproduce the error by compiling the following source blob.
https://ffmpeg.org/releases/ffmpeg-snapshot-git.tar.bz2 - 2022-11-14 19:24
Result:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-STREAM-INF:BANDWIDTH=2200000,RESOLUTION=1024x576 xstream_04.m3u8
CODECS attribute is missing.
comment:5 by , 2 years ago
Version: | unspecified → git-master |
---|
comment:6 by , 2 years ago
I tested some more. It seems the issue is more complicated. It's not exclusive to the h264_v4l2m2m encoder so the title might need to be changed. The following command produces the same buggy master.m3u8 as the one in OP:
ffmpeg -i result.mp4 -f hls -hls_playlist_type event -hls_segment_filename segment_04_%06d.ts -master_pl_name master_04b.m3u8 -hls_time 6 -c:v copy stream_04b.m3u8
No matter what ffmpeg version, the CODECS attrib is omitted. I tried git master, an OMX-enabled version from a year ago, and the 5.1.1 release. My guess is that some inputs seem to provide the necessary info for adding the attribute, and some don't. So it's a lot more complicated to handle, probably. h264_omx and libx264 encoders, on the other hand, do produce a correct master.m38u, CODECS included.
Is the issue reproducible with current FFmpeg git head?