[FFmpeg-trac] #6888(avformat:new): HLS segmenter doesn't cut .m4s files at its expected duration

FFmpeg trac at avcodec.org
Thu Dec 14 19:05:57 EET 2017


#6888: HLS segmenter doesn't cut .m4s files at its expected duration
------------------------------------+------------------------------------
             Reporter:  beloko      |                    Owner:
                 Type:  defect      |                   Status:  new
             Priority:  normal      |                Component:  avformat
              Version:  git-master  |               Resolution:
             Keywords:  HLS         |               Blocked By:
             Blocking:              |  Reproduced by developer:  0
Analyzed by developer:  0           |
------------------------------------+------------------------------------

Comment (by beloko):

 Thank you for this workaround.

 I confirm that DASH segmenter is more accurate than HLS segmenter for this
 job. All my .m4s files have the expected 4 seconds duration. I checked
 each file duration with FFPROBE.

 However for now, I'm not able to create a valid HLS streams having video
 and audio muxed in the same stream. DASH segmenter create two streams.
 First stream have video only and second stream have audio only. Finally
 video and audio segments don't have the same durations. Result looks
 strange.

 Here is the command line where I just replace ''-an'' by ''-c:a
 libfdk_aac'' :

 {{{
 ffmpeg.exe -i
 "http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4"
 -loglevel verbose -threads 0 -c:a libfdk_aac -sn -c:v libx264 -x264opts
 scenecut=-1 -force_key_frames "expr:gte(t,n_forced*4)" -r 25
 -min_seg_duration 4000000 -window_size 99999 -t 30 -hls_playlist 1
 "C:\inetpub\wwwroot\fmp4_x264\big_bunny.mpd"
 }}}


 I get three m3u8 files :

 . master.m3u8 (supposed to be the main playlist)

 {{{
 #EXTM3U
 #EXT-X-VERSION:6
 #EXT-X-STREAM-INF:BANDWIDTH=488727
 media_1.m3u8
 }}}

 . media_0.m3u8 (as video stream playlist)

 {{{
 #EXTM3U
 #EXT-X-VERSION:6
 #EXT-X-TARGETDURATION:4
 #EXT-X-MEDIA-SEQUENCE:1
 #EXT-X-MAP:URI="init-stream0.m4s"
 #EXTINF:4.000000,
 chunk-stream0-00001.m4s
 #EXTINF:4.000000,
 chunk-stream0-00002.m4s
 #EXTINF:4.000000,
 chunk-stream0-00003.m4s
 #EXTINF:4.000000,
 chunk-stream0-00004.m4s
 #EXTINF:4.000000,
 chunk-stream0-00005.m4s
 #EXTINF:4.000000,
 chunk-stream0-00006.m4s
 #EXTINF:4.000000,
 chunk-stream0-00007.m4s
 #EXTINF:2.000000,
 chunk-stream0-00008.m4s
 #EXT-X-ENDLIST
 }}}

 . media_1.m3u8 (as audio stream playlist)

 {{{
 #EXTM3U
 #EXT-X-VERSION:6
 #EXT-X-TARGETDURATION:5
 #EXT-X-MEDIA-SEQUENCE:1
 #EXT-X-MAP:URI="init-stream1.m4s"
 #EXTINF:3.925333,
 chunk-stream1-00001.m4s
 #EXTINF:4.010667,
 chunk-stream1-00002.m4s
 #EXTINF:3.989333,
 chunk-stream1-00003.m4s
 #EXTINF:4.010667,
 chunk-stream1-00004.m4s
 #EXTINF:3.989333,
 chunk-stream1-00005.m4s
 #EXTINF:4.010667,
 chunk-stream1-00006.m4s
 #EXTINF:3.989333,
 chunk-stream1-00007.m4s
 #EXTINF:2.074667,
 chunk-stream1-00008.m4s
 #EXT-X-ENDLIST
 }}}


 To get a valid HLS stream, all audio segments should have a 4 seconds
 duration as expected. And master.m3u8 content should be something like
 that :


 {{{
 #EXTM3U
 #EXT-X-INDEPENDENT-SEGMENTS
 #EXT-X-VERSION:6

 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-
 ID="media_1.m3u8",NAME="media_1.m3u8",LANGUAGE="en",URI="media_1.m3u8"

 #EXT-X-STREAM-INF:BANDWIDTH=488727,AUDIO="media_1.m3u8"
 media_0.m3u8
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6888#comment:10>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list