| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 | 
							- /*
 
-  * Copyright (C) 2016 Bilibili. All Rights Reserved.
 
-  *
 
-  * @author zheng qian <xqq@xqq.im>
 
-  *
 
-  * 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.
 
-  */
 
- // flv.js TypeScript definition file
 
- declare namespace FlvJs {
 
-     interface MediaSegment {
 
-         duration: number;
 
-         filesize?: number;
 
-         url: string;
 
-     }
 
-     interface MediaDataSource {
 
-         type: string;
 
-         isLive?: boolean;
 
-         cors?: boolean;
 
-         withCredentials?: boolean;
 
-         hasAudio?: boolean;
 
-         hasVideo?: boolean;
 
-         duration?: number;
 
-         filesize?: number;
 
-         url?: string;
 
-         segments?: MediaSegment[];
 
-     }
 
-     interface Config {
 
-         /**
 
-          * @desc Enable separated thread for transmuxing (unstable for now)
 
-          * @defaultvalue false
 
-          */
 
-         enableWorker?: boolean;
 
-         /**
 
-          * @desc Enable IO stash buffer. Set to false if you need realtime (minimal latency) for live stream
 
-          *          playback, but may stalled if there's network jittering.
 
-          * @defaultvalue true
 
-          */
 
-         enableStashBuffer?: boolean;
 
-         /**
 
-          * @desc Indicates IO stash buffer initial size. Default is `384KB`. Indicate a suitable size can
 
-          *          improve video load/seek time.
 
-          */
 
-         stashInitialSize?: number;
 
-         /**
 
-          * @desc Same to `isLive` in **MediaDataSource**, ignored if has been set in MediaDataSource structure.
 
-          * @defaultvalue false
 
-          */
 
-         isLive?: boolean;
 
-         /**
 
-          * @desc Abort the http connection if there's enough data for playback.
 
-          * @defaultvalue true
 
-          */
 
-         lazyLoad?: boolean;
 
-         /**
 
-          * @desc Indicates how many seconds of data to be kept for `lazyLoad`.
 
-          * @defaultvalue 3 * 60
 
-          */
 
-         lazyLoadMaxDuration?: number;
 
-         /**
 
-          * @desc Indicates the `lazyLoad` recover time boundary in seconds.
 
-          * @defaultvalue 30
 
-          */
 
-         lazyLoadRecoverDuration?: number;
 
-         /**
 
-          * @desc Do load after MediaSource `sourceopen` event triggered. On Chrome, tabs which
 
-          *          be opened in background may not trigger `sourceopen` event until switched to that tab.
 
-          * @defaultvalue true
 
-          */
 
-         deferLoadAfterSourceOpen?: boolean;
 
-         /**
 
-          * @desc Do auto cleanup for SourceBuffer
 
-          * @defaultvalue false (from docs)
 
-          */
 
-         autoCleanupSourceBuffer?: boolean;
 
-         /**
 
-          * @desc When backward buffer duration exceeded this value (in seconds), do auto cleanup for SourceBuffer
 
-          * @defaultvalue 3 * 60
 
-          */
 
-         autoCleanupMaxBackwardDuration?: number;
 
-         /**
 
-          * @desc Indicates the duration in seconds to reserve for backward buffer when doing auto cleanup.
 
-          * @defaultvalue 2 * 60
 
-          */
 
-         autoCleanupMinBackwardDuration?: number;
 
-         /**
 
-          * @defaultvalue 600
 
-          */
 
-         statisticsInfoReportInterval?: number;
 
-         /**
 
-          * @desc Fill silent audio frames to avoid a/v unsync when detect large audio timestamp gap.
 
-          * @defaultvalue true
 
-          */
 
-         fixAudioTimestampGap?: boolean;
 
-         /**
 
-          * @desc Accurate seek to any frame, not limited to video IDR frame, but may a bit slower.
 
-          *          Available on Chrome > 50, FireFox and Safari.
 
-          * @defaultvalue false
 
-          */
 
-         accurateSeek?: boolean;
 
-         /**
 
-          * @desc 'range' use range request to seek, or 'param' add params into url to indicate request range.
 
-          * @defaultvalue 'range'
 
-          */
 
-         seekType?: 'range' | 'param' | 'custom';
 
-         /**
 
-          * @desc Indicates seek start parameter name for seekType = 'param'
 
-          * @defaultvalue 'bstart'
 
-          */
 
-         seekParamStart?: string;
 
-         /**
 
-          * @desc Indicates seek end parameter name for seekType = 'param'
 
-          * @defaultvalue 'bend'
 
-          */
 
-         seekParamEnd?: string;
 
-         /**
 
-          * @desc Send Range: bytes=0- for first time load if use Range seek
 
-          * @defaultvalue false
 
-          */
 
-         rangeLoadZeroStart?: boolean;
 
-         /**
 
-          * @desc Indicates a custom seek handler
 
-          * @desc Should implement `SeekHandler` interface
 
-          */
 
-         customSeekHandler?: CustomSeekHandlerConstructor;
 
-         /**
 
-          * @desc Reuse 301/302 redirected url for subsequence request like seek, reconnect, etc.
 
-          * @defaultvalue false
 
-          */
 
-         reuseRedirectedURL?: boolean;
 
-         /**
 
-          * @desc Indicates the Referrer Policy when using FetchStreamLoader
 
-          * @defaultvalue 'no-referrer-when-downgrade' (from docs)
 
-          */
 
-         referrerPolicy?: ReferrerPolicy;
 
-         /**
 
-          * @desc Indicates additional headers that will be added to request
 
-          */
 
-         headers?: {
 
-             [k: string]: string
 
-         }
 
-         /**
 
-          * @desc Should implement `BaseLoader` interface
 
-          */
 
-         customLoader?: CustomLoaderConstructor;
 
-     }
 
-     interface CustomSeekHandlerConstructor {
 
-         new(): SeekHandler;
 
-     }
 
-     interface SeekHandler {
 
-         getConfig(sourceURL: string, range: Range): SeekConfig;
 
-         removeURLParameters(url: string): string;
 
-     }
 
-     interface SeekConfig {
 
-         url: string;
 
-         headers: Headers | object;
 
-     }
 
-     interface BaseLoaderConstructor {
 
-         new(typeName: string): BaseLoader;
 
-     }
 
-     interface BaseLoader {
 
-         _status: number;
 
-         _needStash: boolean;
 
-         destroy(): void;
 
-         isWorking(): boolean;
 
-         readonly type: string;
 
-         readonly status: number;
 
-         readonly needStashBuffer: boolean;
 
-         onContentLengthKnown: (contentLength: number) => void;
 
-         onURLRedirect: (redirectedURL: string) => void;
 
-         onDataArrival: (chunk: ArrayBuffer, byteStart: number, receivedLength?: number) => void;
 
-         onError: (errorType: LoaderErrors, errorInfo: LoaderErrorMessage) => void;
 
-         onComplete: (rangeFrom: number, rangeTo: number) => void;
 
-         open(dataSource: MediaSegment, range: Range): void;
 
-         abort(): void;
 
-     }
 
-     interface CustomLoaderConstructor {
 
-         new(seekHandler: SeekHandler, config: Config): BaseLoader;
 
-     }
 
-     interface Range {
 
-         from: number;
 
-         to: number;
 
-     }
 
-     interface LoaderStatus {
 
-         readonly kIdle: 0;
 
-         readonly kConnecting: 1;
 
-         readonly kBuffering: 2;
 
-         readonly kError: 3;
 
-         readonly kComplete: 4;
 
-     }
 
-     interface LoaderErrors {
 
-         readonly OK: 'OK';
 
-         readonly EXCEPTION: 'Exception';
 
-         readonly HTTP_STATUS_CODE_INVALID: 'HttpStatusCodeInvalid';
 
-         readonly CONNECTING_TIMEOUT: 'ConnectingTimeout';
 
-         readonly EARLY_EOF: 'EarlyEof';
 
-         readonly UNRECOVERABLE_EARLY_EOF: 'UnrecoverableEarlyEof';
 
-     }
 
-     interface LoaderErrorMessage {
 
-         code: number;
 
-         msg: string;
 
-     }
 
-     interface FeatureList {
 
-         mseFlvPlayback: boolean;
 
-         mseLiveFlvPlayback: boolean;
 
-         networkStreamIO: boolean;
 
-         networkLoaderName: string;
 
-         nativeMP4H264Playback: boolean;
 
-         nativeWebmVP8Playback: boolean;
 
-         nativeWebmVP9Playback: boolean;
 
-     }
 
-     interface PlayerConstructor {
 
-         new (mediaDataSource: MediaDataSource, config?: Config): Player;
 
-     }
 
-     interface Player {
 
-         destroy(): void;
 
-         on(event: string, listener: (...args: any[]) => void): void;
 
-         off(event: string, listener: (...args: any[]) => void): void;
 
-         attachMediaElement(mediaElement: HTMLMediaElement): void;
 
-         detachMediaElement(): void;
 
-         load(): void;
 
-         unload(): void;
 
-         play(): Promise<void> | void;
 
-         pause(): void;
 
-         type: string;
 
-         buffered: TimeRanges;
 
-         duration: number;
 
-         volume: number;
 
-         muted: boolean;
 
-         currentTime: number;
 
-         /**
 
-          * @deprecated FlvPlayer/NativePlayer have its own `mediaInfo` field.
 
-          * @desc Keep it for backwards compatibility
 
-          * @since 1.4
 
-          */
 
-         mediaInfo: NativePlayerMediaInfo | FlvPlayerMediaInfo;
 
-         /**
 
-          * @deprecated FlvPlayer/NativePlayer have its own `statisticsInfo` field.
 
-          * @desc Keep it for backwards compatibility
 
-          * @since 1.4
 
-          */
 
-         statisticsInfo: NativePlayerStatisticsInfo | FlvPlayerStatisticsInfo;
 
-     }
 
-     interface NativePlayerStatisticsInfo {
 
-         playerType: 'NativePlayer';
 
-         url: string;
 
-         decodedFrames?: number;
 
-         droppedFrames?: number;
 
-     }
 
-     interface FlvPlayerReportStatisticsInfo {
 
-         url: string;
 
-         hasRedirect: boolean;
 
-         redirectedURL?: string;
 
-         speed: number; // KB/s
 
-         loaderType: string;
 
-         currentSegmentIndex: number;
 
-         totalSegmentCount: number;
 
-     }
 
-     interface FlvPlayerStatisticsInfo extends Partial<FlvPlayerReportStatisticsInfo> {
 
-         playerType: 'FlvPlayer';
 
-         decodedFrames?: number;
 
-         droppedFrames?: number;
 
-     }
 
-     interface NativePlayerMediaInfo {
 
-         mimeType: string;
 
-         duration?: number;
 
-         width?: number;
 
-         height?: number;
 
-     }
 
-     interface FlvPlayerMediaInfo extends NativePlayerMediaInfo {
 
-         audioCodec?: string;
 
-         videoCodec?: string;
 
-         audioDataRate?: number;
 
-         videoDataRate?: number;
 
-         hasAudio?: boolean;
 
-         hasVideo?: boolean;
 
-         chromaFormat?: string;
 
-         fps?: number;
 
-         [k: string]: any;
 
-     }
 
-     interface FlvPlayer extends Player {
 
-         mediaInfo: FlvPlayerMediaInfo;
 
-         statisticsInfo: FlvPlayerStatisticsInfo;
 
-     }
 
-     interface NativePlayer extends Player {
 
-         mediaInfo: NativePlayerMediaInfo;
 
-         statisticsInfo: NativePlayerStatisticsInfo;
 
-     }
 
-     interface LoggingControlConfig {
 
-         forceGlobalTag: boolean;
 
-         globalTag: string;
 
-         enableAll: boolean;
 
-         enableDebug: boolean;
 
-         enableVerbose: boolean;
 
-         enableInfo: boolean;
 
-         enableWarn: boolean;
 
-         enableError: boolean;
 
-     }
 
-     interface LoggingControl extends LoggingControlConfig {
 
-         getConfig(): LoggingControlConfig;
 
-         applyConfig(config: Partial<LoggingControlConfig>): void;
 
-         addLogListener(listener: (...args: any[]) => void): void;
 
-         removeLogListener(listener: (...args: any[]) => void): void;
 
-     }
 
-     interface Events {
 
-         ERROR: string;
 
-         LOADING_COMPLETE: string;
 
-         RECOVERED_EARLY_EOF: string;
 
-         MEDIA_INFO: string;
 
-         METADATA_ARRIVED: string;
 
-         SCRIPTDATA_ARRIVED: string;
 
-         STATISTICS_INFO: string;
 
-     }
 
-     interface ErrorTypes {
 
-         NETWORK_ERROR: string;
 
-         MEDIA_ERROR: string;
 
-         OTHER_ERROR: string;
 
-     }
 
-     interface ErrorDetails {
 
-         NETWORK_EXCEPTION: string;
 
-         NETWORK_STATUS_CODE_INVALID: string;
 
-         NETWORK_TIMEOUT: string;
 
-         NETWORK_UNRECOVERABLE_EARLY_EOF: string;
 
-         MEDIA_MSE_ERROR: string;
 
-         MEDIA_FORMAT_ERROR: string;
 
-         MEDIA_FORMAT_UNSUPPORTED: string;
 
-         MEDIA_CODEC_UNSUPPORTED: string;
 
-     }
 
- }
 
