@libmedia/avplayer 0.2.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.
Files changed (72) hide show
  1. package/COPYING.LGPLv3 +165 -0
  2. package/README.md +13 -0
  3. package/dist/esm/118.avplayer.js +1 -0
  4. package/dist/esm/217.avplayer.js +1 -0
  5. package/dist/esm/299.avplayer.js +1 -0
  6. package/dist/esm/331.avplayer.js +1 -0
  7. package/dist/esm/344.avplayer.js +1 -0
  8. package/dist/esm/433.avplayer.js +1 -0
  9. package/dist/esm/453.avplayer.js +1 -0
  10. package/dist/esm/487.avplayer.js +1 -0
  11. package/dist/esm/522.avplayer.js +1 -0
  12. package/dist/esm/531.avplayer.js +1 -0
  13. package/dist/esm/543.avplayer.js +1 -0
  14. package/dist/esm/576.avplayer.js +1 -0
  15. package/dist/esm/611.avplayer.js +1 -0
  16. package/dist/esm/634.avplayer.js +1 -0
  17. package/dist/esm/70.avplayer.js +1 -0
  18. package/dist/esm/791.avplayer.js +1 -0
  19. package/dist/esm/808.avplayer.js +1 -0
  20. package/dist/esm/839.avplayer.js +1 -0
  21. package/dist/esm/854.avplayer.js +1 -0
  22. package/dist/esm/855.avplayer.js +1 -0
  23. package/dist/esm/94.avplayer.js +1 -0
  24. package/dist/esm/941.avplayer.js +1 -0
  25. package/dist/esm/969.avplayer.js +1 -0
  26. package/dist/esm/avplayer.js +1 -0
  27. package/dist/types/AVPlayer.d.ts +683 -0
  28. package/dist/types/Controller.d.ts +36 -0
  29. package/dist/types/JitterBufferController.d.ts +38 -0
  30. package/dist/types/StatsController.d.ts +22 -0
  31. package/dist/types/eventType.d.ts +21 -0
  32. package/dist/types/function/createMessageChannel.d.ts +1 -0
  33. package/dist/types/function/getMediaSource.d.ts +10 -0
  34. package/dist/types/function/supportOffscreenCanvas.d.ts +1 -0
  35. package/dist/types/mse/MSEPipeline.d.ts +98 -0
  36. package/dist/types/struct.d.ts +12 -0
  37. package/dist/types/subtitle/AssRender.d.ts +52 -0
  38. package/dist/types/subtitle/SubtitleRender.d.ts +48 -0
  39. package/dist/types/type.d.ts +6 -0
  40. package/dist/types/worker/AudioPipeline.d.ts +13 -0
  41. package/dist/types/worker/AudioPipelineProxy.d.ts +13 -0
  42. package/dist/types/worker/IODemuxPipeline.d.ts +13 -0
  43. package/dist/types/worker/IODemuxPipelineProxy.d.ts +13 -0
  44. package/dist/types/worker/MSEPipeline.d.ts +12 -0
  45. package/dist/types/worker/MSEPipelineProxy.d.ts +12 -0
  46. package/dist/types/worker/VideoPipeline.d.ts +13 -0
  47. package/dist/types/worker/VideoPipelineProxy.d.ts +13 -0
  48. package/dist/umd/118.avplayer.js +1 -0
  49. package/dist/umd/217.avplayer.js +1 -0
  50. package/dist/umd/299.avplayer.js +1 -0
  51. package/dist/umd/331.avplayer.js +1 -0
  52. package/dist/umd/344.avplayer.js +1 -0
  53. package/dist/umd/433.avplayer.js +1 -0
  54. package/dist/umd/453.avplayer.js +1 -0
  55. package/dist/umd/487.avplayer.js +1 -0
  56. package/dist/umd/522.avplayer.js +1 -0
  57. package/dist/umd/531.avplayer.js +1 -0
  58. package/dist/umd/543.avplayer.js +1 -0
  59. package/dist/umd/576.avplayer.js +1 -0
  60. package/dist/umd/611.avplayer.js +1 -0
  61. package/dist/umd/634.avplayer.js +1 -0
  62. package/dist/umd/70.avplayer.js +1 -0
  63. package/dist/umd/791.avplayer.js +1 -0
  64. package/dist/umd/808.avplayer.js +1 -0
  65. package/dist/umd/839.avplayer.js +1 -0
  66. package/dist/umd/854.avplayer.js +1 -0
  67. package/dist/umd/855.avplayer.js +1 -0
  68. package/dist/umd/94.avplayer.js +1 -0
  69. package/dist/umd/941.avplayer.js +1 -0
  70. package/dist/umd/969.avplayer.js +1 -0
  71. package/dist/umd/avplayer.js +1 -0
  72. package/package.json +42 -0
