[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