/**
 * 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 { Adaptation } from "../manifest";
import { IAudioTrack, ITextTrack, IVideoTrack } from "../public_types";
import { IMediaErrorCode } from "./error_codes";
interface IAudioTrackMediaErrorContext {
    type: "audio";
    track: IAudioTrack;
}
interface IVideoTrackMediaErrorContext {
    type: "video";
    track: IVideoTrack;
}
interface ITextTrackMediaErrorContext {
    type: "text";
    track: ITextTrack;
}
export type IMediaErrorTrackContext = IAudioTrackMediaErrorContext | IVideoTrackMediaErrorContext | ITextTrackMediaErrorContext;
type ICodeWithAdaptationType = "BUFFER_APPEND_ERROR" | "BUFFER_FULL_ERROR" | "NO_PLAYABLE_REPRESENTATION" | "MANIFEST_INCOMPATIBLE_CODECS_ERROR";
/**
 * Error linked to the media Playback.
 *
 * @class MediaError
 * @extends Error
 */
export default class MediaError extends Error {
    readonly name: "MediaError";
    readonly type: "MEDIA_ERROR";
    readonly message: string;
    readonly code: IMediaErrorCode;
    readonly trackInfo: IMediaErrorTrackContext | undefined;
    fatal: boolean;
    /**
     * @param {string} code
     * @param {string} reason
     * @param {Object|undefined} [context]
     */
    constructor(code: ICodeWithAdaptationType, reason: string, context: {
        adaptation: Adaptation;
    });
    constructor(code: Exclude<IMediaErrorCode, ICodeWithAdaptationType>, reason: string);
}
export {};
