Message ID | 20180227091810.16578-1-serhii.marchuk@gmail.com |
---|---|
State | Accepted |
Commit | e45d55756188186f065fa23fcab7b7d9026ddf41 |
Headers | show |
On 2/27/18 2:48 PM, Serhii Marchuk wrote: > --- > libavformat/dashenc.c | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c > index 83e0cff728..66f12d8d49 100644 > --- a/libavformat/dashenc.c > +++ b/libavformat/dashenc.c > @@ -1131,6 +1131,28 @@ static int update_stream_extradata(AVFormatContext *s, OutputStream *os, > return 0; > } > > +static void dashenc_delete_file(AVFormatContext *s, char *filename) { > + DASHContext *c = s->priv_data; > + int http_base_proto = ff_is_http_proto(filename); > + > + if (http_base_proto) { > + AVIOContext *out = NULL; > + AVDictionary *http_opts = NULL; > + > + set_http_options(&http_opts, c); > + av_dict_set(&http_opts, "method", "DELETE", 0); > + > + if (dashenc_io_open(s, &out, filename, &http_opts) < 0) { > + av_log(s, AV_LOG_ERROR, "failed to delete %s\n", filename); > + } > + > + av_dict_free(&http_opts); > + dashenc_io_close(s, &out, filename); > + } else if (unlink(filename) < 0) { > + av_log(s, AV_LOG_ERROR, "failed to delete %s: %s\n", filename, strerror(errno)); > + } > +} > + > static int dash_flush(AVFormatContext *s, int final, int stream) > { > DASHContext *c = s->priv_data; > @@ -1215,7 +1237,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream) > for (j = 0; j < remove; j++) { > char filename[1024]; > snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->segments[j]->file); > - unlink(filename); > + dashenc_delete_file(s, filename); > av_free(os->segments[j]); > } > os->nb_segments -= remove; > @@ -1367,9 +1389,9 @@ static int dash_write_trailer(AVFormatContext *s) > for (i = 0; i < s->nb_streams; i++) { > OutputStream *os = &c->streams[i]; > snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile); > - unlink(filename); > + dashenc_delete_file(s, filename); > } > - unlink(s->url); > + dashenc_delete_file(s, s->url); > } > > return 0; Thanks for sending the patch. LGTM. But let me test it with some of existing servers before the final push, just to make sure no existing functionality is broken.
On 2/28/18 9:09 AM, Jeyapal, Karthick wrote: > > > On 2/27/18 2:48 PM, Serhii Marchuk wrote: >> --- >> libavformat/dashenc.c | 28 +++++++++++++++++++++++++--- >> 1 file changed, 25 insertions(+), 3 deletions(-) >> >> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c >> index 83e0cff728..66f12d8d49 100644 >> --- a/libavformat/dashenc.c >> +++ b/libavformat/dashenc.c >> @@ -1131,6 +1131,28 @@ static int update_stream_extradata(AVFormatContext *s, OutputStream *os, >> return 0; >> } >> >> +static void dashenc_delete_file(AVFormatContext *s, char *filename) { >> + DASHContext *c = s->priv_data; >> + int http_base_proto = ff_is_http_proto(filename); >> + >> + if (http_base_proto) { >> + AVIOContext *out = NULL; >> + AVDictionary *http_opts = NULL; >> + >> + set_http_options(&http_opts, c); >> + av_dict_set(&http_opts, "method", "DELETE", 0); >> + >> + if (dashenc_io_open(s, &out, filename, &http_opts) < 0) { >> + av_log(s, AV_LOG_ERROR, "failed to delete %s\n", filename); >> + } >> + >> + av_dict_free(&http_opts); >> + dashenc_io_close(s, &out, filename); >> + } else if (unlink(filename) < 0) { >> + av_log(s, AV_LOG_ERROR, "failed to delete %s: %s\n", filename, strerror(errno)); >> + } >> +} >> + >> static int dash_flush(AVFormatContext *s, int final, int stream) >> { >> DASHContext *c = s->priv_data; >> @@ -1215,7 +1237,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream) >> for (j = 0; j < remove; j++) { >> char filename[1024]; >> snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->segments[j]->file); >> - unlink(filename); >> + dashenc_delete_file(s, filename); >> av_free(os->segments[j]); >> } >> os->nb_segments -= remove; >> @@ -1367,9 +1389,9 @@ static int dash_write_trailer(AVFormatContext *s) >> for (i = 0; i < s->nb_streams; i++) { >> OutputStream *os = &c->streams[i]; >> snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile); >> - unlink(filename); >> + dashenc_delete_file(s, filename); >> } >> - unlink(s->url); >> + dashenc_delete_file(s, s->url); >> } >> >> return 0; > Thanks for sending the patch. LGTM. > But let me test it with some of existing servers before the final push, just to make sure no existing functionality is broken. Pushed. Regards, Karthick > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c index 83e0cff728..66f12d8d49 100644 --- a/libavformat/dashenc.c +++ b/libavformat/dashenc.c @@ -1131,6 +1131,28 @@ static int update_stream_extradata(AVFormatContext *s, OutputStream *os, return 0; } +static void dashenc_delete_file(AVFormatContext *s, char *filename) { + DASHContext *c = s->priv_data; + int http_base_proto = ff_is_http_proto(filename); + + if (http_base_proto) { + AVIOContext *out = NULL; + AVDictionary *http_opts = NULL; + + set_http_options(&http_opts, c); + av_dict_set(&http_opts, "method", "DELETE", 0); + + if (dashenc_io_open(s, &out, filename, &http_opts) < 0) { + av_log(s, AV_LOG_ERROR, "failed to delete %s\n", filename); + } + + av_dict_free(&http_opts); + dashenc_io_close(s, &out, filename); + } else if (unlink(filename) < 0) { + av_log(s, AV_LOG_ERROR, "failed to delete %s: %s\n", filename, strerror(errno)); + } +} + static int dash_flush(AVFormatContext *s, int final, int stream) { DASHContext *c = s->priv_data; @@ -1215,7 +1237,7 @@ static int dash_flush(AVFormatContext *s, int final, int stream) for (j = 0; j < remove; j++) { char filename[1024]; snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->segments[j]->file); - unlink(filename); + dashenc_delete_file(s, filename); av_free(os->segments[j]); } os->nb_segments -= remove; @@ -1367,9 +1389,9 @@ static int dash_write_trailer(AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { OutputStream *os = &c->streams[i]; snprintf(filename, sizeof(filename), "%s%s", c->dirname, os->initfile); - unlink(filename); + dashenc_delete_file(s, filename); } - unlink(s->url); + dashenc_delete_file(s, s->url); } return 0;