Skip to content

Commit

Permalink
Add type safety to worker message handler and replace deprecated vend…
Browse files Browse the repository at this point in the history
…or field with empty string

Related to #6445
  • Loading branch information
robwalch committed May 31, 2024
1 parent b496884 commit 1e4e605
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 17 deletions.
42 changes: 26 additions & 16 deletions src/demux/transmuxer-interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { Fragment, Part } from '../loader/fragment';
import { getM2TSSupportedAudioTypes } from '../utils/codecs';
import type { ChunkMetadata, TransmuxerResult } from '../types/transmuxer';
import type Hls from '../hls';
import type { HlsEventEmitter } from '../events';
import type { HlsEventEmitter, HlsListeners } from '../events';
import type { PlaylistLevelType } from '../types/loader';
import type { RationalTimestamp } from '../utils/timescale-conversion';

Expand All @@ -30,7 +30,9 @@ export default class TransmuxerInterface {
private part: Part | null = null;
private useWorker: boolean;
private workerContext: WorkerContext | null = null;
private onwmsg?: Function;
private onwmsg?: (
event: MessageEvent<{ event: string; data?: any } | null>,
) => void;
private transmuxer: Transmuxer | null = null;
private onTransmuxComplete: (transmuxResult: TransmuxerResult) => void;
private onFlush: (chunkMeta: ChunkMetadata) => void;
Expand Down Expand Up @@ -67,9 +69,6 @@ export default class TransmuxerInterface {
config.preferManagedMediaSource,
);

// navigator.vendor is not always available in Web Worker
// refer to https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/navigator
const vendor = navigator.vendor;
if (this.useWorker && typeof Worker !== 'undefined') {
const canCreateWorker = config.workerPath || hasUMDWorker();
if (canCreateWorker) {
Expand All @@ -81,9 +80,9 @@ export default class TransmuxerInterface {
logger.log(`injecting Web Worker for "${id}"`);
this.workerContext = injectWorker();
}
this.onwmsg = (ev: any) => this.onWorkerMessage(ev);
this.onwmsg = (event) => this.onWorkerMessage(event);
const { worker } = this.workerContext;
worker.addEventListener('message', this.onwmsg as any);
worker.addEventListener('message', this.onwmsg);
worker.onerror = (event) => {
const error = new Error(
`${event.message} (${event.filename}:${event.lineno})`,
Expand All @@ -101,7 +100,7 @@ export default class TransmuxerInterface {
worker.postMessage({
cmd: 'init',
typeSupported: m2tsTypeSupported,
vendor: vendor,
vendor: '',
id: id,
config: JSON.stringify(config),
});
Expand All @@ -116,7 +115,7 @@ export default class TransmuxerInterface {
this.observer,
m2tsTypeSupported,
config,
vendor,
'',
id,
);
}
Expand All @@ -128,12 +127,12 @@ export default class TransmuxerInterface {
this.observer,
m2tsTypeSupported,
config,
vendor,
'',
id,
);
}

resetWorker(): void {
resetWorker() {
if (this.workerContext) {
const { worker, objectURL } = this.workerContext;
if (objectURL) {
Expand All @@ -147,7 +146,7 @@ export default class TransmuxerInterface {
}
}

destroy(): void {
destroy() {
if (this.workerContext) {
this.resetWorker();
this.onwmsg = undefined;
Expand Down Expand Up @@ -180,7 +179,7 @@ export default class TransmuxerInterface {
accurateTimeOffset: boolean,
chunkMeta: ChunkMetadata,
defaultInitPTS?: RationalTimestamp,
): void {
) {
chunkMeta.transmuxing.start = self.performance.now();
const { transmuxer } = this;
const timeOffset = part ? part.start : frag.start;
Expand Down Expand Up @@ -347,9 +346,20 @@ export default class TransmuxerInterface {
this.onFlush(chunkMeta);
}

private onWorkerMessage(ev: any): void {
const data = ev.data;
private onWorkerMessage(
event: MessageEvent<{ event: string; data?: any } | null>,
) {
const data = event.data;
if (!data?.event) {
logger.warn(
`worker message received with no ${data ? 'event name' : 'data'}`,
);
return;
}
const hls = this.hls;
if (!this.hls) {
return;
}
switch (data.event) {
case 'init': {
const objectURL = this.workerContext?.objectURL;
Expand Down Expand Up @@ -381,7 +391,7 @@ export default class TransmuxerInterface {
data.data = data.data || {};
data.data.frag = this.frag;
data.data.id = this.id;
hls.trigger(data.event, data.data);
hls.trigger(data.event as keyof HlsListeners, data.data);
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/demux/transmuxer-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function startWorker(self) {
observer,
data.typeSupported,
config,
data.vendor,
'',
data.id,
);
const logger = enableLogs(config.debug, data.id);
Expand Down

0 comments on commit 1e4e605

Please sign in to comment.