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

Steven Liu lingjiujianke at gmail.com
Thu Jan 19 03:56:41 EET 2017


2017-01-19 9:35 GMT+08:00 殷焦元 <yinjiaoyuan at 163.com>:

> I test this patch, I found it show below log info and ffmpeg term auto.
>
> av_interleaved_write_frame(): Too many open files
> No more output streams to write to, finishing.
>
> I think it is not OK.
> Yin Jiaoyuan
>

ok , i wll make a new patch to file the too many open files

>
>
>
>
> At 2017-01-19 07:08:08, "Steven Liu" <lingjiujianke at gmail.com> wrote:
> >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
> >_______________________________________________
> >ffmpeg-devel mailing list
> >ffmpeg-devel at ffmpeg.org
> >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list