avformat/hls: support decryption AES128 fmp4 m3u8 list
authorSteven Liu <lq@chinaffmpeg.org>
Mon, 13 Aug 2018 10:15:23 +0000 (18:15 +0800)
committerSteven Liu <lq@chinaffmpeg.org>
Wed, 22 Aug 2018 11:15:15 +0000 (19:15 +0800)
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
libavformat/hls.c

index 3d4f7f2..8ad08ba 100644 (file)
@@ -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;