- declare var FlvJs: {
 
-     createPlayer(mediaDataSource: FlvJs.MediaDataSource, config?: FlvJs.Config): FlvJs.Player;
 
-     isSupported(): boolean;
 
-     getFeatureList(): FlvJs.FeatureList;
 
-     /**
 
-      * @deprecated Use `FlvJs.BaseLoaderConstructor` instead.
 
-      *              Because it's not available on `flvjs` variable.
 
-      * @desc implement interface `BaseLoader`
 
-      * @since 1.4
 
-      */
 
-     BaseLoader: FlvJs.BaseLoaderConstructor;
 
-     /**
 
-      * @deprecated Use `FlvJs.BaseLoaderConstructor` instead.
 
-      *              Because it's not available on `flvjs` variable.
 
-      * @since 1.4
 
-      */
 
-     LoaderStatus: FlvJs.LoaderStatus;
 
-     /**
 
-      * @deprecated Use `FlvJs.BaseLoaderConstructor` instead.
 
-      *              Because it's not available on `flvjs` variable.
 
-      * @since 1.4
 
-      */
 
-     LoaderErrors: FlvJs.LoaderErrors;
 
-     readonly version: string;
 
-     readonly Events: Readonly<FlvJs.Events>;
 
-     readonly ErrorTypes: Readonly<FlvJs.ErrorTypes>;
 
-     readonly ErrorDetails: Readonly<FlvJs.ErrorDetails>;
 
-     readonly FlvPlayer: FlvJs.PlayerConstructor;
 
-     readonly NativePlayer: FlvJs.PlayerConstructor;
 
-     readonly LoggingControl: FlvJs.LoggingControl;
 
- };
 
- export default FlvJs;
 
 
  |