diff mbox

[FFmpeg-devel] avformat/dashenc: Use HTTP DELETE for HTTP base proto

Message ID 20180227091810.16578-1-serhii.marchuk@gmail.com
State Accepted
Commit e45d55756188186f065fa23fcab7b7d9026ddf41
Headers show

Commit Message

Serhii Marchuk Feb. 27, 2018, 9:18 a.m. UTC
---
 libavformat/dashenc.c | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

Comments

Jeyapal, Karthick Feb. 28, 2018, 3:39 a.m. UTC | #1
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.
Jeyapal, Karthick March 3, 2018, 1:20 p.m. UTC | #2
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 mbox

Patch

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;