diff options
author | Steven Liu <lq@chinaffmpeg.org> | 2018-08-13 18:15:23 +0800 |
---|---|---|
committer | Steven Liu <lq@chinaffmpeg.org> | 2018-08-22 19:15:15 +0800 |
commit | 9e61141905b5197c8fbab2a651b4013361c8550f (patch) | |
tree | ecfdb69e9e099286b9f965c25b0a3e62f6a434cc | |
parent | e2921578c09ebbaa86b1659bc6076049f573e349 (diff) | |
download | ffmpeg-9e61141905b5197c8fbab2a651b4013361c8550f.tar.gz |
avformat/hls: support decryption AES128 fmp4 m3u8 list
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
-rw-r--r-- | libavformat/hls.c | 21 |
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; |