From 318d0481545d5218ef69e275709059ca9de1b3af Mon Sep 17 00:00:00 2001 From: yajin2021 Date: Mon, 9 Aug 2021 17:34:04 +0800 Subject: [PATCH 1/2] fix: transition from Clear to DRM content --- src/controller/eme-controller.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controller/eme-controller.ts b/src/controller/eme-controller.ts index 6e2bc09b4a3..6b9e84cc0d3 100644 --- a/src/controller/eme-controller.ts +++ b/src/controller/eme-controller.ts @@ -254,6 +254,7 @@ class EMEController implements ComponentAPI { logger.log(`Media-keys created for key-system "${keySystem}"`); this._onMediaKeysCreated(); + this._attemptSetMediaKeys(mediaKeys); return mediaKeys; }); From f7e5fa4d75c479a2b19ebca76c460bb4ae7b729c Mon Sep 17 00:00:00 2001 From: Hongfei Huang Date: Tue, 11 Jan 2022 16:31:36 +0800 Subject: [PATCH 2/2] fix: Set mediaKeys again after media attached --- src/controller/eme-controller.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/controller/eme-controller.ts b/src/controller/eme-controller.ts index 6b9e84cc0d3..2e8dd98382f 100644 --- a/src/controller/eme-controller.ts +++ b/src/controller/eme-controller.ts @@ -122,6 +122,9 @@ class EMEController implements ComponentAPI { private mediaKeysPromise: Promise | null = null; private _onMediaEncrypted = this.onMediaEncrypted.bind(this); + // try to call setMediaKeys again after media attached if needed + private _attemptSetMediaKeysAgain: boolean = false; + /** * @constructs * @param {Hls} hls Our Hls.js instance @@ -359,9 +362,11 @@ class EMEController implements ComponentAPI { */ private _attemptSetMediaKeys(mediaKeys?: MediaKeys) { if (!this._media) { - throw new Error( + logger.warn( 'Attempted to set mediaKeys without first attaching a media element' ); + this._attemptSetMediaKeysAgain = true; + return; } if (!this._hasSetMediaKeys) { @@ -654,6 +659,11 @@ class EMEController implements ComponentAPI { // keep reference of media this._media = media; + if (this._attemptSetMediaKeysAgain) { + // mediaKeys not set, attempt again + this._attemptSetMediaKeys(); + } + media.addEventListener('encrypted', this._onMediaEncrypted); }