From 05aa93146129240f15309a4c7d04e531ee8edd57 Mon Sep 17 00:00:00 2001 From: Aidan Ridley Date: Thu, 27 Apr 2023 22:26:55 -0600 Subject: [PATCH] fix: unnecessary parsing of in-band pssh when pssh is in the manifest (#5198) When pssh is provided in the manifest we do not need to parse in-band pssh even if the drm.parseInbandPssh setting is true. Fixes #5197 --- lib/media/drm_engine.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/media/drm_engine.js b/lib/media/drm_engine.js index e425887617..b8bf2687ee 100644 --- a/lib/media/drm_engine.js +++ b/lib/media/drm_engine.js @@ -139,6 +139,9 @@ shaka.media.DrmEngine = class { /** @private {Promise} */ this.mediaKeysAttached_ = null; + + /** @private {?shaka.extern.InitDataOverride} */ + this.manifestInitData_ = null; } /** @override */ @@ -498,10 +501,10 @@ shaka.media.DrmEngine = class { () => this.closeOpenSessions_()); } - const manifestInitData = this.currentDrmInfo_ ? - this.currentDrmInfo_.initData.find( + this.manifestInitData_ = this.currentDrmInfo_ ? + (this.currentDrmInfo_.initData.find( (initDataOverride) => initDataOverride.initData.length > 0, - ) : null; + ) || null) : null; /** * We can attach media keys before the playback actually begins when: @@ -509,7 +512,7 @@ shaka.media.DrmEngine = class { * - Some initData already has been generated (through the manifest) * - In case of an offline session */ - if (manifestInitData || + if (this.manifestInitData_ || this.currentDrmInfo_.keySystem !== 'com.apple.fps' || this.storedPersistentSessions_.size) { await this.attachMediaKeys_(); @@ -525,7 +528,7 @@ shaka.media.DrmEngine = class { // Also suppress 'encrypted' events when parsing in-band ppsh // from media segments because that serves the same purpose as the // 'encrypted' events. - if (!manifestInitData && !this.storedPersistentSessions_.size && + if (!this.manifestInitData_ && !this.storedPersistentSessions_.size && !this.config_.parseInbandPsshEnabled) { this.eventManager_.listen( this.video_, 'encrypted', (e) => this.onEncryptedEvent_(e)); @@ -2496,7 +2499,7 @@ shaka.media.DrmEngine = class { * @return {!Promise} */ parseInbandPssh(contentType, mediaSegment) { - if (!this.config_.parseInbandPsshEnabled) { + if (!this.config_.parseInbandPsshEnabled || this.manifestInitData_) { return Promise.resolve(); }