[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