UNPKG

rx-player

Version:
82 lines (81 loc) 3.33 kB
/** * Copyright 2015 CANAL+ Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import assert from "../utils/assert"; import { ErrorTypes } from "./error_codes"; import errorMessage from "./error_message"; /** * Error linked to the media Playback. * * @class MediaError * @extends Error */ export default class MediaError extends Error { constructor(code, reason, context) { super(errorMessage(code, reason)); // @see https://stackoverflow.com/questions/41102060/typescript-extending-error-class Object.setPrototypeOf(this, MediaError.prototype); this.name = "MediaError"; this.type = ErrorTypes.MEDIA_ERROR; this._originalMessage = reason; this.code = code; this.fatal = false; if ((context === null || context === void 0 ? void 0 : context.tracks) !== undefined && (context === null || context === void 0 ? void 0 : context.tracks.length) > 0) { this.tracksInfo = context.tracks; } if ((context === null || context === void 0 ? void 0 : context.timeInfo) !== undefined) { this.timeInfo = context.timeInfo; } } /** * If that error has to be communicated through another thread, this method * allows to obtain its main defining properties in an Object so the Error can * be reconstructed in the other thread. * @returns {Object} */ serialize() { return { isSerializedError: true, name: this.name, code: this.code, reason: this._originalMessage, tracks: this.tracksInfo, timeInfo: this.timeInfo, }; } } /** * Re-create a `MediaError` from a serialized representation. * @param {Object} serializedMediaError * @returns {MediaError} */ export function deserializeMediaError(serializedMediaError) { if (serializedMediaError.code === "MEDIA_TIME_BEFORE_MANIFEST" || serializedMediaError.code === "MEDIA_TIME_AFTER_MANIFEST") { assert(serializedMediaError.timeInfo !== undefined, `The MediaError with code ${serializedMediaError.code} does not provide "timeinfo"`); return new MediaError(serializedMediaError.code, serializedMediaError.reason, { timeInfo: serializedMediaError.timeInfo, }); } if (serializedMediaError.code === "BUFFER_APPEND_ERROR" || serializedMediaError.code === "BUFFER_FULL_ERROR" || serializedMediaError.code === "NO_PLAYABLE_REPRESENTATION" || serializedMediaError.code === "MANIFEST_INCOMPATIBLE_CODECS_ERROR") { return new MediaError(serializedMediaError.code, serializedMediaError.reason, { tracks: serializedMediaError.tracks, }); } return new MediaError(serializedMediaError.code, serializedMediaError.reason); }