@@ -320,7 +320,7 @@ shaka.drm.DrmEngine = class {
320320
321321 const makeDrmInfo = ( encryptionScheme ) => {
322322 const drmInfo = shaka . util . ManifestParserUtils . createDrmInfo (
323- keySystem , encryptionScheme , null ) ;
323+ keySystem , encryptionScheme , /* initData= */ null ) ;
324324 drmInfo . licenseServerUri = licenseServerUri ;
325325 drmInfo . serverCertificate = serverCertificate ;
326326 drmInfo . persistentStateRequired = true ;
@@ -800,6 +800,21 @@ shaka.drm.DrmEngine = class {
800800 return this . allSessionsLoaded_ ;
801801 }
802802
803+ /**
804+ * Called when new initialization data is encountered.
805+ *
806+ * Certain fields may not be set yet in currentDrmInfo_ due to
807+ * PreloadManager's early initialization of the DrmEngine
808+ * (when currentDrmInfo_ is initialized).
809+ * @param {!shaka.extern.DrmInfo } drmInfo
810+ */
811+ updateCurrentDrmInfo ( drmInfo ) {
812+ if ( this . currentDrmInfo_ &&
813+ ( this . currentDrmInfo_ . mediaTypes !== drmInfo . mediaTypes ) ) {
814+ this . currentDrmInfo_ . mediaTypes = drmInfo . mediaTypes ;
815+ }
816+ }
817+
803818 /**
804819 * Called when new initialization data is encountered. If this data hasn't
805820 * been seen yet, this will create a new session for it.
@@ -812,6 +827,22 @@ shaka.drm.DrmEngine = class {
812827 return ;
813828 }
814829
830+ try {
831+ initData = this . config_ . initDataTransform (
832+ initData , initDataType , this . currentDrmInfo_ ) ;
833+ } catch ( error ) {
834+ let shakaError = error ;
835+ if ( ! ( error instanceof shaka . util . Error ) ) {
836+ shakaError = new shaka . util . Error (
837+ shaka . util . Error . Severity . CRITICAL ,
838+ shaka . util . Error . Category . DRM ,
839+ shaka . util . Error . Code . INIT_DATA_TRANSFORM_ERROR ,
840+ error ) ;
841+ }
842+ this . onError_ ( shakaError ) ;
843+ return ;
844+ }
845+
815846 // Suppress duplicate init data.
816847 // Note that some init data are extremely large and can't portably be used
817848 // as keys in a dictionary.
@@ -1290,22 +1321,6 @@ shaka.drm.DrmEngine = class {
12901321 } ;
12911322 this . activeSessions_ . set ( session , metadata ) ;
12921323
1293- try {
1294- initData = this . config_ . initDataTransform (
1295- initData , initDataType , this . currentDrmInfo_ ) ;
1296- } catch ( error ) {
1297- let shakaError = error ;
1298- if ( ! ( error instanceof shaka . util . Error ) ) {
1299- shakaError = new shaka . util . Error (
1300- shaka . util . Error . Severity . CRITICAL ,
1301- shaka . util . Error . Category . DRM ,
1302- shaka . util . Error . Code . INIT_DATA_TRANSFORM_ERROR ,
1303- error ) ;
1304- }
1305- this . onError_ ( shakaError ) ;
1306- return ;
1307- }
1308-
13091324 if ( this . config_ . logLicenseExchange ) {
13101325 const str = shaka . util . Uint8ArrayUtils . toBase64 ( initData ) ;
13111326 shaka . log . info ( 'EME init data: type=' , initDataType , 'data=' , str ) ;
@@ -1459,7 +1474,8 @@ shaka.drm.DrmEngine = class {
14591474 shaka . util . Error . Severity . CRITICAL ,
14601475 shaka . util . Error . Category . DRM ,
14611476 shaka . util . Error . Code . LICENSE_REQUEST_FAILED ,
1462- error , drmSessionMetadata ) ;
1477+ error , drmSessionMetadata ,
1478+ `activeSessionsSize=${ this . activeSessions_ . size } ` ) ;
14631479 if ( this . activeSessions_ . size == 1 ) {
14641480 this . onError_ ( shakaErr ) ;
14651481 if ( metadata && metadata . updatePromise ) {
@@ -2243,6 +2259,7 @@ shaka.drm.DrmEngine = class {
22432259 serverCertificateUri : serverCertificateUris [ 0 ] ,
22442260 initData : initDatas ,
22452261 keyIds,
2262+ mediaTypes : drmInfos [ 0 ] . mediaTypes ,
22462263 } ;
22472264
22482265 if ( keySystemUris . size > 0 ) {
@@ -2472,7 +2489,7 @@ shaka.drm.DrmEngine = class {
24722489 }
24732490
24742491 /**
2475- * Parse pssh from a media segment and announce new initData
2492+ * Parse pssh from a media segment and announce new initData.
24762493 *
24772494 * @param {shaka.util.ManifestParserUtils.ContentType } contentType
24782495 * @param {!BufferSource } mediaSegment
0 commit comments