Opened 4 years ago

Last modified 4 years ago

#8799 new defect

HLS output format does not produce DASH compatible MP4

Reported by: gordon Owned by:
Priority: normal Component: undetermined
Version: unspecified Keywords:
Cc: liuqi05@kuaishou.com Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

HLS recommends at least one stream to be available packaged in a transport stream. Otherwise, HLS and DASH overlap.

The HLS muxer does not produce files that are compatible with DASH per the conformance tool at https://conformance.dashif.org/

It would be very helpful if there was a way to signal the HLS encoder to produce DASH compatible fMP4 files


I am observing errors like:

1) ../src/ValidateAtoms.cpp : 345 : Warning for ISO/IEC 14496-12 'tkhd' alternateGroup must be 0 not 1

2) ../src/ValidateBitStreams.cpp : 478 : Warning for ISO/IEC 14496-12 Validate_ES_Descriptor: ES_ID should be 0 not 1 in media tracks

3) ../src/ValidateBitStreams.cpp : 3333 : Warning: Validate DecoderSpecificInfo didn't use 16 bits

4) ../src/ValidateAtomList.cpp : 2326 : WARNING: In moov-1:udta-1 - unknown/unexpected atom 'meta'

5) (2 repetition\s) ### error: ### ../src/ValidateAtomList.cpp : 180 : ### error: ### 'sidx' found for self-initializing media, violating ISO/IEC 23009-1:2012(E), 6.3.5.2: The Indexed Self-Initializing Media Segment ... shall carry 'dash' as a compatible brand.

6) (2 repetition\s) ### error: sidx-1 ### ../src/ValidateAtoms.cpp : 3276 : ### error: sidx-1 ### sidx offset 756 is less than starting of @indexRange 0, OR sum of sidx offset 756 and sidx size 52 minus 1 is greater than ending of @indexRange 756

7) ### error: ### ../src/PostprocessData.cpp : 120 : ### error: ### Indexing information (sidx/ssix) found in segment 0 (at file absolute offset 26735) following a moof, violating: ### error: ### ../src/PostprocessData.cpp : 123 : ### error: ### ISO/IEC 23009-1:2012(E), 8.3.3: All Segment Index ('sidx') and Subsegment Index ('ssix') boxes shall be placed before any Movie Fragment ('moof') boxes

8) ### error: ### ../src/PostprocessData.cpp : 755 : ### error: ### ISO/IEC 23009-1:2012(E), 6.3.4.3: If 'sidx' is present in a Media Segment, the first 'sidx' box ... shall document the entire Segment. Violated for Media Segment 1. Segment duration 9.156042, Sidx documents 6.016000 for track 1, diff 3.140042


Ffmpeg version:

ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers

built with gcc 8 (Debian 8.3.0-6)
configuration: --prefix=/usr/local --libdir=/usr/local/lib --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --bindir=/usr/local/bin --disable-doc --disable-ffplay --disable-static --enable-shared --enable-openssl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libaom --enable-nonfree
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100


Example of command to produce a transport stream for hls compatibility and several mp4 variants for hls and dash:

ffmpeg -i source.mp4 \

-an -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod -profile:v baseline -level 3.0 -b:v 145k -c:v libx264 -master_pl_name playlist-a-stream.m3u8 -hls_segment_type mpegts -hls_segment_filename output/playlist-a.ts output/playlist-a-segments.m3u8 \
\
-an -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod -profile:v high -level 3.0 -b:v 145k -c:v libx264 -master_pl_name playlist-b-stream.m3u8 -hls_segment_type fmp4 -hls_segment_filename output/playlist-b.mp4 output/playlist-b-segments.m3u8 \
\
-an -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod -profile:v high -level 3.1 -b:v 730k -c:v libx264 -master_pl_name playlist-c-stream.m3u8 -hls_segment_type fmp4 -hls_segment_filename output/playlist-c.mp4 output/playlist-c-segments.m3u8 \
\
-vn -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod -c:a libfdk_aac -profile:a aac_he_v2 -hls_segment_type fmp4 -master_pl_name playlist-e-stream.m3u8 -hls_segment_filename output/playlist-e.m4a output/playlist-e-segments.m3u8 \
\
-vn -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod -b:a 96k -c:a libopus -hls_segment_type fmp4 -strict experimental -hls_segment_filename output/playlist-h.m4a -master_pl_name playlist-h-stream.m3u8 output/playlist-h-segments.m3u8

Change History (1)

comment:1 by Steven Liu, 4 years ago

Cc: liuqi05@kuaishou.com added
Note: See TracTickets for help on using tickets.