[FFmpeg-devel] [PATCH] avformat/hlsenc: fix bug of hlsenc http delete old segments

Steven Liu lingjiujianke at gmail.com
Thu Jan 19 01:08:08 EET 2017


2017-01-17 14:28 GMT+08:00 Steven Liu <lq at chinaffmpeg.org>:

> when push hls to http server, the old segemnts can not delete by hls
> formats.
> so add the http option into hls_delete_old_segments
>
> Reported-by: Yin Jiaoyuan <yinjiaoyuan at 163.com>
> Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
> ---
>  libavformat/hlsenc.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> index f02b887..87f7717 100644
> --- a/libavformat/hlsenc.c
> +++ b/libavformat/hlsenc.c
> @@ -245,6 +245,8 @@ static int hls_delete_old_segments(HLSContext *hls) {
>      int ret = 0, path_size, sub_path_size;
>      char *dirname = NULL, *p, *sub_path;
>      char *path = NULL;
> +    AVDictionary *options = NULL;
> +    AVIOContext *out = NULL;
>
>      segment = hls->segments;
>      while (segment) {
> @@ -294,7 +296,11 @@ static int hls_delete_old_segments(HLSContext *hls) {
>              av_strlcat(path, segment->filename, path_size);
>          }
>
> -        if (unlink(path) < 0) {
> +        if (hls->method) {
> +            av_dict_set(&options, "method", "DELETE", 0);
> +            if ((ret = hls->avf->io_open(hls->avf, &out, path,
> AVIO_FLAG_WRITE, &options)) < 0)
> +                goto fail;
> +        } else if (unlink(path) < 0) {
>              av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s:
> %s\n",
>                                       path, strerror(errno));
>          }
> @@ -309,7 +315,14 @@ static int hls_delete_old_segments(HLSContext *hls) {
>
>              av_strlcpy(sub_path, dirname, sub_path_size);
>              av_strlcat(sub_path, segment->sub_filename, sub_path_size);
> -            if (unlink(sub_path) < 0) {
> +
> +            if (hls->method) {
> +                av_dict_set(&options, "method", "DELETE", 0);
> +                if ((ret = hls->avf->io_open(hls->avf, &out, sub_path,
> AVIO_FLAG_WRITE, &options)) < 0) {
> +                    av_free(sub_path);
> +                    goto fail;
> +                }
> +            } else if (unlink(sub_path) < 0) {
>                  av_log(hls, AV_LOG_ERROR, "failed to delete old segment
> %s: %s\n",
>                                           sub_path, strerror(errno));
>              }
> --
> 2.10.1.382.ga23ca1b.dirty
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


applied!


Thanks


More information about the ffmpeg-devel mailing list