diff --git a/test/media/drm_engine_integration.js b/test/media/drm_engine_integration.js index 3400f7eb78..1f2b11cdd9 100644 --- a/test/media/drm_engine_integration.js +++ b/test/media/drm_engine_integration.js @@ -7,8 +7,7 @@ describe('DrmEngine', () => { const ContentType = shaka.util.ManifestParserUtils.ContentType; - // These come from Axinom and use the Axinom license server. - // TODO: Do not rely on third-party services long-term. + // These come from Axinom. const videoInitSegmentUri = '/base/test/test/assets/multidrm-video-init.mp4'; const videoSegmentUri = '/base/test/test/assets/multidrm-video-segment.mp4'; const audioInitSegmentUri = '/base/test/test/assets/multidrm-audio-init.mp4'; @@ -89,9 +88,13 @@ describe('DrmEngine', () => { drmEngine = new shaka.media.DrmEngine(playerInterface); const config = shaka.util.PlayerConfiguration.createDefault().drm; config.servers['com.widevine.alpha'] = - 'https://cwip-shaka-proxy.appspot.com/specific_key?blodJidXR9eARuql0dNLWg=GX8m9XLIZNIzizrl0RTqnA'; + 'https://cwip-shaka-proxy.appspot.com/specific_key?QGCoZYh4Qmecv5GuW64ecg=/DU0CDcxDMD7U96X4ipp4A'; config.servers['com.microsoft.playready'] = - 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:6e5a1d26-2757-47d7-8046-eaa5d1d34b5a,contentkey:GX8m9XLIZNIzizrl0RTqnA==,sl:150)'; + 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:4060a865-8878-4267-9cbf-91ae5bae1e72,contentkey:/DU0CDcxDMD7U96X4ipp4A==,sl:150)'; + config.preferredKeySystems = [ + 'com.widevine.alpha', + 'com.microsoft.playready', + ]; drmEngine.configure(config); manifest = shaka.test.ManifestGenerator.generate((manifest) => { @@ -179,8 +182,11 @@ describe('DrmEngine', () => { eventManager.listen(video, 'encrypted', () => { encryptedEventSeen.resolve(); }); + eventManager.listen(video, 'error', () => { + fail('MediaError message ' + video.error.message); fail('MediaError code ' + video.error.code); + let extended = video.error.msExtendedCode; if (extended) { if (extended < 0) { @@ -197,9 +203,9 @@ describe('DrmEngine', () => { }); const variants = manifest.variants; - await drmEngine.initForPlayback(variants, manifest.offlineSessionIds); await drmEngine.attach(video); + await mediaSourceEngine.appendBuffer( ContentType.VIDEO, videoInitSegment, null, fakeStream, /* hasClosedCaptions= */ false); @@ -207,6 +213,7 @@ describe('DrmEngine', () => { ContentType.AUDIO, audioInitSegment, null, fakeStream, /* hasClosedCaptions= */ false); await encryptedEventSeen; + // With PlayReady, a persistent license policy can cause a different // chain of events. In particular, the request is bypassed and we // get a usable key right away. @@ -264,8 +271,8 @@ describe('DrmEngine', () => { // Configure DrmEngine for ClearKey playback. const config = shaka.util.PlayerConfiguration.createDefault().drm; config.clearKeys = { - // From https://github.com/Axinom/public-test-vectors/tree/conservative#v61-multidrm - '6e5a1d26275747d78046eaa5d1d34b5a': '197f26f572c864d2338b3ae5d114ea9c', + // From https://github.com/Axinom/public-test-vectors/blob/master/README.md#v10 + '4060a865887842679cbf91ae5bae1e72': 'fc35340837310cc0fb53de97e22a69e0', }; drmEngine.configure(config); @@ -277,8 +284,11 @@ describe('DrmEngine', () => { eventManager.listen(video, 'encrypted', () => { encryptedEventSeen.resolve(); }); + eventManager.listen(video, 'error', () => { + fail('MediaError message ' + video.error.message); fail('MediaError code ' + video.error.code); + let extended = video.error.msExtendedCode; if (extended) { if (extended < 0) { @@ -295,9 +305,9 @@ describe('DrmEngine', () => { }); const variants = manifest.variants; - await drmEngine.initForPlayback(variants, manifest.offlineSessionIds); await drmEngine.attach(video); + await mediaSourceEngine.appendBuffer( ContentType.VIDEO, videoInitSegment, null, fakeStream, /* hasClosedCaptions= */ false); diff --git a/test/test/assets/multidrm-audio-init.mp4 b/test/test/assets/multidrm-audio-init.mp4 index ebed2ad62c..6ecca5bd97 100644 Binary files a/test/test/assets/multidrm-audio-init.mp4 and b/test/test/assets/multidrm-audio-init.mp4 differ diff --git a/test/test/assets/multidrm-audio-segment.mp4 b/test/test/assets/multidrm-audio-segment.mp4 index 2aaad85788..e5f9e6749c 100644 Binary files a/test/test/assets/multidrm-audio-segment.mp4 and b/test/test/assets/multidrm-audio-segment.mp4 differ diff --git a/test/test/assets/multidrm-video-init.mp4 b/test/test/assets/multidrm-video-init.mp4 index ad6388b7ae..d899212798 100644 Binary files a/test/test/assets/multidrm-video-init.mp4 and b/test/test/assets/multidrm-video-init.mp4 differ diff --git a/test/test/assets/multidrm-video-segment.mp4 b/test/test/assets/multidrm-video-segment.mp4 index ff982ce27b..312df55a3c 100644 Binary files a/test/test/assets/multidrm-video-segment.mp4 and b/test/test/assets/multidrm-video-segment.mp4 differ diff --git a/test/test/util/test_scheme.js b/test/test/util/test_scheme.js index ff1e41e907..91d4e504c1 100644 --- a/test/test/util/test_scheme.js +++ b/test/test/util/test_scheme.js @@ -453,47 +453,58 @@ const widevineDrmServers = { 'com.widevine.alpha': 'https://cwip-shaka-proxy.appspot.com/no_auth', }; +/** @type {string} */ +const axinomMultiDrmInitData = [ + 'AAAAXHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADwSEEBgqGWIeEJnnL+RrluuHnISEE', + 'BgqGWIeEJnnL+RrluuHnISEEBgqGWIeEJnnL+RrluuHnJI49yVmwYAAAImcHNzaAAAAACa', + 'BPB5mEBChquS5lvgiF+VAAACBgYCAAABAAEA/AE8AFcAUgBNAEgARQBBAEQARQBSACAAeA', + 'BtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8A', + 'cwBvAGYAdAAuAGMAbwBtAC8ARABSAE0ALwAyADAAMAA3AC8AMAAzAC8AUABsAGEAeQBSAG', + 'UAYQBkAHkASABlAGEAZABlAHIAIgAgAHYAZQByAHMAaQBvAG4APQAiADQALgAwAC4AMAAu', + 'ADAAIgA+ADwARABBAFQAQQA+ADwAUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAEUAWQ', + 'BMAEUATgA+ADEANgA8AC8ASwBFAFkATABFAE4APgA8AEEATABHAEkARAA+AEEARQBTAEMA', + 'VABSADwALwBBAEwARwBJAEQAPgA8AC8AUABSAE8AVABFAEMAVABJAE4ARgBPAD4APABLAE', + 'kARAA+AFoAYQBoAGcAUQBIAGkASQBaADAASwBjAHYANQBHAHUAVwA2ADQAZQBjAGcAPQA9', + 'ADwALwBLAEkARAA+ADwAQwBIAEUAQwBLAFMAVQBNAD4AeQB4AGwARwBsAGgAZgBEACsAYQ', + 'BjAD0APAAvAEMASABFAEMASwBTAFUATQA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgA', + 'RQBBAEQARQBSAD4A', +].join(''); + /** @type {AVMetadataType} */ const axinomMultiDrmVideoSegment = { - // Taken from Axinom's v6 test vector. + // Taken from Axinom's v10 test vectors. initSegmentUri: '/base/test/test/assets/multidrm-video-init.mp4', - mdhdOffset: 0x1d1, + mdhdOffset: 0x191, segmentUri: '/base/test/test/assets/multidrm-video-segment.mp4', - tfdtOffset: 0x78, + tfdtOffset: 0x88, segmentDuration: 4, mimeType: 'video/mp4', codecs: 'avc1.64001e', - initData: - 'AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuq' + - 'l0dNLWg==', + initData: axinomMultiDrmInitData, }; /** @type {AVMetadataType} */ const axinomMultiDrmAudioSegment = { - // Taken from Axinom's v6 test vector. + // Taken from Axinom's v10 test vectors. initSegmentUri: '/base/test/test/assets/multidrm-audio-init.mp4', - mdhdOffset: 0x192, + mdhdOffset: 0x18d, segmentUri: '/base/test/test/assets/multidrm-audio-segment.mp4', - tfdtOffset: 0x7c, + tfdtOffset: 0x88, segmentDuration: 4, mimeType: 'audio/mp4', codecs: 'mp4a.40.2', - initData: - 'AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuq' + - 'l0dNLWg==', + initData: axinomMultiDrmInitData, }; /** @type {!Object.} */ const axinomDrmServers = { // NOTE: These are not Axinom's actual servers. These are test servers for // Widevine and PlayReady that let us specify the known key IDs and keys for - // Axinom's v6 test vectors. Axinom's own servers started returning 403 - // errors for these older test vectors, and we were forced to switch to - // something stable and independent. + // Axinom's v10 test vectors. 'com.widevine.alpha': - 'https://cwip-shaka-proxy.appspot.com/specific_key?blodJidXR9eARuql0dNLWg=GX8m9XLIZNIzizrl0RTqnA', + 'https://cwip-shaka-proxy.appspot.com/specific_key?QGCoZYh4Qmecv5GuW64ecg=/DU0CDcxDMD7U96X4ipp4A', 'com.microsoft.playready': - 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:6e5a1d26-2757-47d7-8046-eaa5d1d34b5a,contentkey:GX8m9XLIZNIzizrl0RTqnA==,sl:150)', + 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:4060a865-8878-4267-9cbf-91ae5bae1e72,contentkey:/DU0CDcxDMD7U96X4ipp4A==,sl:150)', }; /** @type {TextMetadataType} */