[FFmpeg-devel] [PATCH] avformat/hlsenc: support TAG span multiple lines when parse playlist

Steven Liu lq at chinaffmpeg.org
Fri May 5 19:50:45 EEST 2017


refer to: https://developer.apple.com/library/content/technotes/tn2288/_index.html

support to parse the EXT-X-KEY span multiple lines:
 #EXTM3U
 #EXT-X-VERSION:3
 #EXT-X-TARGETDURATION:10
 #EXT-X-MEDIA-SEQUENCE:0
 #EXT-X-KEY:METHOD=AES-128,URI="/file.key", \
 IV=0x498c8325965f907960e3d94d20c4d138
 #EXTINF:10.000000,
 out0.ts
 #EXTINF:8.640000,
 out1.ts
 #EXTINF:9.160000,
 out2.ts

Reported-by: Aaron Levinson <alevinsn at aracnet.com>
Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
---
 libavformat/hlsenc.c |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 221089c..c167624 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -500,10 +500,27 @@ static int hls_encryption_start(AVFormatContext *s)
 
 static int read_chomp_line(AVIOContext *s, char *buf, int maxlen)
 {
-    int len = ff_get_line(s, buf, maxlen);
+    int len = 0;
+    int total_len = 0;
+
+re_get_line:
+    if (maxlen > total_len) {
+        len = ff_get_line(s, buf, maxlen - total_len);
+    } else {
+        av_log(s, AV_LOG_WARNING, "The tag is too long, context only can get %s\n", buf);
+        return maxlen;
+    }
     while (len > 0 && av_isspace(buf[len - 1]))
         buf[--len] = '\0';
-    return len;
+
+    if (buf[len - 1] == '\\') {
+        buf += len - 1;
+        total_len += len - 1;
+        goto re_get_line;
+    }
+
+    total_len += len;
+    return total_len;
 }
 
 static int hls_mux_init(AVFormatContext *s)
-- 
1.7.1





More information about the ffmpeg-devel mailing list