Skip to content

Commit 9aeacf9

Browse files
authored
fix: support Widevine and Playready Hardware DRM. (#111)
1 parent e1d34a5 commit 9aeacf9

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

api-extractor/report/hls.js.api.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,8 @@ export enum Events {
15031503
// (undocumented)
15041504
KEY_LOADING = "hlsKeyLoading",
15051505
// (undocumented)
1506+
KEY_STATUSES_CHANGED = "hlsKeyStatusesChanged",
1507+
// (undocumented)
15061508
LEVEL_LOADED = "hlsLevelLoaded",
15071509
// (undocumented)
15081510
LEVEL_LOADING = "hlsLevelLoading",
@@ -2401,6 +2403,8 @@ export interface HlsListeners {
24012403
// (undocumented)
24022404
[Events.KEY_LOADING]: (event: Events.KEY_LOADING, data: KeyLoadingData) => void;
24032405
// (undocumented)
2406+
[Events.KEY_STATUSES_CHANGED]: (event: Events.KEY_STATUSES_CHANGED, data: KeyStatusesChangedData) => void;
2407+
// (undocumented)
24042408
[Events.LEVEL_LOADED]: (event: Events.LEVEL_LOADED, data: LevelLoadedData) => void;
24052409
// (undocumented)
24062410
[Events.LEVEL_LOADING]: (event: Events.LEVEL_LOADING, data: LevelLoadingData) => void;
@@ -3036,6 +3040,16 @@ export interface KeyLoadingData {
30363040
frag: Fragment;
30373041
}
30383042

3043+
// Warning: (ae-missing-release-tag) "KeyStatusesChangedData" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
3044+
//
3045+
// @public (undocumented)
3046+
export interface KeyStatusesChangedData {
3047+
// (undocumented)
3048+
keyStatuses: MediaKeyStatusMap;
3049+
// (undocumented)
3050+
keySystem: string;
3051+
}
3052+
30393053
// Warning: (ae-missing-release-tag) "KeySystemFormats" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
30403054
//
30413055
// @public (undocumented)

src/controller/eme-controller.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,11 @@ class EMEController extends Logger implements ComponentAPI {
680680
this.warn(`${context.keySystem} expired for key ${keyId}`);
681681
this.renewKeySession(context);
682682
}
683+
684+
this.hls.trigger(Events.KEY_STATUSES_CHANGED, {
685+
keySystem: context.decryptdata.keyFormat,
686+
keyStatuses: keySession.keyStatuses,
687+
});
683688
});
684689

685690
addEventListener(context.mediaKeysSession, 'message', onmessage);
@@ -708,16 +713,9 @@ class EMEController extends Logger implements ComponentAPI {
708713
),
709714
);
710715
} else if (keyStatus === 'internal-error') {
711-
reject(
712-
new EMEKeyError(
713-
{
714-
type: ErrorTypes.KEY_SYSTEM_ERROR,
715-
details: ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR,
716-
fatal: true,
717-
},
718-
`key status changed to "${keyStatus}"`,
719-
),
720-
);
716+
// resolve for Hardware DRM
717+
this.warn('keyStatus: internal-error');
718+
resolve();
721719
} else if (keyStatus === 'expired') {
722720
reject(new Error('key expired while generating request'));
723721
} else {

src/events.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import type {
4040
InterstitialsUpdatedData,
4141
KeyLoadedData,
4242
KeyLoadingData,
43+
KeyStatusesChangedData,
4344
LevelLoadedData,
4445
LevelLoadingData,
4546
LevelPTSUpdatedData,
@@ -220,6 +221,8 @@ export enum Events {
220221
PLAYOUT_LIMIT_REACHED = 'hlsPlayoutLimitReached',
221222
// Event DateRange cue "enter" event dispatched
222223
EVENT_CUE_ENTER = 'hlsEventCueEnter',
224+
// HD DRM
225+
KEY_STATUSES_CHANGED = 'hlsKeyStatusesChanged',
223226
}
224227

225228
/**
@@ -496,6 +499,10 @@ export interface HlsListeners {
496499
data: {},
497500
) => void;
498501
[Events.EVENT_CUE_ENTER]: (event: Events.EVENT_CUE_ENTER, data: {}) => void;
502+
[Events.KEY_STATUSES_CHANGED]: (
503+
event: Events.KEY_STATUSES_CHANGED,
504+
data: KeyStatusesChangedData,
505+
) => void;
499506
}
500507
export interface HlsEventEmitter {
501508
on<E extends keyof HlsListeners, Context = undefined>(

src/hls.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,6 +1417,7 @@ export type {
14171417
BufferFlushingData,
14181418
CuesParsedData,
14191419
ErrorData,
1420+
KeyStatusesChangedData,
14201421
FPSDropData,
14211422
FPSDropLevelCappingData,
14221423
FragBufferedData,

src/types/events.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ export interface LevelPTSUpdatedData {
252252
end: number;
253253
}
254254

255+
export interface KeyStatusesChangedData {
256+
keySystem: string;
257+
keyStatuses: MediaKeyStatusMap;
258+
}
259+
255260
export interface AudioTrackSwitchingData extends MediaPlaylist {}
256261

257262
export interface AudioTrackSwitchedData extends MediaPlaylist {}

0 commit comments

Comments
 (0)