> On Jul 25, 2018, at 11:12 PM, Liu Steven <l...@chinaffmpeg.org> wrote: > > > >> 在 2018年7月26日,上午7:04,Ronak Patel <ronak2121-at-yahoo....@ffmpeg.org> 写道: >> >> Hi, >> >> We’d like to start working on this real soon and want to make sure we >> properly fix this. We understand this code is used by more than just fMP4 >> assets and even live streaming use cases. >> >> Can anyone please help shed some light on all use cases we should make sure >> are working after we make our fixes? >> >> We’re afraid that the number of use cases here are unknown and we’ll be >> stuck fixing this for an unknown time. >> >> Can anyone please shed some light on this? > > you can try -f segment or -f hls or -f dash to do waht you want try, if all > of them cannot suuport your feature, you can submmit patch here. > or you can submmit a new hls muxer patch here if you cannot fix all the > parameters for the old hls muxer. > >> >> Thanks >> >> Ronak >> >>> On Jul 13, 2018, at 8:05 AM, Ronak Patel >>> <ronak2121-at-yahoo....@ffmpeg.org> wrote: >>> >>> I was wondering if anyone on the development list was familiar with this >>> code and could provide pointers on how to fix up the code due to the below >>> problem. >>> >>> >>>> On Jul 12, 2018, at 7:27 PM, Ronak Patel >>>> <ronak2121-at-yahoo....@ffmpeg.org> wrote: >>>> >>>> >>>> >>>>> On Jul 12, 2018, at 6:21 PM, Ronak Patel >>>>> <ronak2121-at-yahoo....@ffmpeg.org> wrote: >>>>> >>>>> Hey Carl, >>>>> >>>>> So I dug into this more today and I have root caused what's exactly >>>>> happening here. >>>>> >>>>> The problematic code is this: >>>>> https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/hlsenc.c#L1368 >>>>> <https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/hlsenc.c#L1368> >>>>> This is where the filename is set and the next line actually opens the >>>>> file. >>>>> >>>>> The logic for this hls_window method is the following: >>>>> >>>>> 1. Make a new temporary file. >>>>> 2. Write out a new HLS manifest header. >>>>> 3. Loop through all available segments and write out all of the entries >>>>> for them. >>>>> 4. Close the temporary file when finished. >>>>> 5. Rename the temporary file to the target file name. >>>>> 6. Rinse and repeat for every single fragment. > > do you mean append fragment info to the m3u8 list, don’t refresh it?
Yup that’s what I mean. The fact that ffmpeg is refreshing the entire manifest hundreds of thousands of times is the reason for this massive slow down. We tried changing the code a little to only write the manifest once once at end, and we can now fragment a 60 hour audio file in less than one minute. Less than one minute compared to 4 days is a BIG time savings. >>>>> >>>>> Therefore, if you can imagine a 153 hour audio file, we write out a >>>>> totally new HLS manifest 550800 times (153 * 60 * 60 assuming a 1s >>>>> fragment duration) that gets progressively larger as each fragment is >>>>> generated. >>>>> >>>>> This is a classic O(N^2) algorithm implementation, instead of: >>>>> >>>>> 1. Creating the destination file up front & write the manifest header. >>>>> 2. Append the new segment to the file. >>>>> 3. If this is the last segment, write out EXT-X-ENDLIST. >>>>> >>>>> There's no looping involved, nor the need to make temporary files. >>>>> >>>>> FYI that I've noticed the same sort of pattern being applied to MPEG >>>>> DASH: >>>>> https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/dashenc.c#L786 >>>>> <https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/dashenc.c#L786> >>>>> >>>>> To implement something like this, looks like we'd have to significantly >>>>> re-engineer the code. Do you have any pointers on how to go about doing >>>>> this? Or, would you be able to help do this? >>>>> >>>> >>>> I was thinking about this and I think it must have been implemented this >>>> way because of live hls streams? Not writing to the main manifest directly >>>> and keeping that stream open does release any file system locks that there >>>> would be otherwise. >>>> >>>> Is this the reason why this was done this way at all? >>>> >>>> >>>>> Thanks for all your help, >>>>> >>>>> Ronak >>>>> >>>>>> On Jun 27, 2018, at 2:04 PM, Carl Zwanzig <c...@tuunq.com> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> I haven't traced it out completely, but take a look at the flag >>>>>> HLS_TEMP_FILE in libavformat/hlsenc.c. >>>>>> >>>>>> Later, >>>>>> >>>>>> z! >>>>> _______________________________________________ > > Thanks > > Steven Liu >> > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel