On Fri, Feb 20, 2015 at 1:38 PM, Michael Niedermayer <michae...@gmx.at> wrote: > On Fri, Feb 20, 2015 at 12:55:14PM +0100, Hendrik Leppkes wrote: >> --- >> libavformat/hlsenc.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c >> index 1831c17..0f14e90 100644 >> --- a/libavformat/hlsenc.c >> +++ b/libavformat/hlsenc.c >> @@ -242,10 +242,12 @@ static int hls_window(AVFormatContext *s, int last) >> int target_duration = 0; >> int ret = 0; >> AVIOContext *out = NULL; >> + char temp_filename[1024]; >> int64_t sequence = FFMAX(hls->start_sequence, hls->sequence - >> hls->nb_entries); >> int version = hls->flags & HLS_SINGLE_FILE ? 4 : 3; >> >> - if ((ret = avio_open2(&out, s->filename, AVIO_FLAG_WRITE, >> + snprintf(temp_filename, sizeof(temp_filename), "%s.tmp", s->filename); >> + if ((ret = avio_open2(&out, temp_filename, AVIO_FLAG_WRITE, >> &s->interrupt_callback, NULL)) < 0) >> goto fail; >> >> @@ -280,6 +282,8 @@ static int hls_window(AVFormatContext *s, int last) >> >> fail: >> avio_closep(&out); >> + if (ret >= 0) >> + ff_rename(temp_filename, s->filename, s); > > what if s->filename is not a local file ? > or am i missing something that prevents that ? >
What else could it be? It writes to separate segment files as well, not sure that would work on anything but local files. For the record, this is the same method used in dashenc for writing its manifest file, and it can avoid a sort-of race condition when serving the files through a web server directly (ie. web server reading while in the middle of re-writing it). - Hendrik _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel