Skip to content

Commit 4bed919

Browse files
committed
read hls key from old playlist
1 parent 416931d commit 4bed919

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

hls/ngx_rtmp_hls_module.c

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ ngx_rtmp_hls_write_playlist(ngx_rtmp_session_t *s)
491491
ngx_rtmp_hls_frag_t *f;
492492
ngx_uint_t i, max_frag;
493493
ngx_str_t name_part, key_name_part;
494+
uint64_t prev_key_id;
494495
const char *sep, *key_sep;
495496

496497

@@ -552,6 +553,8 @@ ngx_rtmp_hls_write_playlist(ngx_rtmp_session_t *s)
552553
key_name_part = ctx->name;
553554
}
554555

556+
prev_key_id = 0;
557+
555558
for (i = 0; i < ctx->nfrags; i++) {
556559
f = ngx_rtmp_hls_get_frag(s, i);
557560

@@ -562,13 +565,15 @@ ngx_rtmp_hls_write_playlist(ngx_rtmp_session_t *s)
562565
p = ngx_slprintf(p, end, "#EXT-X-DISCONTINUITY\n");
563566
}
564567

565-
if (hacf->keys && (i == 0 || f->id != f->key_id)) {
568+
if (hacf->keys && (i == 0 || f->key_id != prev_key_id)) {
566569
p = ngx_slprintf(p, end, "#EXT-X-KEY:METHOD=AES-128,"
567-
"URI=\"%V%V%s%uL.key\",IV=0x%032XL",
570+
"URI=\"%V%V%s%uL.key\",IV=0x%032XL\n",
568571
&hacf->keys_url, &key_name_part,
569572
key_sep, f->key_id, f->key_id);
570573
}
571574

575+
prev_key_id = f->key_id;
576+
572577
p = ngx_slprintf(p, end,
573578
"#EXTINF:%.3f,\n"
574579
"%V%V%s%uL.ts\n",
@@ -884,10 +889,10 @@ ngx_rtmp_hls_open_fragment(ngx_rtmp_session_t *s, uint64_t ts,
884889
return NGX_ERROR;
885890
}
886891

887-
ngx_sprintf(ctx->keyfile.data + ctx->keyfile.len, "%uL.ts%Z", id);
892+
ngx_sprintf(ctx->keyfile.data + ctx->keyfile.len, "%uL.key%Z", id);
888893

889-
fd = ngx_open_file(ctx->keyfile.data, NGX_FILE_RDONLY,
890-
NGX_FILE_OPEN, 0);
894+
fd = ngx_open_file(ctx->keyfile.data, NGX_FILE_WRONLY,
895+
NGX_FILE_TRUNCATE, NGX_FILE_DEFAULT_ACCESS);
891896

892897
if (fd == NGX_INVALID_FILE) {
893898
ngx_log_error(NGX_LOG_ERR, s->connection->log, ngx_errno,
@@ -969,8 +974,8 @@ ngx_rtmp_hls_restore_stream(ngx_rtmp_session_t *s)
969974
u_char *p, *last, *end, *next, *pa;
970975
ngx_rtmp_hls_frag_t *f;
971976
double duration;
972-
ngx_int_t discont;
973-
uint64_t mag;
977+
ngx_int_t discont, key;
978+
uint64_t mag, key_id;
974979
static u_char buffer[4096];
975980

976981
ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_hls_module);
@@ -992,6 +997,8 @@ ngx_rtmp_hls_restore_stream(ngx_rtmp_session_t *s)
992997
f = NULL;
993998
duration = 0;
994999
discont = 0;
1000+
key_id = 0;
1001+
key = 0;
9951002

9961003
for ( ;; ) {
9971004

@@ -1035,6 +1042,14 @@ ngx_rtmp_hls_restore_stream(ngx_rtmp_session_t *s)
10351042
}
10361043

10371044

1045+
#define NGX_RTMP_XKEY "#EXT-X-KEY:"
1046+
#define NGX_RTMP_XKEY_LEN (sizeof(NGX_RTMP_XKEY) - 1)
1047+
1048+
if (ngx_memcmp(p, NGX_RTMP_XKEY, NGX_RTMP_XKEY_LEN) == 0) {
1049+
key = 1;
1050+
}
1051+
1052+
10381053
#define NGX_RTMP_EXTINF "#EXTINF:"
10391054
#define NGX_RTMP_EXTINF_LEN (sizeof(NGX_RTMP_EXTINF) - 1)
10401055

@@ -1085,6 +1100,13 @@ ngx_rtmp_hls_restore_stream(ngx_rtmp_session_t *s)
10851100
mag *= 10;
10861101
}
10871102

1103+
if (key) {
1104+
key_id = f->id;
1105+
key = 0;
1106+
}
1107+
1108+
f->key_id = key_id;
1109+
10881110
ngx_rtmp_hls_next_frag(s);
10891111

10901112
ngx_log_debug6(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,

0 commit comments

Comments
 (0)