@give-tech/ec-player 0.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoder/H264Decoder.d.ts +14 -0
- package/dist/decoder/H264Decoder.d.ts.map +1 -0
- package/dist/decoder/HEVCDecoder.d.ts +21 -0
- package/dist/decoder/HEVCDecoder.d.ts.map +1 -0
- package/dist/decoder/WASMLoader.d.ts +10 -0
- package/dist/decoder/WASMLoader.d.ts.map +1 -0
- package/dist/decoder/index.d.ts +4 -0
- package/dist/decoder/index.d.ts.map +1 -0
- package/dist/demuxer/DemuxerFactory.d.ts +24 -0
- package/dist/demuxer/DemuxerFactory.d.ts.map +1 -0
- package/dist/demuxer/FLVDemuxer.d.ts +132 -0
- package/dist/demuxer/FLVDemuxer.d.ts.map +1 -0
- package/dist/demuxer/FormatDetector.d.ts +21 -0
- package/dist/demuxer/FormatDetector.d.ts.map +1 -0
- package/dist/demuxer/PESExtractor.d.ts +11 -0
- package/dist/demuxer/PESExtractor.d.ts.map +1 -0
- package/dist/demuxer/TSDemuxer.d.ts +17 -0
- package/dist/demuxer/TSDemuxer.d.ts.map +1 -0
- package/dist/demuxer/fMP4Demuxer.d.ts +131 -0
- package/dist/demuxer/fMP4Demuxer.d.ts.map +1 -0
- package/dist/demuxer/index.d.ts +7 -0
- package/dist/demuxer/index.d.ts.map +1 -0
- package/dist/env/EnvDetector.d.ts +167 -0
- package/dist/env/EnvDetector.d.ts.map +1 -0
- package/dist/env/index.d.ts +5 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3869 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/NALParser.d.ts +21 -0
- package/dist/parser/NALParser.d.ts.map +1 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/player/BasePlayer.d.ts +118 -0
- package/dist/player/BasePlayer.d.ts.map +1 -0
- package/dist/player/EcPlayerCore.d.ts +77 -0
- package/dist/player/EcPlayerCore.d.ts.map +1 -0
- package/dist/player/FLVPlayer.d.ts +134 -0
- package/dist/player/FLVPlayer.d.ts.map +1 -0
- package/dist/player/HLSPlayer.d.ts +99 -0
- package/dist/player/HLSPlayer.d.ts.map +1 -0
- package/dist/player/index.d.ts +3 -0
- package/dist/player/index.d.ts.map +1 -0
- package/dist/prefetch/BasePrefetcher.d.ts +99 -0
- package/dist/prefetch/BasePrefetcher.d.ts.map +1 -0
- package/dist/prefetch/SegmentPrefetcher.d.ts +116 -0
- package/dist/prefetch/SegmentPrefetcher.d.ts.map +1 -0
- package/dist/prefetch/StreamPrefetcher.d.ts +113 -0
- package/dist/prefetch/StreamPrefetcher.d.ts.map +1 -0
- package/dist/prefetch/index.d.ts +13 -0
- package/dist/prefetch/index.d.ts.map +1 -0
- package/dist/prefetch/types.d.ts +93 -0
- package/dist/prefetch/types.d.ts.map +1 -0
- package/dist/renderer/Canvas2DRenderer.d.ts +16 -0
- package/dist/renderer/Canvas2DRenderer.d.ts.map +1 -0
- package/dist/renderer/index.d.ts +2 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/package.json +48 -0
- package/wasm/decoder-simd.js +19 -0
- package/wasm/decoder-simd.wasm +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NALParser.d.ts","sourceRoot":"","sources":["../../src/parser/NALParser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGvC,eAAO,MAAM,SAAS;;;;;;;CAOZ,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAE9D,qBAAa,SAAS;IACpB;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE;CAkDnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 播放器基类
|
|
3
|
+
*
|
|
4
|
+
* 提供播放器的公共功能:
|
|
5
|
+
* - 解码器初始化
|
|
6
|
+
* - 渲染循环
|
|
7
|
+
* - 状态管理
|
|
8
|
+
* - 工具方法
|
|
9
|
+
*/
|
|
10
|
+
import { WASMLoader } from '../decoder/WASMLoader';
|
|
11
|
+
import { H264Decoder } from '../decoder/H264Decoder';
|
|
12
|
+
import { Canvas2DRenderer } from '../renderer/Canvas2DRenderer';
|
|
13
|
+
import type { PlayerState, PlayerCallbacks, VideoFrame } from '../types';
|
|
14
|
+
export interface PlayerConfig {
|
|
15
|
+
/** WASM 文件路径 */
|
|
16
|
+
wasmPath?: string;
|
|
17
|
+
/** 帧缓冲区目标大小 - 控制缓冲的最大帧数 */
|
|
18
|
+
targetBufferSize?: number;
|
|
19
|
+
/** 每批解码帧数 - 批量解码后再让出主线程 */
|
|
20
|
+
decodeBatchSize?: number;
|
|
21
|
+
/** NAL/Sample 队列上限 - 超过则暂停下载 */
|
|
22
|
+
maxQueueSize?: number;
|
|
23
|
+
/** 是否为直播流 - 直播流会持续下载数据 */
|
|
24
|
+
isLive?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare const DEFAULT_PLAYER_CONFIG: Required<PlayerConfig>;
|
|
27
|
+
export declare abstract class BasePlayer<Config extends PlayerConfig = PlayerConfig> {
|
|
28
|
+
protected config: Required<Config>;
|
|
29
|
+
protected callbacks: PlayerCallbacks;
|
|
30
|
+
protected wasmLoader: WASMLoader;
|
|
31
|
+
protected decoder: H264Decoder | null;
|
|
32
|
+
protected renderer: Canvas2DRenderer | null;
|
|
33
|
+
protected decoderInitialized: boolean;
|
|
34
|
+
protected isPlaying: boolean;
|
|
35
|
+
protected frameTimer: number | null;
|
|
36
|
+
protected frameBuffer: VideoFrame[];
|
|
37
|
+
protected droppedFrames: number;
|
|
38
|
+
protected decodeLoopAbort: boolean;
|
|
39
|
+
protected _currentTime: number;
|
|
40
|
+
protected _duration: number;
|
|
41
|
+
protected state: PlayerState;
|
|
42
|
+
constructor(config: Config, callbacks: PlayerCallbacks, defaults: Required<Config>);
|
|
43
|
+
/**
|
|
44
|
+
* 加载视频源
|
|
45
|
+
*/
|
|
46
|
+
abstract load(url: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* 解码循环
|
|
49
|
+
*/
|
|
50
|
+
protected abstract decodeLoop(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 跳转到指定时间
|
|
53
|
+
* @param time 目标时间(毫秒)
|
|
54
|
+
*/
|
|
55
|
+
abstract seek(time: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* 设置渲染器
|
|
58
|
+
*/
|
|
59
|
+
setRenderer(renderer: Canvas2DRenderer): void;
|
|
60
|
+
/**
|
|
61
|
+
* 初始化解码器
|
|
62
|
+
*/
|
|
63
|
+
initDecoder(): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* 开始播放
|
|
66
|
+
*/
|
|
67
|
+
play(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* 暂停播放
|
|
70
|
+
*/
|
|
71
|
+
pause(): void;
|
|
72
|
+
/**
|
|
73
|
+
* 销毁播放器,释放资源
|
|
74
|
+
*/
|
|
75
|
+
destroy(): void;
|
|
76
|
+
/**
|
|
77
|
+
* 获取播放状态
|
|
78
|
+
*/
|
|
79
|
+
getState(): PlayerState;
|
|
80
|
+
/**
|
|
81
|
+
* 获取当前播放时间(毫秒)
|
|
82
|
+
*/
|
|
83
|
+
getCurrentTime(): number;
|
|
84
|
+
/**
|
|
85
|
+
* 获取总时长(毫秒)
|
|
86
|
+
*/
|
|
87
|
+
getDuration(): number;
|
|
88
|
+
/**
|
|
89
|
+
* 设置当前时间(供子类调用)
|
|
90
|
+
*/
|
|
91
|
+
protected setCurrentTime(time: number): void;
|
|
92
|
+
/**
|
|
93
|
+
* 设置总时长(供子类调用)
|
|
94
|
+
*/
|
|
95
|
+
protected setDuration(duration: number): void;
|
|
96
|
+
/**
|
|
97
|
+
* 更新状态
|
|
98
|
+
*/
|
|
99
|
+
protected updateState(partial: Partial<PlayerState>): void;
|
|
100
|
+
/**
|
|
101
|
+
* 快速让出主线程
|
|
102
|
+
*/
|
|
103
|
+
protected yieldFast(): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* 休眠
|
|
106
|
+
*/
|
|
107
|
+
protected sleep(ms: number): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* 重置播放器状态
|
|
110
|
+
*/
|
|
111
|
+
protected resetState(): void;
|
|
112
|
+
/**
|
|
113
|
+
* 渲染循环
|
|
114
|
+
* 子类可以覆盖此方法以实现自定义渲染逻辑
|
|
115
|
+
*/
|
|
116
|
+
protected renderLoop: () => void;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=BasePlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePlayer.d.ts","sourceRoot":"","sources":["../../src/player/BasePlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EcPlayerCore 统一播放器入口
|
|
3
|
+
*
|
|
4
|
+
* 自动检测视频格式(HLS/FLV/MP4),创建对应的播放器实例
|
|
5
|
+
* 提供统一的 API,简化使用
|
|
6
|
+
*/
|
|
7
|
+
import { BasePlayer, type PlayerConfig } from './BasePlayer';
|
|
8
|
+
import { type StreamFormat } from '../demuxer/FormatDetector';
|
|
9
|
+
import type { PlayerState, PlayerCallbacks } from '../types';
|
|
10
|
+
export interface EcPlayerCoreConfig extends PlayerConfig {
|
|
11
|
+
/** Canvas 元素,用于渲染视频 */
|
|
12
|
+
canvas?: HTMLCanvasElement;
|
|
13
|
+
}
|
|
14
|
+
export interface PlayOptions {
|
|
15
|
+
/** 视频 URL(不传则继续播放当前视频) */
|
|
16
|
+
url?: string;
|
|
17
|
+
/** 是否为直播流 */
|
|
18
|
+
isLive?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class EcPlayerCore {
|
|
21
|
+
private player;
|
|
22
|
+
private config;
|
|
23
|
+
private callbacks;
|
|
24
|
+
private detectedFormat;
|
|
25
|
+
private pendingRenderer;
|
|
26
|
+
private renderer;
|
|
27
|
+
constructor(config?: EcPlayerCoreConfig, callbacks?: PlayerCallbacks);
|
|
28
|
+
/**
|
|
29
|
+
* 加载视频(自动检测格式、初始化解码器)
|
|
30
|
+
* @param url 视频 URL
|
|
31
|
+
* @param isLive 是否为直播流(直播流会持续下载数据)
|
|
32
|
+
*/
|
|
33
|
+
load(url: string, isLive?: boolean): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* 根据格式创建播放器
|
|
36
|
+
*/
|
|
37
|
+
private createPlayer;
|
|
38
|
+
/**
|
|
39
|
+
* 播放视频
|
|
40
|
+
* @param options 播放参数
|
|
41
|
+
*/
|
|
42
|
+
play(options?: PlayOptions): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 暂停播放
|
|
45
|
+
*/
|
|
46
|
+
pause(): void;
|
|
47
|
+
/**
|
|
48
|
+
* 跳转到指定时间
|
|
49
|
+
*/
|
|
50
|
+
seek(time: number): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 获取当前播放时间(毫秒)
|
|
53
|
+
*/
|
|
54
|
+
getCurrentTime(): number;
|
|
55
|
+
/**
|
|
56
|
+
* 获取总时长(毫秒)
|
|
57
|
+
*/
|
|
58
|
+
getDuration(): number;
|
|
59
|
+
/**
|
|
60
|
+
* 获取播放状态
|
|
61
|
+
*/
|
|
62
|
+
getState(): PlayerState;
|
|
63
|
+
/**
|
|
64
|
+
* 获取检测到的格式
|
|
65
|
+
*/
|
|
66
|
+
getDetectedFormat(): StreamFormat;
|
|
67
|
+
/**
|
|
68
|
+
* 销毁播放器,释放资源
|
|
69
|
+
*/
|
|
70
|
+
destroy(): void;
|
|
71
|
+
/**
|
|
72
|
+
* 获取内部播放器实例
|
|
73
|
+
* 用于需要访问特定播放器功能的场景
|
|
74
|
+
*/
|
|
75
|
+
getPlayer(): BasePlayer | null;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=EcPlayerCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EcPlayerCore.d.ts","sourceRoot":"","sources":["../../src/player/EcPlayerCore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAyB,MAAM,cAAc,CAAA;AAGnF,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG5D,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,uBAAuB;IACvB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAGD,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAgC;gBAEpC,MAAM,GAAE,kBAAuB,EAAE,SAAS,GAAE,eAAoB;IAW5E;;;;OAIG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCxD;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;OAGG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,QAAQ,IAAI,WAAW;IAsBvB;;OAEG;IACH,iBAAiB,IAAI,YAAY;IAIjC;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;;OAGG;IACH,SAAS,IAAI,UAAU,GAAG,IAAI;CAG/B"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FLV 播放器
|
|
3
|
+
*
|
|
4
|
+
* 支持 FLV 文件播放,基于时间戳控制播放速度
|
|
5
|
+
* 支持 H.264 (AVC) 和 H.265 (HEVC) 编码
|
|
6
|
+
*
|
|
7
|
+
* 使用 StreamPrefetcher 预取抽象层
|
|
8
|
+
*/
|
|
9
|
+
import { BasePlayer } from './BasePlayer';
|
|
10
|
+
import type { FLVPlayerConfig, FLVVideoTag } from '../types';
|
|
11
|
+
interface QueuedVideoTag {
|
|
12
|
+
tag: FLVVideoTag;
|
|
13
|
+
annexBData: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
export declare class FLVPlayer extends BasePlayer<FLVPlayerConfig> {
|
|
16
|
+
private flvDemuxer;
|
|
17
|
+
private h264Decoder;
|
|
18
|
+
private hevcDecoder;
|
|
19
|
+
private isPrefetching;
|
|
20
|
+
private currentUrl;
|
|
21
|
+
private _currentCodecId;
|
|
22
|
+
private _timedFrameBuffer;
|
|
23
|
+
private _videoTagQueue;
|
|
24
|
+
private playStartTime;
|
|
25
|
+
private firstFrameDts;
|
|
26
|
+
private lastRenderTime;
|
|
27
|
+
private decodeFailCount;
|
|
28
|
+
private dynamicMinBufferSize;
|
|
29
|
+
private dynamicTargetBufferSize;
|
|
30
|
+
private videoWidth;
|
|
31
|
+
private videoHeight;
|
|
32
|
+
private prefetcher;
|
|
33
|
+
private liveReader;
|
|
34
|
+
private liveDownloadAbort;
|
|
35
|
+
private _lastQueuedTimestamp;
|
|
36
|
+
private _currentDownloadSpeed;
|
|
37
|
+
get videoTagQueue(): QueuedVideoTag[];
|
|
38
|
+
get currentCodecId(): number;
|
|
39
|
+
get lastQueuedTimestamp(): number;
|
|
40
|
+
constructor(config?: FLVPlayerConfig, callbacks?: import('../types').PlayerCallbacks);
|
|
41
|
+
/**
|
|
42
|
+
* 加载 FLV 文件
|
|
43
|
+
*/
|
|
44
|
+
load(url: string): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* 初始化解码器(覆盖基类方法,支持 AVC 和 HEVC)
|
|
47
|
+
*/
|
|
48
|
+
initDecoder(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* 根据视频分辨率动态调整缓冲参数
|
|
51
|
+
*/
|
|
52
|
+
private adjustBufferForResolution;
|
|
53
|
+
/**
|
|
54
|
+
* 开始播放(覆盖基类方法)
|
|
55
|
+
*/
|
|
56
|
+
play(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* 暂停播放
|
|
59
|
+
*/
|
|
60
|
+
pause(): void;
|
|
61
|
+
/**
|
|
62
|
+
* 处理预取缓冲区数据(供预取器调用)
|
|
63
|
+
*/
|
|
64
|
+
processPrefetchBuffer(data: Uint8Array): {
|
|
65
|
+
hasNewData: boolean;
|
|
66
|
+
processedBytes: number;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* 跳转到指定时间
|
|
70
|
+
*/
|
|
71
|
+
seek(time: number): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* 解码循环
|
|
74
|
+
*/
|
|
75
|
+
protected decodeLoop(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* 流式加载 FLV 文件
|
|
78
|
+
*/
|
|
79
|
+
private loadFLV;
|
|
80
|
+
/**
|
|
81
|
+
* 初始化预取器
|
|
82
|
+
*/
|
|
83
|
+
private initPrefetcher;
|
|
84
|
+
/**
|
|
85
|
+
* 停止直播流下载
|
|
86
|
+
*/
|
|
87
|
+
private stopLiveDownload;
|
|
88
|
+
/**
|
|
89
|
+
* 解析 FLV 数据并入队
|
|
90
|
+
*/
|
|
91
|
+
private parseAndQueueFLV;
|
|
92
|
+
/**
|
|
93
|
+
* 从 AVC 配置初始化解码器
|
|
94
|
+
*/
|
|
95
|
+
private initDecoderFromAVCConfig;
|
|
96
|
+
/**
|
|
97
|
+
* 从 HEVC 配置初始化解码器
|
|
98
|
+
*/
|
|
99
|
+
private initDecoderFromHEVCConfig;
|
|
100
|
+
/**
|
|
101
|
+
* 解码 Video Tag
|
|
102
|
+
*/
|
|
103
|
+
private decodeVideoTag;
|
|
104
|
+
/**
|
|
105
|
+
* 尝试从 Annex B 数据中初始化解码器
|
|
106
|
+
*/
|
|
107
|
+
private tryInitFromData;
|
|
108
|
+
/**
|
|
109
|
+
* 从数据中初始化 AVC 解码器
|
|
110
|
+
*/
|
|
111
|
+
private tryInitAVCFromData;
|
|
112
|
+
/**
|
|
113
|
+
* 从数据中初始化 HEVC 解码器
|
|
114
|
+
*/
|
|
115
|
+
private tryInitHEVCFromData;
|
|
116
|
+
private renderedFrames;
|
|
117
|
+
private lastRenderLogTime;
|
|
118
|
+
private consecutiveEmptyBuffer;
|
|
119
|
+
private lastRenderedDts;
|
|
120
|
+
private pausedTime;
|
|
121
|
+
private bufferEmptyStartTime;
|
|
122
|
+
private playStartTimeOffset;
|
|
123
|
+
private resyncCount;
|
|
124
|
+
/**
|
|
125
|
+
* 渲染循环
|
|
126
|
+
*/
|
|
127
|
+
protected renderLoop: () => void;
|
|
128
|
+
/**
|
|
129
|
+
* 渲染一帧
|
|
130
|
+
*/
|
|
131
|
+
private renderFrame;
|
|
132
|
+
}
|
|
133
|
+
export {};
|
|
134
|
+
//# sourceMappingURL=FLVPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FLVPlayer.d.ts","sourceRoot":"","sources":["../../src/player/FLVPlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HLS 播放器
|
|
3
|
+
*
|
|
4
|
+
* 支持 HLS TS 和 fMP4 格式
|
|
5
|
+
*/
|
|
6
|
+
import { type VideoSample } from '../demuxer/fMP4Demuxer';
|
|
7
|
+
import { BasePlayer } from './BasePlayer';
|
|
8
|
+
import type { HLSPlayerConfig, NALUnit } from '../types';
|
|
9
|
+
interface QueuedNAL {
|
|
10
|
+
nalUnit: NALUnit;
|
|
11
|
+
pts: number;
|
|
12
|
+
}
|
|
13
|
+
interface QueuedSample {
|
|
14
|
+
sample: VideoSample;
|
|
15
|
+
}
|
|
16
|
+
export declare class HLSPlayer extends BasePlayer<HLSPlayerConfig> {
|
|
17
|
+
private tsDemuxer;
|
|
18
|
+
private pesExtractor;
|
|
19
|
+
private nalParser;
|
|
20
|
+
private fmp4Demuxer;
|
|
21
|
+
private isPrefetching;
|
|
22
|
+
private currentSegmentIndex;
|
|
23
|
+
private segments;
|
|
24
|
+
private fmp4Segments;
|
|
25
|
+
private initSegment;
|
|
26
|
+
private _isFMP4;
|
|
27
|
+
private currentPlaylistUrl;
|
|
28
|
+
private _nalQueue;
|
|
29
|
+
private _sampleQueue;
|
|
30
|
+
private prefetcher;
|
|
31
|
+
get isFMP4(): boolean;
|
|
32
|
+
get nalQueue(): QueuedNAL[];
|
|
33
|
+
get sampleQueue(): QueuedSample[];
|
|
34
|
+
constructor(config?: HLSPlayerConfig, callbacks?: import('../types').PlayerCallbacks);
|
|
35
|
+
/**
|
|
36
|
+
* 加载 HLS 播放列表
|
|
37
|
+
*/
|
|
38
|
+
load(url: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* 初始化解码器(覆盖基类方法,添加 fMP4 支持)
|
|
41
|
+
*/
|
|
42
|
+
initDecoder(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 开始播放(覆盖基类方法,使用自定义渲染循环)
|
|
45
|
+
*/
|
|
46
|
+
play(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* 跳转到指定时间
|
|
49
|
+
*/
|
|
50
|
+
seek(time: number): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 解码循环
|
|
53
|
+
*/
|
|
54
|
+
protected decodeLoop(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* 初始化预取器
|
|
57
|
+
*/
|
|
58
|
+
private initPrefetcher;
|
|
59
|
+
/**
|
|
60
|
+
* 解析 fMP4 数据
|
|
61
|
+
*/
|
|
62
|
+
parseFMP4Data(data: Uint8Array): number;
|
|
63
|
+
/**
|
|
64
|
+
* 解析 TS 数据
|
|
65
|
+
*/
|
|
66
|
+
parseTSData(tsData: Uint8Array): number;
|
|
67
|
+
/**
|
|
68
|
+
* 加载 fMP4 初始化段
|
|
69
|
+
*/
|
|
70
|
+
private loadInitSegment;
|
|
71
|
+
/**
|
|
72
|
+
* 从 avcC 初始化解码器
|
|
73
|
+
*/
|
|
74
|
+
private initDecoderFromAvcC;
|
|
75
|
+
/**
|
|
76
|
+
* 解析 HLS 播放列表
|
|
77
|
+
*/
|
|
78
|
+
private parsePlaylist;
|
|
79
|
+
/**
|
|
80
|
+
* 同步初始化解码器参数(SPS/PPS)- TS 流
|
|
81
|
+
*/
|
|
82
|
+
private initDecoderParamsSync;
|
|
83
|
+
private readBoxSize;
|
|
84
|
+
private readBoxType;
|
|
85
|
+
/**
|
|
86
|
+
* 解码 fMP4 sample
|
|
87
|
+
*/
|
|
88
|
+
private decodeSample;
|
|
89
|
+
/**
|
|
90
|
+
* 解码单个 NAL 单元
|
|
91
|
+
*/
|
|
92
|
+
private decodeNAL;
|
|
93
|
+
/**
|
|
94
|
+
* 渲染循环
|
|
95
|
+
*/
|
|
96
|
+
protected renderLoop: () => void;
|
|
97
|
+
}
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=HLSPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HLSPlayer.d.ts","sourceRoot":"","sources":["../../src/player/HLSPlayer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEtE,OAAO,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAc,OAAO,EAAE,MAAM,UAAU,CAAA;AAkCpE,UAAU,SAAS;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAGD,UAAU,YAAY;IACpB,MAAM,EAAE,WAAW,CAAA;CACpB;AAoFD,qBAAa,SAAU,SAAQ,UAAU,CAAC,eAAe,CAAC;IAExD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAoB;IAGvC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,mBAAmB,CAAI;IAC/B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,kBAAkB,CAAK;IAG/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAqB;IAGzC,OAAO,CAAC,UAAU,CAAoC;IAGtD,IAAI,MAAM,IAAI,OAAO,CAAwB;IAC7C,IAAI,QAAQ,IAAI,SAAS,EAAE,CAA0B;IACrD,IAAI,WAAW,IAAI,YAAY,EAAE,CAA6B;gBAElD,MAAM,GAAE,eAAoB,EAAE,SAAS,GAAE,OAAO,UAAU,EAAE,eAAoB;IAI5F;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDtC;;OAEG;IACY,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3C;;OAEG;IACY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBpC;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvC;;OAEG;cACsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEpD;;OAEG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAqCvC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAyBvC;;OAEG;YACW,eAAe;IAmC7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqD3B;;OAEG;YACW,aAAa;IA0F3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgFpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,UAAmB,UAAU,QAAO,IAAI,CA+BvC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/player/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGxF,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预取器抽象基类
|
|
3
|
+
*
|
|
4
|
+
* 提供通用的预取循环控制、水位检查、动态间隔、速度监控和状态管理
|
|
5
|
+
*/
|
|
6
|
+
import type { PrefetcherConfig, PrefetcherStatus, PrefetcherCallbacks } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* 预取器抽象基类
|
|
9
|
+
*
|
|
10
|
+
* 子类需要实现:
|
|
11
|
+
* - getQueueSize(): 获取当前队列大小
|
|
12
|
+
* - shouldPrefetch(): 判断是否需要预取
|
|
13
|
+
* - doPrefetch(): 执行实际的预取操作
|
|
14
|
+
* - doReset(): 重置状态
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class BasePrefetcher<TConfig extends PrefetcherConfig = PrefetcherConfig, TStatus extends PrefetcherStatus = PrefetcherStatus> {
|
|
17
|
+
protected config: TConfig;
|
|
18
|
+
protected callbacks: PrefetcherCallbacks;
|
|
19
|
+
protected status: TStatus;
|
|
20
|
+
protected isRunning: boolean;
|
|
21
|
+
protected abortFlag: boolean;
|
|
22
|
+
protected prefetchPromise: Promise<void> | null;
|
|
23
|
+
protected downloadStartTime: number;
|
|
24
|
+
protected downloadStartBytes: number;
|
|
25
|
+
protected lastSpeedLogTime: number;
|
|
26
|
+
protected lastSpeedLogBytes: number;
|
|
27
|
+
protected currentSpeed: number;
|
|
28
|
+
protected loopCount: number;
|
|
29
|
+
constructor(config: TConfig, callbacks?: PrefetcherCallbacks);
|
|
30
|
+
/**
|
|
31
|
+
* 创建初始状态(子类可覆盖)
|
|
32
|
+
*/
|
|
33
|
+
protected createInitialState(): TStatus;
|
|
34
|
+
/**
|
|
35
|
+
* 启动预取循环
|
|
36
|
+
*/
|
|
37
|
+
start(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* 停止预取循环
|
|
40
|
+
*/
|
|
41
|
+
stop(): void;
|
|
42
|
+
/**
|
|
43
|
+
* 获取当前状态
|
|
44
|
+
*/
|
|
45
|
+
getStatus(): TStatus;
|
|
46
|
+
/**
|
|
47
|
+
* 获取下载速度 (KB/s)
|
|
48
|
+
*/
|
|
49
|
+
getDownloadSpeed(): number;
|
|
50
|
+
/**
|
|
51
|
+
* 预取循环
|
|
52
|
+
*/
|
|
53
|
+
protected prefetchLoop(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 计算动态等待间隔
|
|
56
|
+
*/
|
|
57
|
+
protected calculateInterval(queueSize: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* 更新下载速度
|
|
60
|
+
*/
|
|
61
|
+
protected updateDownloadSpeed(totalBytes: number): void;
|
|
62
|
+
/**
|
|
63
|
+
* 初始化速度监控
|
|
64
|
+
*/
|
|
65
|
+
protected initSpeedMonitor(initialBytes: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* 更新状态(子类可覆盖以支持扩展属性)
|
|
68
|
+
*/
|
|
69
|
+
protected updateStatus(partial: Record<string, unknown>): void;
|
|
70
|
+
/**
|
|
71
|
+
* 辅助方法:休眠
|
|
72
|
+
*/
|
|
73
|
+
protected sleep(ms: number): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* 辅助方法:快速让出(用于不阻塞事件循环)
|
|
76
|
+
*/
|
|
77
|
+
protected yieldFast(): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* 重置预取器状态
|
|
80
|
+
*/
|
|
81
|
+
reset(): void;
|
|
82
|
+
/**
|
|
83
|
+
* 获取当前队列大小
|
|
84
|
+
*/
|
|
85
|
+
abstract getQueueSize(): number;
|
|
86
|
+
/**
|
|
87
|
+
* 判断是否应该预取
|
|
88
|
+
*/
|
|
89
|
+
abstract shouldPrefetch(): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* 执行预取操作
|
|
92
|
+
*/
|
|
93
|
+
abstract doPrefetch(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* 重置状态(子类实现)
|
|
96
|
+
*/
|
|
97
|
+
abstract doReset(): void;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=BasePrefetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePrefetcher.d.ts","sourceRoot":"","sources":["../../src/prefetch/BasePrefetcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;GAQG;AACH,8BAAsB,cAAc,CAClC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EACnD,OAAO,SAAS,gBAAgB,GAAG,gBAAgB;IAEnD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAA;IACzB,SAAS,CAAC,SAAS,EAAE,mBAAmB,CAAA;IACxC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAA;IACzB,SAAS,CAAC,SAAS,UAAQ;IAC3B,SAAS,CAAC,SAAS,UAAQ;IAC3B,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAO;IAGtD,SAAS,CAAC,iBAAiB,SAAI;IAC/B,SAAS,CAAC,kBAAkB,SAAI;IAChC,SAAS,CAAC,gBAAgB,SAAI;IAC9B,SAAS,CAAC,iBAAiB,SAAI;IAC/B,SAAS,CAAC,YAAY,SAAI;IAG1B,SAAS,CAAC,SAAS,SAAI;gBAGrB,MAAM,EAAE,OAAO,EACf,SAAS,GAAE,mBAAwB;IAOrC;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,OAAO;IASvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC7C;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkBtD;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAoBvD;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAOtD;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK9D;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C;;OAEG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,QAAQ,CAAC,YAAY,IAAI,MAAM;IAE/B;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,OAAO;IAElC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,IAAI;CACzB"}
|