@@ -14,7 +14,7 @@ import ChunkCache from './chunk-cache';
1414import { appendUint8Array } from '../utils/mp4-tools' ;
1515
1616import { logger } from '../utils/logger' ;
17- import { HlsConfig } from '../config' ;
17+ import { HlsConfig , EMEControllerConfig , KeyidValue } from '../config' ;
1818
1919let now ;
2020// performance.now() not available on WebWorker, at least on Safari Desktop
@@ -50,12 +50,18 @@ export default class Transmuxer {
5050 private transmuxConfig ! : TransmuxConfig ;
5151 private currentTransmuxState ! : TransmuxState ;
5252 private cache : ChunkCache = new ChunkCache ( ) ;
53+ private emeEnabled : boolean ;
54+ private clearkeyServerUrl ?: string ;
55+ private clearkeyPair : KeyidValue | null ;
5356
5457 constructor ( observer : HlsEventEmitter , typeSupported , config : HlsConfig , vendor ) {
5558 this . observer = observer ;
5659 this . typeSupported = typeSupported ;
5760 this . config = config ;
5861 this . vendor = vendor ;
62+ this . emeEnabled = this . config . emeEnabled ;
63+ this . clearkeyServerUrl = this . config . clearkeyServerUrl ;
64+ this . clearkeyPair = this . config . clearkeyPair ;
5965 }
6066
6167 configure ( transmuxConfig : TransmuxConfig , state : TransmuxState ) {
@@ -238,13 +244,19 @@ export default class Transmuxer {
238244 }
239245
240246 private transmux ( data : Uint8Array , decryptData : Uint8Array , encryptionType : string | null , timeOffset : number , accurateTimeOffset : boolean , chunkMeta : ChunkMetadata ) : TransmuxerResult | Promise < TransmuxerResult > {
241- // let result: TransmuxerResult | Promise<TransmuxerResult>;
242- // if (encryptionType === 'SAMPLE-AES') {
243- // result = this.transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta);
244- // } else {
245- // result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);
246- // }
247- return this . transmuxUnencrypted ( data , timeOffset , accurateTimeOffset , chunkMeta ) ;
247+ let result : TransmuxerResult | Promise < TransmuxerResult > ;
248+ if ( encryptionType === 'SAMPLE-AES' ) {
249+ // May Get the URI from the manifest
250+ logger . log ( 'Check if the clearkeyPair or clearkeyServerUrl is specified to play SAMPLE-AES cbcs fMP4' ) ;
251+ if ( this . emeEnabled && ( this . clearkeyPair || this . clearkeyServerUrl ) ) {
252+ result = this . transmuxUnencrypted ( data , timeOffset , accurateTimeOffset , chunkMeta ) ;
253+ } else {
254+ result = this . transmuxSampleAes ( data , decryptData , timeOffset , accurateTimeOffset , chunkMeta ) ;
255+ }
256+ } else {
257+ result = this . transmuxUnencrypted ( data , timeOffset , accurateTimeOffset , chunkMeta ) ;
258+ }
259+ return result ;
248260 }
249261
250262 private transmuxUnencrypted ( data : Uint8Array , timeOffset : number , accurateTimeOffset : boolean , chunkMeta : ChunkMetadata ) {
@@ -256,14 +268,14 @@ export default class Transmuxer {
256268 }
257269
258270 // TODO: Handle flush with Sample-AES
259- // private transmuxSampleAes (data: Uint8Array, decryptData: any, timeOffset: number, accurateTimeOffset: boolean, chunkMeta: ChunkMetadata) : Promise<TransmuxerResult> {
260- // return this.demuxer!.demuxSampleAes(data, decryptData, timeOffset)
261- // .then(demuxResult => ({
262- // remuxResult: this.remuxer!.remux(demuxResult.audioTrack, demuxResult.avcTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset),
263- // chunkMeta
264- // })
265- // );
266- // }
271+ private transmuxSampleAes ( data : Uint8Array , decryptData : any , timeOffset : number , accurateTimeOffset : boolean , chunkMeta : ChunkMetadata ) : Promise < TransmuxerResult > {
272+ return this . demuxer ! . demuxSampleAes ( data , decryptData , timeOffset )
273+ . then ( demuxResult => ( {
274+ remuxResult : this . remuxer ! . remux ( demuxResult . audioTrack , demuxResult . avcTrack , demuxResult . id3Track , demuxResult . textTrack , timeOffset , accurateTimeOffset ) ,
275+ chunkMeta
276+ } )
277+ ) ;
278+ }
267279
268280 private configureTransmuxer ( data : Uint8Array , transmuxConfig : TransmuxConfig ) {
269281 const { config, observer, typeSupported, vendor } = this ;
0 commit comments