diff --git a/lib/hls/hls_parser.js b/lib/hls/hls_parser.js index 90fac0d304..e78fce4bbf 100644 --- a/lib/hls/hls_parser.js +++ b/lib/hls/hls_parser.js @@ -4151,7 +4151,22 @@ shaka.hls.HlsParser = class { * @return {?shaka.extern.DrmInfo} * @private */ - static identityDrmParser_(drmTag) { + static identityDrmParser_(drmTag, mimeType) { + if (mimeType == 'video/mp2t') { + throw new shaka.util.Error( + shaka.util.Error.Severity.CRITICAL, + shaka.util.Error.Category.MANIFEST, + shaka.util.Error.Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED); + } + + if (shaka.util.Platform.isMediaKeysPolyfilled()) { + throw new shaka.util.Error( + shaka.util.Error.Severity.CRITICAL, + shaka.util.Error.Category.MANIFEST, + shaka.util.Error.Code + .HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED); + } + const method = drmTag.getRequiredAttrValue('METHOD'); const VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR']; if (!VALID_METHODS.includes(method)) { diff --git a/test/hls/hls_parser_unit.js b/test/hls/hls_parser_unit.js index 90a81da4ca..8047c07381 100644 --- a/test/hls/hls_parser_unit.js +++ b/test/hls/hls_parser_unit.js @@ -4074,6 +4074,34 @@ describe('HlsParser', () => { await verifyError(master, media, error, /* onCreateSegmentIndex= */ true); }); + it('if SAMPLE-AES encryption with MSE and mp2t content', async () => { + const master = [ + '#EXTM3U\n', + '#EXT-X-STREAM-INF:BANDWIDTH=200,CODECS="avc1",', + 'RESOLUTION=960x540,FRAME-RATE=60\n', + 'video\n', + ].join(''); + + const media = [ + '#EXTM3U\n', + '#EXT-X-TARGETDURATION:6\n', + '#EXT-X-PLAYLIST-TYPE:VOD\n', + '#EXT-X-KEY:METHOD=SAMPLE-AES,', + 'URI="fake",\n', + '#EXTINF:5,\n', + '#EXT-X-BYTERANGE:121090@616\n', + 'main.ts', + ].join(''); + + const error = new shaka.util.Error( + shaka.util.Error.Severity.CRITICAL, + shaka.util.Error.Category.MANIFEST, + Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED); + + await verifyError(master, media, error, /* onCreateSegmentIndex= */ true); + }); + + describe('if required tags are missing', () => { /** * @param {string} master