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;
|