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

殷焦元 yinjiaoyuan at 163.com
Thu Jan 19 03:35:25 EET 2017


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




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


More information about the ffmpeg-devel mailing list