On Mon, May 19, 2014 at 10:36:48AM +0800, 740936897 wrote: > HI, all: > currently, HLS muxer does't support to remove segment file, only hls_wrap is > set. > if hls_wrap is set, the segment number will cycle, eg, from 0~10. > if hls_wrap is not set, the segment number will increase continuously, but > result to many many segment files. > I fix this problem, add a HLS muxer option : hls_extra_size. > if segment file size > (hls_extra_size + hls_list_size), segment file will > be removed. > > > follow is the content of patch. forgive my poor english ^_^ > -------------------------------------------------------------------------------------------------------------------- > > > From 774743cfd112ed164858359e06292035ae0932cf Mon Sep 17 00:00:00 2001 > From: wenjie.zhao <wenjie.z...@chinacache.com> > Date: Sat, 17 May 2014 08:57:34 +0800 > Subject: [PATCH] add hls muxer support extra entries outside m3u8 playlist > this extra entries will be deleted later. > > > --- > libavformat/hlsenc.c | 31 +++++++++++++++++++++++++++++-- > 1 files changed, 29 insertions(+), 2 deletions(-) > > > diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c > index 1b5ef0e..041a288 100644 > --- a/libavformat/hlsenc.c > +++ b/libavformat/hlsenc.c > @@ -21,6 +21,7 @@ > > #include <float.h> > #include <stdint.h> > +#include <unistd.h> > > #include "libavutil/mathematics.h" > #include "libavutil/parseutils.h" > @@ -33,6 +34,7 @@ > > typedef struct ListEntry { > char name[1024]; > + char filename[1024]; // segment file path > int duration; > struct ListEntry *next; > } ListEntry; > @@ -54,6 +56,13 @@ typedef struct HLSContext { > int nb_entries; > ListEntry *list; > ListEntry *end_list; > + > + // extra entries size > + int extra_size; > + ListEntry *extra_list; > + ListEntry *extra_end_list; > + int nb_extra_entries; > + > char *basename; > AVIOContext *pb; > } HLSContext; > @@ -91,6 +100,7 @@ static int append_entry(HLSContext *hls, uint64_t duration) > return AVERROR(ENOMEM); > > av_strlcpy(en->name, av_basename(hls->avf->filename), sizeof(en->name)); > + av_strlcpy(en->filename, hls->avf->filename, sizeof(en->filename)); > > en->duration = duration; > en->next = NULL; > @@ -105,7 +115,23 @@ static int append_entry(HLSContext *hls, uint64_t > duration) > if (hls->size && hls->nb_entries >= hls->size) { > en = hls->list; > hls->list = en->next; > - av_free(en); > + if (!hls->extra_list) > + hls->extra_list = en; > + else > + hls->extra_end_list->next = en; > + > + hls->extra_end_list = en; > + hls->nb_extra_entries ++; > + > + if (hls->extra_size && hls->nb_extra_entries > hls->extra_size) { > + en = hls->extra_list; > + hls->extra_list = en->next; > +
> + // remove useless file > + unlink(en->filename); thats not ok, you dont know if its a local file it could be anything thats supported by AVIO / URLProtocols [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Complexity theory is the science of finding the exact solution to an approximation. Benchmarking OTOH is finding an approximation of the exact
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel