From 6c8a158989b45cea7f81ff8e9f65adef32d73c0c Mon Sep 17 00:00:00 2001 From: selsta Date: Thu, 5 Mar 2015 19:49:57 +0100 Subject: [PATCH] hls: detect SAMPLE-AES encryption SAMPLE-AES encryption is not commonly used yet, but without this patch ffmpeg is thinking that the hls segments are not encrypted which produces broken files. Signed-off-by: Michael Niedermayer --- libavformat/hls.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index 4fdda3408c..5e8e1b2b5b 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -62,6 +62,7 @@ enum KeyType { KEY_NONE, KEY_AES_128, + KEY_SAMPLE_AES }; struct segment { @@ -329,7 +330,7 @@ static void handle_variant_args(struct variant_info *info, const char *key, struct key_info { char uri[MAX_URL_SIZE]; - char method[10]; + char method[11]; char iv[35]; }; @@ -556,6 +557,8 @@ static int parse_playlist(HLSContext *c, const char *url, has_iv = 0; if (!strcmp(info.method, "AES-128")) key_type = KEY_AES_128; + if (!strcmp(info.method, "SAMPLE-AES")) + key_type = KEY_SAMPLE_AES; if (!strncmp(info.iv, "0x", 2) || !strncmp(info.iv, "0X", 2)) { ff_hex_to_data(iv, info.iv + 2); has_iv = 1; @@ -967,6 +970,10 @@ static int open_input(HLSContext *c, struct playlist *pls) goto cleanup; } ret = 0; + } else if (seg->key_type == KEY_SAMPLE_AES) { + av_log(pls->parent, AV_LOG_ERROR, + "SAMPLE-AES encryption is not supported yet\n"); + ret = AVERROR_PATCHWELCOME; } else ret = AVERROR(ENOSYS);