@@ -0,0 +1,683 @@
1
+ import { AVCodecID, AVMediaType } from "@libmedia/avutil/codec";
2
+ import IOPipeline from "@libmedia/avpipeline/IOPipeline";
3
+ import DemuxPipeline from "@libmedia/avpipeline/DemuxPipeline";
4
+ import AudioDecodePipeline from "@libmedia/avpipeline/AudioDecodePipeline";
5
+ import { Thread } from "@libmedia/cheap/thread/thread";
6
+ import Emitter, { EmitterOptions } from "@libmedia/common/event/Emitter";
7
+ import compile, { WebAssemblyResource } from "@libmedia/cheap/webassembly/compiler";
8
+ import AudioRenderPipeline from "@libmedia/avpipeline/AudioRenderPipeline";
9
+ import VideoRenderPipeline from "@libmedia/avpipeline/VideoRenderPipeline";
10
+ import { RenderMode } from "@libmedia/avrender/image/ImageRender";
11
+ import { ControllerObserver } from "./Controller";
12
+ import * as eventType from "./eventType";
13
+ import Stats from "@libmedia/avpipeline/struct/stats";
14
+ import MSEPipeline from "./mse/MSEPipeline";
15
+ import { AVStreamInterface } from "@libmedia/avutil/AVStream";
16
+ import { AVFormatContextInterface } from "@libmedia/avformat/AVFormatContext";
17
+ import { Data, Fn } from "@libmedia/common/types/type";
18
+ import { playerEventChanged, playerEventChanging, playerEventError, playerEventNoParam, playerEventTime } from "./type";
19
+ import FetchIOLoader from "@libmedia/avnetwork/ioLoader/FetchIOLoader";
20
+ import FileIOLoader from "@libmedia/avnetwork/ioLoader/FileIOLoader";
21
+ import CustomIOLoader from "@libmedia/avnetwork/ioLoader/CustomIOLoader";
22
+ import IODemuxPipelineProxy from "./worker/IODemuxPipelineProxy";
23
+ import AudioPipelineProxy from "./worker/AudioPipelineProxy";
24
+ import MSEPipelineProxy from "./worker/MSEPipelineProxy";
25
+ import WebSocketIOLoader from "@libmedia/avnetwork/ioLoader/WebSocketIOLoader";
26
+ import SocketIOLoader from "@libmedia/avnetwork/ioLoader/SocketIOLoader";
27
+ import WebTransportIOLoader from "@libmedia/avnetwork/ioLoader/WebTransportIOLoader";
28
+ export interface ExternalSubtitle {
29
+ /**
30
+ * 字幕源,支持 url 和 文件
31
+ */
32
+ source: string | File;
33
+ /**
34
+ * 字幕语言
35
+ */
36
+ lang?: string;
37
+ /**
38
+ * 字幕标题
39
+ */
40
+ title?: string;
41
+ }
42
+ export interface AVPlayerOptions {
43
+ /**
44
+ * dom 挂载元素
45
+ */
46
+ container: HTMLDivElement;
47
+ /**
48
+ * 获取 wasm 回调
49
+ *
50
+ * @param type
51
+ * @param codecId
52
+ * @param mediaType
53
+ * @returns
54
+ */
55
+ getWasm: (type: 'decoder' | 'resampler' | 'stretchpitcher', codecId?: AVCodecID, mediaType?: AVMediaType) => string | ArrayBuffer | WebAssemblyResource;
56
+ /**
57
+ * 是否是直播
58
+ */
59
+ isLive?: boolean;
60
+ /**
61
+ * 自定义检查是否使用 mse 模式
62
+ */
63
+ checkUseMES?: (streams: AVStreamInterface[]) => boolean;
64
+ /**
65
+ * 是否启用硬件加速
66
+ */
67
+ enableHardware?: boolean;
68
+ /**
69
+ * 是否启用 WebGPU 渲染
70
+ */
71
+ enableWebGPU?: boolean;
72
+ /**
73
+ * 是否启用 WebCodecs 编解码
74
+ */
75
+ enableWebCodecs?: boolean;
76
+ /**
77
+ * 是否启用 worker
78
+ */
79
+ enableWorker?: boolean;
80
+ /**
81
+ * 是否循环播放
82
+ */
83
+ loop?: boolean;
84
+ /**
85
+ * 是否开启低延时模式(直播)开始之后会根据网络情况自动调整 buffer,尽量在不卡顿的情况下降低延时
86
+ */
87
+ lowLatency?: boolean;
88
+ /**
89
+ * jitter buffer 最大值 lowLatency 模式下影响最高延时(秒)
90
+ */
91
+ jitterBufferMax?: float;
92
+ /**
93
+ * jitter buffer 最小值 lowLatency 模式下影响最低延时(秒)
94
+ */
95
+ jitterBufferMin?: float;
96
+ /**
97
+ * 预加载 buffer 时长,点播使用(秒)
98
+ */
99
+ preLoadTime?: float;
100
+ /**
101
+ * 自定义查找播放流回调
102
+ */
103
+ findBestStream?: (streams: AVStreamInterface[], mediaType: AVMediaType) => AVStreamInterface;
104
+ }
105
+ export interface AVPlayerLoadOptions {
106
+ /**
107
+ * 源扩展名
108
+ * 强制指定扩展名,对没有扩展名的 url 链接使用
109
+ */
110
+ ext?: string;
111
+ /**
112
+ * 需要一起加载的外挂字幕
113
+ */
114
+ externalSubtitles?: ExternalSubtitle[];
115
+ /**
116
+ * http 请求配置
117
+ */
118
+ http?: {
119
+ /**
120
+ * http 请求需要添加的 header
121
+ */
122
+ headers?: Data;
123
+ /**
124
+ * http 请求的 credentials 配置
125
+ */
126
+ credentials?: RequestCredentials;
127
+ /**
128
+ * http 请求的 referrerPolicy 配置
129
+ */
130
+ referrerPolicy?: ReferrerPolicy;
131
+ };
132
+ /**
133
+ * webtransport 配置
134
+ */
135
+ webtransport?: WebTransportOptions;
136
+ /**
137
+ * 如果 source 是被 Websocket 或者 WebTransport 代理的,这里传源地址
138
+ * 像 rtmp 需要使用到这个源地址
139
+ */
140
+ uri?: string;
141
+ /**
142
+ * 透传给 format 的参数
143
+ */
144
+ formatOptions?: Data;
145
+ }
146
+ export interface AVPlayerPlayOptions {
147
+ /**
148
+ * 是否播放音频
149
+ */
150
+ audio?: boolean;
151
+ /**
152
+ * 是否播放视频
153
+ */
154
+ video?: boolean;
155
+ /**
156
+ * 是否播放字幕
157
+ */
158
+ subtitle?: boolean;
159
+ }
160
+ export declare const AVPlayerSupportedCodecs: AVCodecID[];
161
+ export declare const enum AVPlayerStatus {
162
+ STOPPED = 0,
163
+ DESTROYING = 1,
164
+ DESTROYED = 2,
165
+ LOADING = 3,
166
+ LOADED = 4,
167
+ PLAYING = 5,
168
+ PLAYED = 6,
169
+ PAUSED = 7,
170
+ SEEKING = 8,
171
+ CHANGING = 9
172
+ }
173
+ export declare const enum AVPlayerProgress {
174
+ OPEN_FILE = 0,
175
+ ANALYZE_FILE = 1,
176
+ LOAD_AUDIO_DECODER = 2,
177
+ LOAD_VIDEO_DECODER = 3
178
+ }
179
+ export default class AVPlayer extends Emitter implements ControllerObserver {
180
+ static Util: {
181
+ compile: typeof compile;
182
+ browser: import("common/types/type").Browser;
183
+ os: import("common/types/type").OS;
184
+ };
185
+ static IOLoader: {
186
+ CustomIOLoader: typeof CustomIOLoader;
187
+ FetchIOLoader: typeof FetchIOLoader;
188
+ FileIOLoader: typeof FileIOLoader;
189
+ WebSocketIOLoader: typeof WebSocketIOLoader;
190
+ SocketIOLoader: typeof SocketIOLoader;
191
+ WebTransportIOLoader: typeof WebTransportIOLoader;
192
+ };
193
+ static level: number;
194
+ static DemuxThreadReady: Promise<void>;
195
+ static AudioThreadReady: Promise<void>;
196
+ static VideoThreadReady: Promise<void>;
197
+ static MSEThreadReady: Promise<void>;
198
+ static IODemuxProxy: IODemuxPipelineProxy;
199
+ static AudioPipelineProxy: AudioPipelineProxy;
200
+ static MSEPipelineProxy: MSEPipelineProxy;
201
+ static IOThread: Thread<IOPipeline>;
202
+ static DemuxerThread: Thread<DemuxPipeline>;
203
+ static AudioDecoderThread: Thread<AudioDecodePipeline>;
204
+ static AudioRenderThread: Thread<AudioRenderPipeline>;
205
+ static VideoRenderThread: Thread<VideoRenderPipeline>;
206
+ static MSEThread: Thread<MSEPipeline>;
207
+ static audioContext: AudioContext;
208
+ static Resource: Map<string, WebAssemblyResource | ArrayBuffer>;
209
+ private VideoDecoderThread;
210
+ private VideoRenderThread;
211
+ private VideoPipelineProxy;
212
+ private GlobalData;
213
+ private taskId;
214
+ private subTaskId;
215
+ private subtitleTaskId;
216
+ private ext;
217
+ private source;
218
+ private ioIPCPort;
219
+ private options;
220
+ private ioloader2DemuxerChannel;
221
+ private demuxer2VideoDecoderChannel;
222
+ private demuxer2AudioDecoderChannel;
223
+ private videoDecoder2VideoRenderChannel;
224
+ private audioDecoder2AudioRenderChannel;
225
+ private audioRender2AudioWorkletChannel;
226
+ private audioSourceNode;
227
+ private gainNode;
228
+ private formatContext;
229
+ private canvas;
230
+ private updateCanvas;
231
+ private video;
232
+ private audio;
233
+ private controller;
234
+ private volume;
235
+ private playRate;
236
+ private renderMode;
237
+ private renderRotate;
238
+ private flipHorizontal;
239
+ private flipVertical;
240
+ private useMSE;
241
+ private audioEnded;
242
+ private videoEnded;
243
+ private status;
244
+ private lastStatus;
245
+ private playChannels;
246
+ private seekedTimestamp;
247
+ private statsController;
248
+ private jitterBufferController;
249
+ private selectedVideoStream;
250
+ private selectedAudioStream;
251
+ private selectedSubtitleStream;
252
+ private lastSelectedInnerSubtitleStreamIndex;
253
+ private subtitleRender;
254
+ private externalSubtitleTasks;
255
+ constructor(options: AVPlayerOptions);
256
+ /**
257
+ * 当前播放时间戳(毫秒)
258
+ */
259
+ get currentTime(): int64;
260
+ private isCodecIdSupported;
261
+ private findBestStream;
262
+ private checkUseMSE;
263
+ private createCanvas;
264
+ private createVideo;
265
+ private createAudio;
266
+ private handleTimeupdate;
267
+ private handleEnded;
268
+ /**
269
+ * 当前播放的源是否是 hls
270
+ *
271
+ * @returns
272
+ */
273
+ isHls(): boolean;
274
+ /**
275
+ * 当前播放的源是否是 dash
276
+ *
277
+ * @returns
278
+ */
279
+ isDash(): boolean;
280
+ private getResource;
281
+ private createSubtitleRender;
282
+ /**
283
+ * 加载外挂字幕
284
+ *
285
+ * @param externalSubtitle
286
+ * @returns
287
+ */
288
+ loadExternalSubtitle(externalSubtitle: ExternalSubtitle): Promise<number>;
289
+ /**
290
+ * 加载媒体源,分析流信息
291
+ *
292
+ * @param source 媒体源,支持 url、File 和自定义 CustomIOLoader
293
+ * @param options 配置项
294
+ */
295
+ load(source: string | File | CustomIOLoader, options?: AVPlayerLoadOptions): Promise<void>;
296
+ /**
297
+ * 播放
298
+ *
299
+ * @param options
300
+ * @returns
301
+ */
302
+ play(options?: AVPlayerPlayOptions): Promise<void>;
303
+ /**
304
+ * 暂停播放
305
+ */
306
+ pause(): Promise<void>;
307
+ private doSeek;
308
+ /**
309
+ * 跳转到指定时间戳位置播放(只支持点播)
310
+ * 某些文件可能不会 seek 成功
311
+ *
312
+ * @param timestamp 毫秒
313
+ */
314
+ seek(timestamp: int64): Promise<void>;
315
+ /**
316
+ * 获取流信息
317
+ *
318
+ * @returns
319
+ */
320
+ getStreams(): {
321
+ /**
322
+ * 媒体类型
323
+ */
324
+ mediaType: string;
325
+ codecparProxy: import("avutil/struct/avcodecparameters").default;
326
+ index: number;
327
+ id: number;
328
+ codecpar: pointer<import("avutil/struct/avcodecparameters").default>;
329
+ nbFrames: int64;
330
+ metadata: Data;
331
+ duration: int64;
332
+ startTime: int64;
333
+ disposition: int32;
334
+ timeBase: import("avutil/struct/rational").Rational;
335
+ }[];
336
+ /**
337
+ * 获取当前选择播放的视频流 id
338
+ *
339
+ * @returns
340
+ */
341
+ getSelectedVideoStreamId(): number;
342
+ /**
343
+ * 获取当前选择播放的音频流 id
344
+ *
345
+ * @returns
346
+ */
347
+ getSelectedAudioStreamId(): number;
348
+ /**
349
+ * 获取当前选择播放的字幕流 id
350
+ *
351
+ * @returns
352
+ */
353
+ getSelectedSubtitleStreamId(): number;
354
+ /**
355
+ * 获取章节信息
356
+ *
357
+ * @returns
358
+ */
359
+ getChapters(): import("avformat/AVFormatContext").AVChapter[];
360
+ /**
361
+ * 获取总时长(毫秒)
362
+ *
363
+ * @returns
364
+ */
365
+ getDuration(): bigint;
366
+ /**
367
+ * 停止播放
368
+ *
369
+ * @returns
370
+ */
371
+ stop(): Promise<void>;
372
+ setPlaybackRate(rate: number): void;
373
+ /**
374
+ * 获取倍数值
375
+ *
376
+ * @returns
377
+ */
378
+ getPlaybackRate(): double;
379
+ /**
380
+ * resume 音频
381
+ */
382
+ resume(): Promise<void>;
383
+ /**
384
+ * 获取播放音量
385
+ *
386
+ * @returns
387
+ */
388
+ getVolume(): double;
389
+ /**
390
+ * 设置播放音量
391
+ *
392
+ * @param volume [0, 3]
393
+ *
394
+ */
395
+ setVolume(volume: number, force?: boolean): void;
396
+ /**
397
+ *
398
+ * 获取渲染模式
399
+ *
400
+ * @param mode
401
+ * @returns
402
+ */
403
+ getRenderMode(): RenderMode;
404
+ /**
405
+ * 设置画面填充模式
406
+ *
407
+ * - 0 自适应
408
+ * - 1 填充
409
+ *
410
+ * @param mode
411
+ */
412
+ setRenderMode(mode: RenderMode): void;
413
+ private getVideoTransformContext;
414
+ /**
415
+ * 设置视频渲染旋转角度
416
+ *
417
+ * @param angle
418
+ */
419
+ setRotate(angle: double): void;
420
+ enableHorizontalFlip(enable: boolean): void;
421
+ enableVerticalFlip(enable: boolean): void;
422
+ /**
423
+ * 设置是否循环播放
424
+ *
425
+ * @param enable
426
+ */
427
+ setLoop(enable: boolean): void;
428
+ /**
429
+ *
430
+ * 设置字幕延时(毫秒)
431
+ *
432
+ * @param delay
433
+ */
434
+ setSubtitleDelay(delay: int32): void;
435
+ /**
436
+ * 获取字幕延时(毫秒)
437
+ *
438
+ * @returns
439
+ */
440
+ getSubtitleDelay(): 0 | int32;
441
+ /**
442
+ * 设置是否开启字幕显示
443
+ *
444
+ * @param enable
445
+ */
446
+ setSubtitleEnable(enable: boolean): void;
447
+ /**
448
+ * 重置渲染视图大小
449
+ *
450
+ * @param width
451
+ * @param height
452
+ */
453
+ resize(width: number, height: number): void;
454
+ /**
455
+ * 当前是否是 mse 播放模式
456
+ *
457
+ * @returns
458
+ */
459
+ isMSE(): boolean;
460
+ /**
461
+ * 当前是否是 live 模式
462
+ *
463
+ * @returns
464
+ */
465
+ isLive(): boolean;
466
+ /**
467
+ * 获取视频列表( dash 使用)
468
+ *
469
+ * @returns
470
+ */
471
+ getVideoList(): Promise<import("avnetwork/ioLoader/IOLoader").IOLoaderVideoStreamInfo>;
472
+ /**
473
+ * 获取音频列表( dash 使用)
474
+ *
475
+ * @returns
476
+ */
477
+ getAudioList(): Promise<import("avnetwork/ioLoader/IOLoader").IOLoaderAudioStreamInfo>;
478
+ /**
479
+ * 获取字幕列表( dash 使用)
480
+ *
481
+ * @returns
482
+ */
483
+ getSubtitleList(): Promise<import("avnetwork/ioLoader/IOLoader").IOLoaderSubtitleStreamInfo>;
484
+ /**
485
+ * 获取 status 状态
486
+ *
487
+ * @returns
488
+ */
489
+ getStatus(): AVPlayerStatus;
490
+ /**
491
+ * 是否播放了音频
492
+ *
493
+ * @returns
494
+ */
495
+ hasAudio(): boolean;
496
+ /**
497
+ * 是否播放了视频
498
+ *
499
+ * @returns
500
+ */
501
+ hasVideo(): boolean;
502
+ /**
503
+ * 是否播放了字幕
504
+ *
505
+ * @returns
506
+ */
507
+ hasSubtitle(): boolean;
508
+ /**
509
+ * 获取当前的播放源
510
+ *
511
+ * @returns
512
+ */
513
+ getSource(): string | File | CustomIOLoader;
514
+ /**
515
+ * 获取 formatContext 对象
516
+ *
517
+ * @returns
518
+ */
519
+ getFormatContext(): AVFormatContextInterface;
520
+ /**
521
+ * 获取当前加载的外挂字幕
522
+ *
523
+ * @returns
524
+ */
525
+ getExternalSubtitle(): {
526
+ source: string | File;
527
+ lang: string;
528
+ title: string;
529
+ }[];
530
+ /**
531
+ * 获取 AVPlayerOptions
532
+ *
533
+ * @returns
534
+ */
535
+ getOptions(): AVPlayerOptions;
536
+ /**
537
+ * 重新设置是否是直播,load 之前调用
538
+ *
539
+ * @param is
540
+ */
541
+ setIsLive(is: boolean): void;
542
+ /**
543
+ * 获取 audioContext 声音输出 Node,可拿给外部去处理
544
+ */
545
+ getAudioOutputNode(): AudioNode;
546
+ /**
547
+ * 判断是否处于画中画状态
548
+ *
549
+ * @returns
550
+ */
551
+ isPictureInPicture(): boolean;
552
+ /**
553
+ * 设置播放视频轨道
554
+ *
555
+ * @param id 流 id,dash 传 getVideoList 列表中的 index
556
+ * @returns
557
+ */
558
+ selectVideo(id: number): Promise<void>;
559
+ /**
560
+ * 设置播放音频轨道
561
+ *
562
+ * @param id 流 id,dash 传 getAudioList 列表中的 index
563
+ * @returns
564
+ */
565
+ selectAudio(id: number): Promise<void>;
566
+ /**
567
+ * 设置播放字幕轨道
568
+ *
569
+ * @param id 流 id,dash 传 getSubtitleList 列表中的 index
570
+ * @returns
571
+ */
572
+ selectSubtitle(id: number): Promise<void>;
573
+ /**
574
+ * 播放视频下一帧,可用于逐帧播放,暂停状态下使用(不支持 mse 模式)
575
+ */
576
+ playNextFrame(): Promise<void>;
577
+ /**
578
+ * 全屏
579
+ */
580
+ enterFullscreen(): void;
581
+ /**
582
+ * 退出全屏
583
+ */
584
+ exitFullscreen(): void;
585
+ /**
586
+ * 获取截图
587
+ *
588
+ * @param type 生成图片格式
589
+ * @param quality 生成图片质量
590
+ */
591
+ snapshot(type?: 'png' | 'jpeg' | 'webp', quality?: number): string;
592
+ /**
593
+ * 获取统计数据
594
+ *
595
+ * @returns
596
+ */
597
+ getStats(): Stats;
598
+ /**
599
+ * 销毁播放器
600
+ *
601
+ * @returns
602
+ */
603
+ destroy(): Promise<void>;
604
+ /**
605
+ * @internal
606
+ */
607
+ onVideoEnded(): void;
608
+ /**
609
+ * @internal
610
+ */
611
+ onAudioEnded(): void;
612
+ /**
613
+ * @internal
614
+ */
615
+ onCanvasUpdated(): void;
616
+ /**
617
+ * @internal
618
+ */
619
+ onGetDecoderResource(mediaType: AVMediaType, codecId: AVCodecID): Promise<WebAssemblyResource | string | ArrayBuffer>;
620
+ /**
621
+ * @internal
622
+ */
623
+ onFirstVideoRendered(): void;
624
+ /**
625
+ * @internal
626
+ */
627
+ onFirstAudioRendered(): void;
628
+ /**
629
+ * @internal
630
+ */
631
+ onAudioStutter(): void;
632
+ onVideoStutter(): void;
633
+ /**
634
+ * @internal
635
+ */
636
+ onFirstVideoRenderedAfterUpdateCanvas(): void;
637
+ /**
638
+ * @internal
639
+ */
640
+ onTimeUpdate(pts: int64): void;
641
+ /**
642
+ * @internal
643
+ */
644
+ onMSESeek(time: number): void;
645
+ private createVideoDecoderThread;
646
+ static startDemuxPipeline(enableWorker?: boolean): Promise<void>;
647
+ static startAudioPipeline(enableWorker?: boolean): Promise<void>;
648
+ static startVideoRenderPipeline(enableWorker?: boolean): Promise<void>;
649
+ static startMSEPipeline(enableWorker?: boolean): Promise<void>;
650
+ /**
651
+ * 提前运行所有管线
652
+ */
653
+ static startPipelines(enableWorker?: boolean): Promise<void>;
654
+ /**
655
+ * 停止所有管线
656
+ */
657
+ static stopPipelines(): Promise<void>;
658
+ /**
659
+ * 设置日志等级
660
+ *
661
+ * @param level
662
+ */
663
+ static setLogLevel(level: number): void;
664
+ on(event: typeof eventType.LOADING, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
665
+ on(event: typeof eventType.LOADED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
666
+ on(event: typeof eventType.PLAYING, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
667
+ on(event: typeof eventType.PLAYED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
668
+ on(event: typeof eventType.PAUSED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
669
+ on(event: typeof eventType.STOPPED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
670
+ on(event: typeof eventType.ENDED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
671
+ on(event: typeof eventType.SEEKING, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
672
+ on(event: typeof eventType.CHANGING, listener: typeof playerEventChanging, options?: Partial<EmitterOptions>): AVPlayer;
673
+ on(event: typeof eventType.CHANGED, listener: typeof playerEventChanged, options?: Partial<EmitterOptions>): AVPlayer;
674
+ on(event: typeof eventType.RESUME, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
675
+ on(event: typeof eventType.TIME, listener: typeof playerEventTime, options?: Partial<EmitterOptions>): AVPlayer;
676
+ on(event: typeof eventType.STREAM_UPDATE, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
677
+ on(event: typeof eventType.FIRST_AUDIO_RENDERED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
678
+ on(event: typeof eventType.FIRST_VIDEO_RENDERED, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
679
+ on(event: typeof eventType.ERROR, listener: typeof playerEventError, options?: Partial<EmitterOptions>): AVPlayer;
680
+ on(event: typeof eventType.TIMEOUT, listener: typeof playerEventNoParam, options?: Partial<EmitterOptions>): AVPlayer;
681
+ on(event: string, listener: Fn, options?: Partial<EmitterOptions>): AVPlayer;
682
+ one(event: string, listener: Fn, options?: Partial<EmitterOptions>): this;
683
+ }
@@ -0,0 +1,36 @@
1
+ import { AVCodecID, AVMediaType } from "@libmedia/avutil/codec";
2
+ import { WebAssemblyResource } from "@libmedia/cheap/webassembly/compiler";
3
+ export interface ControllerObserver {
4
+ onVideoEnded: () => void;
5
+ onAudioEnded: () => void;
6
+ onCanvasUpdated: () => void;
7
+ onFirstVideoRendered: () => void;
8
+ onFirstVideoRenderedAfterUpdateCanvas: () => void;
9
+ onTimeUpdate: (pts: int64) => void;
10
+ onMSESeek: (time: number) => void;
11
+ onGetDecoderResource: (mediaType: AVMediaType, codecId: AVCodecID) => Promise<WebAssemblyResource | string | ArrayBuffer>;
12
+ isPictureInPicture: () => boolean;
13
+ }
14
+ export default class Controller {
15
+ private videoRenderControlChannel;
16
+ private audioRenderControlChannel;
17
+ private muxerControlChannel;
18
+ private demuxerControlChannel;
19
+ private videoRenderControlIPCPort;
20
+ private audioRenderControlIPCPort;
21
+ private muxerControlIPCPort;
22
+ private demuxerControlIPCPort;
23
+ private observer;
24
+ private visibilityHidden;
25
+ private onVisibilityChange;
26
+ private timeUpdateListenType;
27
+ private enableAudioVideoSync;
28
+ constructor(observer: ControllerObserver, enableWorker: boolean);
29
+ getVideoRenderControlPort(): MessagePort;
30
+ getAudioRenderControlPort(): MessagePort;
31
+ getMuxerControlPort(): MessagePort;
32
+ getDemuxerControlPort(): MessagePort;
33
+ setTimeUpdateListenType(type: AVMediaType): void;
34
+ setEnableAudioVideoSync(enable: boolean): void;
35
+ destroy(): void;
36
+ }