[FFmpeg-devel] [PATCH] delete the old segment file from hls list
Steven Liu
lingjiujianke at gmail.com
Mon Aug 11 11:39:37 CEST 2014
Hi Guys,
The FFmpeg hls module can make m3u8 and ts, but it dosen't delete the
old ts segment file.
If always run this module, the disk will full, so this patch can fix
the problem.
When update the segment list m3u8 file, it will delete the ts segment
out range from the list file.
before use this patch:
[root at localhost ffmpeg]# ls *.ts *.m3u8
a0.ts a10.ts a11.ts a12.ts a13.ts a14.ts a15.ts a16.ts a17.ts
a18.ts a19.ts a1.ts a20.ts a2.ts a3.ts a4.ts a5.ts a6.ts a7.ts
a8.ts a9.ts a.m3u8
[root at localhost ffmpeg]# cat a.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:16
#EXTINF:10.427075,
a16.ts
#EXTINF:10.427075,
a17.ts
#EXTINF:10.427075,
a18.ts
#EXTINF:10.427075,
a19.ts
#EXTINF:3.670330,
a20.ts
#EXT-X-ENDLIST
[root at localhost ffmpeg]#
after use this patch:
[root at localhost ffmpeg]# ls *.ts *.m3u8
a10.ts a11.ts a12.ts a13.ts a9.ts a.m3u8
[root at localhost ffmpeg]# cat a.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:9
#EXTINF:10.427075,
a9.ts
#EXTINF:10.427075,
a10.ts
#EXTINF:10.427075,
a11.ts
#EXTINF:10.427075,
a12.ts
#EXTINF:2.335665,
a13.ts
#EXT-X-ENDLIST
[root at localhost ffmpeg]#
-------------------------------------------
The patch context:
when update the hls m3u8 list, the old file is not unlinked
this patch can do this operation
Signed-off-by: Steven Liu <qi.liu at chinacache.com>
---
libavformat/hlsenc.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 11f1e5b..2ee0970 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -30,6 +30,10 @@
#include "avformat.h"
#include "internal.h"
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
typedef struct HLSSegment {
char filename[1024];
@@ -115,6 +119,7 @@ static int hls_append_segment(HLSContext *hls, double
duration)
if (hls->max_nb_segments && hls->nb_entries >= hls->max_nb_segments) {
en = hls->segments;
hls->segments = en->next;
+ unlink(en->filename);
av_free(en);
} else
hls->nb_entries++;
--
1.7.1
More information about the ffmpeg-devel
mailing list