This is a series of articles. Follow the link here to get an overview over all articles.
The next point on our MUSTFIX-list of the mediastreamvalidator is:
If
EXT-X-INDEPENDENT-SEGMENTSis not in master playlist, then you MUST use theEXT-X-INDEPENDENT-SEGMENTStag in all video media playlists
Independent Segments
What does this mean? This is the definition from the RFC8216:
The EXT-X-INDEPENDENT-SEGMENTS tag indicates that all media samples in a Media Segment can be decoded without information from other segments. It applies to every Media Segment in the Playlist.
FFmpeg has a flag called independent_segments that can be used for this.
Add the
#EXT-X-INDEPENDENT-SEGMENTSto playlists that has video segments and when all the segments of that playlist are guaranteed to start with a Key frame.
Since we parametrized FFmpeg in the Part 2 of this series of articles that every second is a keyframe and the segmentation is made exactly every 4 seconds, we know for a 100% that the first frame of a segment is a keyframe.
FFmpeg command
Ok after adding this parameter to the command it looks now like:
ffmpeg -listen 1 -i rtmp://martin-riedl.de/stream01 \
-filter_complex "[v:0]split=2[vtemp001][vout002];[vtemp001]scale=w=960:h=540[vout001]" \
-preset veryfast -g 25 -sc_threshold 0 \
-map [vout001] -c:v:0 libx264 -b:v:0 2000k \
-map [vout002] -c:v:1 libx264 -b:v:1 6000k \
-map a:0 -map a:0 -c:a aac -b:a 128k -ac 2 \
-f hls -hls_time 4 -hls_playlist_type event -hls_flags independent_segments \
-master_pl_name master.m3u8 \
-hls_segment_filename stream_%v/data%06d.ts \
-use_localtime_mkdir 1 \
-var_stream_map "v:0,a:0 v:1,a:1" stream_%v.m3u8
And again after a new validation this message is fixed.