summaryrefslogtreecommitdiff
path: root/libavformat/hls.c
diff options
context:
space:
mode:
authorSteven Liu <lq@chinaffmpeg.org>2018-08-13 18:15:23 +0800
committerSteven Liu <lq@chinaffmpeg.org>2018-08-22 19:15:15 +0800
commit9e61141905b5197c8fbab2a651b4013361c8550f (patch)
treeecfdb69e9e099286b9f965c25b0a3e62f6a434cc /libavformat/hls.c
parente2921578c09ebbaa86b1659bc6076049f573e349 (diff)
avformat/hls: support decryption AES128 fmp4 m3u8 list
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
Diffstat (limited to 'libavformat/hls.c')
-rw-r--r--libavformat/hls.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c
index 3d4f7f2647..8ad08baaed 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -811,6 +811,27 @@ static int parse_playlist(HLSContext *c, const char *url,
ff_parse_key_value(ptr, (ff_parse_key_val_cb) handle_init_section_args,
&info);
cur_init_section = new_init_section(pls, &info, url);
+ cur_init_section->key_type = key_type;
+ if (has_iv) {
+ memcpy(cur_init_section->iv, iv, sizeof(iv));
+ } else {
+ int seq = pls->start_seq_no + pls->n_segments;
+ memset(cur_init_section->iv, 0, sizeof(cur_init_section->iv));
+ AV_WB32(cur_init_section->iv + 12, seq);
+ }
+
+ if (key_type != KEY_NONE) {
+ ff_make_absolute_url(tmp_str, sizeof(tmp_str), url, key);
+ cur_init_section->key = av_strdup(tmp_str);
+ if (!cur_init_section->key) {
+ av_free(cur_init_section);
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
+ } else {
+ cur_init_section->key = NULL;
+ }
+
} else if (av_strstart(line, "#EXT-X-ENDLIST", &ptr)) {
if (pls)
pls->finished = 1;