mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
import { MediaError } from "../../core/media-error.js";
|
|
import Hls from "hls.js";
|
|
//#region src/dom/hls-js/errors.ts
|
|
const hlsErrorTypeToCode = {
|
|
[Hls.ErrorTypes.NETWORK_ERROR]: MediaError.MEDIA_ERR_NETWORK,
|
|
[Hls.ErrorTypes.MEDIA_ERROR]: MediaError.MEDIA_ERR_DECODE,
|
|
[Hls.ErrorTypes.KEY_SYSTEM_ERROR]: MediaError.MEDIA_ERR_ENCRYPTED,
|
|
[Hls.ErrorTypes.MUX_ERROR]: MediaError.MEDIA_ERR_DECODE,
|
|
[Hls.ErrorTypes.OTHER_ERROR]: MediaError.MEDIA_ERR_CUSTOM
|
|
};
|
|
function HlsJsMediaErrorsMixin(BaseClass) {
|
|
class HlsJsMediaErrors extends BaseClass {
|
|
#disconnect = null;
|
|
#error = null;
|
|
constructor(...args) {
|
|
super(...args);
|
|
this.engine?.on(Hls.Events.MANIFEST_LOADING, () => this.#init());
|
|
this.engine?.on(Hls.Events.MEDIA_ATTACHED, () => this.#init());
|
|
this.engine?.on(Hls.Events.MEDIA_DETACHED, () => this.#destroy());
|
|
this.engine?.on(Hls.Events.DESTROYING, () => this.#destroy());
|
|
}
|
|
get error() {
|
|
return this.#error;
|
|
}
|
|
#destroy() {
|
|
this.#disconnect?.abort();
|
|
this.#disconnect = null;
|
|
}
|
|
#init() {
|
|
this.#disconnect?.abort();
|
|
this.#disconnect = new AbortController();
|
|
const { engine, target } = this;
|
|
if (!engine || !target) return;
|
|
const onError = (_event, data) => {
|
|
if (!data.fatal) return;
|
|
const code = hlsErrorTypeToCode[data.type] ?? MediaError.MEDIA_ERR_CUSTOM;
|
|
const error = new MediaError(data.error?.message, code, true, data.details);
|
|
error.data = data;
|
|
this.#error = error;
|
|
const event = new ErrorEvent("error", {
|
|
error,
|
|
message: error.message
|
|
});
|
|
this.dispatchEvent(event);
|
|
};
|
|
engine.on(Hls.Events.ERROR, onError);
|
|
this.#disconnect.signal.addEventListener("abort", () => {
|
|
engine.off(Hls.Events.ERROR, onError);
|
|
this.#error = null;
|
|
}, { once: true });
|
|
}
|
|
}
|
|
return HlsJsMediaErrors;
|
|
}
|
|
//#endregion
|
|
export { HlsJsMediaErrorsMixin };
|
|
|
|
//# sourceMappingURL=errors.js.map
|