#1642: -f segment: automagically generate #EXTM3U tags to -segment_list generated playlists -------------------------------------+------------------------------------- Reporter: kelexel | Owner: Type: enhancement | Status: reopened Priority: normal | Component: avformat Version: git-master | Resolution: Keywords: segment, | Blocked By: HLS, m3u8 | Reproduced by developer: 1 Blocking: | Analyzed by developer: 1 | -------------------------------------+-------------------------------------
Comment (by saste): Replying to [comment:11 kelexel]: > Note, in HLS-ilve here is what is happening: > > When a client reads an .m3u8 file, and if no #EXT-X-ENDLIST is found in the playlist.m3u8 it's in live mode not vod mode. > > In which client, when reaching the last file in the playlist, the client will automagically re-request the playlist until it find a playlist containing the #EXT-X-ENDLIST, in which case the stream won't be considered as "live" anymore. > > Said paylist is supposed to have changed, hence -segment_list_limit 10, means we will only keep the last 10 segments of -segment_time 5 duration > > Each time the playlist starts a new group of 10x segments, the following tag should be incremented: #EXT-X-MEDIA-SEQUENCE:1 > > So, on files 0->9, #EXT-X-MEDIA-SEQUENCE:1 > On files 10->19 #EXT-X-MEDIA-SEQUENCE:2 > And so on > > Also, please look at apple docs under Index Files (Playlists): https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/HTTPStreamingArchitecture/HTTPStreamingArchitecture.html#//apple_ref/doc/uid/TP40008332-CH101-SW2 > > #EXT-X-TARGETDURATION:10 > > #EXTINF:10, > > Which is the format I'm desperately trying to enforce here, and the one you don't want to :( Thanks for the nice explanations. I'm starting to understand how this live Apple thing works, and I see why it is not working in our case. Basically I addef support to M3U8 playlists, trying to be as faithful as possible to the specification, but that was not compatible with how HLS works. So, in order to make HLS work we need to: 1. set defined interval of times. In our case we request that -segment_time will be defined (rather than the exclusive option -segment_times). Issue: we can't generate segments with regular duration, since this will depend on how I-frames are placed in the stream to segment. 2. put EXT-X-TARGETDURATION at the begin of the file. As per point 1., we can't guarantee that the target duration will be honoured (thus breaking M3U8 specs), and we don't know which will be the maximum duration of the segments in the list. In this case we can "fake" the format and set the time specified by -segment_time as target duration. 3. not put EXT-X-ENDLIST at the end of the file if the last segment was not reached and -segment_list_size is != 0, and we need to update EXT-X -MEDIA-SEQUENCE per each file list update. So we need to understand which options will enable this behavior. For sure -segment_list_size should be specified. I'm not sure what should we do when both -segment_list_size and -segment_times are specified, possibly we should abort since I can't see a meaningful behavior in this case, assuming -segment_list_size was meant to deal with HLS. I'll possibly come with a patch in the next few days, and I'll ask you to test it. -- Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1642#comment:14> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac