@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.
Files changed (67) hide show
  1. package/dist/decoder/H264Decoder.d.ts +14 -0
  2. package/dist/decoder/H264Decoder.d.ts.map +1 -0
  3. package/dist/decoder/HEVCDecoder.d.ts +21 -0
  4. package/dist/decoder/HEVCDecoder.d.ts.map +1 -0
  5. package/dist/decoder/WASMLoader.d.ts +10 -0
  6. package/dist/decoder/WASMLoader.d.ts.map +1 -0
  7. package/dist/decoder/index.d.ts +4 -0
  8. package/dist/decoder/index.d.ts.map +1 -0
  9. package/dist/demuxer/DemuxerFactory.d.ts +24 -0
  10. package/dist/demuxer/DemuxerFactory.d.ts.map +1 -0
  11. package/dist/demuxer/FLVDemuxer.d.ts +132 -0
  12. package/dist/demuxer/FLVDemuxer.d.ts.map +1 -0
  13. package/dist/demuxer/FormatDetector.d.ts +21 -0
  14. package/dist/demuxer/FormatDetector.d.ts.map +1 -0
  15. package/dist/demuxer/PESExtractor.d.ts +11 -0
  16. package/dist/demuxer/PESExtractor.d.ts.map +1 -0
  17. package/dist/demuxer/TSDemuxer.d.ts +17 -0
  18. package/dist/demuxer/TSDemuxer.d.ts.map +1 -0
  19. package/dist/demuxer/fMP4Demuxer.d.ts +131 -0
  20. package/dist/demuxer/fMP4Demuxer.d.ts.map +1 -0
  21. package/dist/demuxer/index.d.ts +7 -0
  22. package/dist/demuxer/index.d.ts.map +1 -0
  23. package/dist/env/EnvDetector.d.ts +167 -0
  24. package/dist/env/EnvDetector.d.ts.map +1 -0
  25. package/dist/env/index.d.ts +5 -0
  26. package/dist/env/index.d.ts.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +3869 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/parser/NALParser.d.ts +21 -0
  32. package/dist/parser/NALParser.d.ts.map +1 -0
  33. package/dist/parser/index.d.ts +2 -0
  34. package/dist/parser/index.d.ts.map +1 -0
  35. package/dist/player/BasePlayer.d.ts +118 -0
  36. package/dist/player/BasePlayer.d.ts.map +1 -0
  37. package/dist/player/EcPlayerCore.d.ts +77 -0
  38. package/dist/player/EcPlayerCore.d.ts.map +1 -0
  39. package/dist/player/FLVPlayer.d.ts +134 -0
  40. package/dist/player/FLVPlayer.d.ts.map +1 -0
  41. package/dist/player/HLSPlayer.d.ts +99 -0
  42. package/dist/player/HLSPlayer.d.ts.map +1 -0
  43. package/dist/player/index.d.ts +3 -0
  44. package/dist/player/index.d.ts.map +1 -0
  45. package/dist/prefetch/BasePrefetcher.d.ts +99 -0
  46. package/dist/prefetch/BasePrefetcher.d.ts.map +1 -0
  47. package/dist/prefetch/SegmentPrefetcher.d.ts +116 -0
  48. package/dist/prefetch/SegmentPrefetcher.d.ts.map +1 -0
  49. package/dist/prefetch/StreamPrefetcher.d.ts +113 -0
  50. package/dist/prefetch/StreamPrefetcher.d.ts.map +1 -0
  51. package/dist/prefetch/index.d.ts +13 -0
  52. package/dist/prefetch/index.d.ts.map +1 -0
  53. package/dist/prefetch/types.d.ts +93 -0
  54. package/dist/prefetch/types.d.ts.map +1 -0
  55. package/dist/renderer/Canvas2DRenderer.d.ts +16 -0
  56. package/dist/renderer/Canvas2DRenderer.d.ts.map +1 -0
  57. package/dist/renderer/index.d.ts +2 -0
  58. package/dist/renderer/index.d.ts.map +1 -0
  59. package/dist/types/index.d.ts +117 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/utils/index.d.ts +2 -0
  62. package/dist/utils/index.d.ts.map +1 -0
  63. package/dist/utils/logger.d.ts +36 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/package.json +48 -0
  66. package/wasm/decoder-simd.js +19 -0
  67. package/wasm/decoder-simd.wasm +0 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * H.264 解码器
3
+ */
4
+ import type { VideoFrame, NALUnit } from '../types';
5
+ import { WASMLoader } from './WASMLoader';
6
+ export declare class H264Decoder {
7
+ private wasmModule;
8
+ private decoderContext;
9
+ constructor(wasmLoader: WASMLoader);
10
+ init(): Promise<void>;
11
+ decode(nalUnit: NALUnit): VideoFrame | null;
12
+ private yuv420pToRgba;
13
+ }
14
+ //# sourceMappingURL=H264Decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"H264Decoder.d.ts","sourceRoot":"","sources":["../../src/decoder/H264Decoder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAA8B,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,cAAc,CAA8B;gBAExC,UAAU,EAAE,UAAU;IAI5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI;IA4C3C,OAAO,CAAC,aAAa;CAuCtB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * H.265/HEVC 解码器
3
+ */
4
+ import type { VideoFrame, NALUnit } from '../types';
5
+ import { WASMLoader } from './WASMLoader';
6
+ export declare const HEVC_NAL_TYPE: {
7
+ readonly VPS: 32;
8
+ readonly SPS: 33;
9
+ readonly PPS: 34;
10
+ readonly IDR_W_RADL: 19;
11
+ readonly IDR_N_LP: 20;
12
+ };
13
+ export declare class HEVCDecoder {
14
+ private wasmModule;
15
+ private decoderContext;
16
+ constructor(wasmLoader: WASMLoader);
17
+ init(): Promise<void>;
18
+ decode(nalUnit: NALUnit): VideoFrame | null;
19
+ private yuv420pToRgba;
20
+ }
21
+ //# sourceMappingURL=HEVCDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HEVCDecoder.d.ts","sourceRoot":"","sources":["../../src/decoder/HEVCDecoder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAA8B,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAA;AAEV,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,cAAc,CAA8B;gBAExC,UAAU,EAAE,UAAU;IAI5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI;IA4C3C,OAAO,CAAC,aAAa;CAuCtB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * WASM 加载器
3
+ */
4
+ import type { WASMModule } from '../types';
5
+ export declare class WASMLoader {
6
+ private module;
7
+ load(wasmPath: string): Promise<WASMModule>;
8
+ getModule(): WASMModule | null;
9
+ }
10
+ //# sourceMappingURL=WASMLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WASMLoader.d.ts","sourceRoot":"","sources":["../../src/decoder/WASMLoader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA0B;IAElC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmCjD,SAAS,IAAI,UAAU,GAAG,IAAI;CAG/B"}
@@ -0,0 +1,4 @@
1
+ export { WASMLoader } from './WASMLoader';
2
+ export { H264Decoder } from './H264Decoder';
3
+ export { HEVCDecoder, HEVC_NAL_TYPE } from './HEVCDecoder';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decoder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 解封装器工厂
3
+ *
4
+ * 根据格式创建对应的解封装器实例
5
+ */
6
+ import type { StreamFormat } from './FormatDetector';
7
+ export interface DemuxerInterface {
8
+ parse(data: Uint8Array): any;
9
+ }
10
+ export declare class DemuxerFactory {
11
+ /**
12
+ * 根据格式创建对应的解封装器
13
+ */
14
+ static create(format: StreamFormat): DemuxerInterface;
15
+ /**
16
+ * 注册自定义解封装器
17
+ */
18
+ static register(format: string, demuxerClass: new () => DemuxerInterface): void;
19
+ /**
20
+ * 取消注册解封装器
21
+ */
22
+ static unregister(format: string): boolean;
23
+ }
24
+ //# sourceMappingURL=DemuxerFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DemuxerFactory.d.ts","sourceRoot":"","sources":["../../src/demuxer/DemuxerFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG,CAAA;CAC7B;AAKD,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB;IAoBrD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,gBAAgB,GAAG,IAAI;IAI/E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAG3C"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * FLV (Flash Video) 解析器
3
+ *
4
+ * 用于解析 FLV 文件格式
5
+ *
6
+ * FLV 格式结构:
7
+ * - FLV Header (9 bytes): Signature, Version, Flags, Header Size
8
+ * - Previous Tag Size 0 (4 bytes)
9
+ * - Tag 循环:
10
+ * - Tag Header (11 bytes): Type, Data Size, Timestamp, Stream ID
11
+ * - Tag Data
12
+ * - Previous Tag Size (4 bytes)
13
+ */
14
+ import type { FLVVideoTag, FLVAVCConfig, FLVParseResult, FLVHEVCConfig } from '../types';
15
+ export declare class FLVDemuxer {
16
+ private avcConfig;
17
+ private hevcConfig;
18
+ private codecId;
19
+ private parseOffset;
20
+ private headerParsed;
21
+ private headerSize;
22
+ /**
23
+ * 检测是否为 FLV 格式
24
+ */
25
+ static isFLV(data: Uint8Array): boolean;
26
+ /**
27
+ * 解析 FLV 数据
28
+ */
29
+ parse(data: Uint8Array): FLVParseResult;
30
+ /**
31
+ * 增量解析 FLV 数据(用于流式下载)
32
+ * 只解析新收到的数据,避免重复解析
33
+ * @param data 完整的 FLV 数据(包含已解析和未解析的部分)
34
+ * @returns 新解析的视频标签
35
+ */
36
+ parseIncremental(data: Uint8Array): FLVParseResult;
37
+ /**
38
+ * 重置增量解析状态(用于重新加载新的 FLV)
39
+ */
40
+ resetIncremental(): void;
41
+ /**
42
+ * 同步增量解析位置(用于从已解析的数据继续)
43
+ * @param offset 已经解析到的字节位置
44
+ */
45
+ syncParseOffset(offset: number): void;
46
+ /**
47
+ * 解析 Video Tag
48
+ *
49
+ * Video Tag Data 格式 (AVC/HEVC):
50
+ * byte 0: Frame Type (4 bits) + Codec ID (4 bits)
51
+ * byte 1: AVC/HEVC Packet Type
52
+ * byte 2-4: Composition Time Offset (24 bits signed)
53
+ * byte 5+: AVC/HEVC Data
54
+ */
55
+ private parseVideoTag;
56
+ /**
57
+ * 解析 AVC Sequence Header (AVCDecoderConfigurationRecord)
58
+ *
59
+ * 结构 (ISO 14496-15):
60
+ * byte 0: configurationVersion (usually 1)
61
+ * byte 1: AVCProfileIndication
62
+ * byte 2: profile_compatibility
63
+ * byte 3: AVCLevelIndication
64
+ * byte 4: lengthSizeMinusOne (高6位保留=0x3F, 低2位=NALU长度字节数-1)
65
+ * byte 5: numOfSequenceParameterSets (高3位保留=0xE0, 低5位=SPS数量)
66
+ * SPS 列表:
67
+ * - 2 bytes: SPS length
68
+ * - n bytes: SPS data
69
+ * byte: numOfPictureParameterSets
70
+ * PPS 列表:
71
+ * - 2 bytes: PPS length
72
+ * - n bytes: PPS data
73
+ */
74
+ parseSequenceHeader(data: Uint8Array): FLVAVCConfig | null;
75
+ /**
76
+ * 解析 HEVC Sequence Header (HEVCDecoderConfigurationRecord)
77
+ *
78
+ * 结构 (ISO 14496-15):
79
+ * byte 0: configurationVersion (usually 1)
80
+ * byte 1: general_profile_space (2 bits) + general_tier_flag (1 bit) + general_profile_idc (5 bits)
81
+ * byte 2-5: general_profile_compatibility_flags (32 bits)
82
+ * byte 6-11: general_constraint_indicator_flags (48 bits)
83
+ * byte 12: general_level_idc
84
+ * byte 13-14: min_spatial_segmentation_idc (高4位保留)
85
+ * byte 15: parallelismType (高6位保留)
86
+ * byte 16: chromaFormat (高6位保留)
87
+ * byte 17: bitDepthLumaMinus8 (高5位保留)
88
+ * byte 18: bitDepthChromaMinus8 (高5位保留)
89
+ * byte 19-20: avgFrameRate
90
+ * byte 21: constantFrameRate (2 bits) + numTemporalLayers (3 bits) + temporalIdNested (1 bit) + lengthSizeMinusOne (2 bits)
91
+ * byte 22: numOfArrays (高3位保留)
92
+ * Arrays:
93
+ * byte 0: array_completeness (1 bit) + reserved (1 bit) + NAL_unit_type (6 bits)
94
+ * byte 1-2: numNalus
95
+ * NALUs:
96
+ * byte 0-1: nalUnitLength
97
+ * byte n: nalUnit data
98
+ */
99
+ parseHEVCSequenceHeader(data: Uint8Array): FLVHEVCConfig | null;
100
+ /**
101
+ * 获取 AVC 配置
102
+ */
103
+ getAvcConfig(): FLVAVCConfig | null;
104
+ /**
105
+ * 获取 HEVC 配置
106
+ */
107
+ getHevcConfig(): FLVHEVCConfig | null;
108
+ /**
109
+ * 获取当前编码类型
110
+ */
111
+ getCodecId(): number;
112
+ /**
113
+ * 将 Video Tag 转换为 Annex B 格式的数据
114
+ *
115
+ * FLV 中的 AVC 数据使用 AVCC 格式 (长度前缀),
116
+ * 需要转换为 Annex B 格式 (start code) 才能被解码器处理
117
+ *
118
+ * @param tag FLV Video Tag
119
+ * @param lengthSize NALU 长度字节数 (从 Sequence Header 获取, 通常为 4)
120
+ * @returns Annex B 格式的数据
121
+ */
122
+ videoTagToAnnexB(tag: FLVVideoTag, lengthSize?: number): Uint8Array | null;
123
+ /**
124
+ * 判断 Video Tag 是否为关键帧
125
+ */
126
+ isKeyframe(tag: FLVVideoTag): boolean;
127
+ }
128
+ /**
129
+ * 检测是否为 FLV 格式
130
+ */
131
+ export declare function isFLV(data: Uint8Array): boolean;
132
+ //# sourceMappingURL=FLVDemuxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FLVDemuxer.d.ts","sourceRoot":"","sources":["../../src/demuxer/FLVDemuxer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,aAAa,EACd,MAAM,UAAU,CAAA;AAoDjB,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAAuB;IAGtC,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAI;IAEtB;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAkBvC;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;IAgEvC;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;IA2DlD;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKrC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IA0DrB;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI;IAqE1D;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAyH/D;;OAEG;IACH,YAAY,IAAI,YAAY,GAAG,IAAI;IAInC;;OAEG;IACH,aAAa,IAAI,aAAa,GAAG,IAAI;IAIrC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,GAAE,MAAU,GAAG,UAAU,GAAG,IAAI;IA+D7E;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO;CAGtC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE/C"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 格式检测工具
3
+ *
4
+ * 支持通过 URL、数据头、Content-Type 检测流格式
5
+ */
6
+ export type StreamFormat = 'hls-ts' | 'hls-fmp4' | 'flv' | 'mp4' | 'unknown';
7
+ export declare class FormatDetector {
8
+ /**
9
+ * 通过 URL 检测格式
10
+ */
11
+ static detectFromUrl(url: string): StreamFormat;
12
+ /**
13
+ * 通过数据头检测格式
14
+ */
15
+ static detectFromData(data: Uint8Array): StreamFormat;
16
+ /**
17
+ * 通过 Content-Type 检测格式
18
+ */
19
+ static detectFromContentType(contentType: string): StreamFormat;
20
+ }
21
+ //# sourceMappingURL=FormatDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormatDetector.d.ts","sourceRoot":"","sources":["../../src/demuxer/FormatDetector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAA;AAE5E,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAwB/C;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IAuBrD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY;CAchE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PES 提取器 - 从 TS 包中提取 H.264 视频数据
3
+ */
4
+ import type { TSPacket } from './TSDemuxer';
5
+ export declare class PESExtractor {
6
+ /**
7
+ * 从视频 TS 包中提取 payload 数据
8
+ */
9
+ extractVideoPayload(packets: TSPacket[]): Uint8Array;
10
+ }
11
+ //# sourceMappingURL=PESExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PESExtractor.d.ts","sourceRoot":"","sources":["../../src/demuxer/PESExtractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,qBAAa,YAAY;IACvB;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU;CA2DrD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TS 解复用器
3
+ */
4
+ export interface TSPacket {
5
+ data: Uint8Array;
6
+ pid: number;
7
+ stream: 'video' | 'audio' | null;
8
+ }
9
+ export declare class TSDemuxer {
10
+ private videoPID;
11
+ private audioPID;
12
+ parse(data: Uint8Array): {
13
+ video: TSPacket[];
14
+ audio: TSPacket[];
15
+ };
16
+ }
17
+ //# sourceMappingURL=TSDemuxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TSDemuxer.d.ts","sourceRoot":"","sources":["../../src/demuxer/TSDemuxer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAA;CACjC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;KAAE;CA8ClE"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * fMP4 (Fragmented MP4) 解析器
3
+ *
4
+ * 用于解析 HLS fMP4 流的分片
5
+ */
6
+ export interface TrunSample {
7
+ duration?: number;
8
+ size?: number;
9
+ flags?: number;
10
+ compositionTimeOffset?: number;
11
+ }
12
+ export interface TfhdBox {
13
+ trackId: number;
14
+ baseDataOffset?: number;
15
+ sampleDescriptionIndex?: number;
16
+ defaultSampleDuration?: number;
17
+ defaultSampleSize?: number;
18
+ defaultSampleFlags?: number;
19
+ }
20
+ export interface TfdtBox {
21
+ baseMediaDecodeTime: number;
22
+ }
23
+ export interface TrunBox {
24
+ sampleCount: number;
25
+ dataOffset?: number;
26
+ firstSampleFlags?: number;
27
+ samples: TrunSample[];
28
+ }
29
+ export interface TrafBox {
30
+ tfhd?: TfhdBox;
31
+ tfdt?: TfdtBox;
32
+ truns: TrunBox[];
33
+ }
34
+ export interface MoofBox {
35
+ mfhd?: {
36
+ sequenceNumber: number;
37
+ };
38
+ trafs: TrafBox[];
39
+ dataOffset: number;
40
+ size: number;
41
+ }
42
+ export interface VideoSample {
43
+ data: Uint8Array;
44
+ dts: number;
45
+ pts: number;
46
+ duration: number;
47
+ isSync: boolean;
48
+ }
49
+ export interface InitSegment {
50
+ trackId: number;
51
+ timescale: number;
52
+ avcC?: Uint8Array;
53
+ }
54
+ export declare class fMP4Demuxer {
55
+ private timescale;
56
+ private trackId;
57
+ private avcC;
58
+ /**
59
+ * 解析初始化段 (ftyp + moov)
60
+ */
61
+ parseInitSegment(data: Uint8Array): InitSegment | null;
62
+ /**
63
+ * 解析 moov box
64
+ */
65
+ private parseMoov;
66
+ /**
67
+ * 解析 trak box
68
+ */
69
+ private parseTrak;
70
+ /**
71
+ * 解析 mdia box
72
+ */
73
+ private parseMdia;
74
+ /**
75
+ * 解析 mdhd box 获取 timescale
76
+ */
77
+ private parseMdhd;
78
+ /**
79
+ * 解析 minf box
80
+ */
81
+ private parseMinf;
82
+ /**
83
+ * 解析 stbl box 获取 avcC
84
+ */
85
+ private parseStbl;
86
+ /**
87
+ * 解析 stsd box 获取 avcC
88
+ */
89
+ private parseStsd;
90
+ /**
91
+ * 解析 AVC Sample Entry
92
+ */
93
+ private parseAvcSampleEntry;
94
+ /**
95
+ * 解析 moof box
96
+ */
97
+ parseMoof(data: Uint8Array, moofOffset: number): MoofBox;
98
+ /**
99
+ * 解析 traf box
100
+ */
101
+ private parseTraf;
102
+ /**
103
+ * 解析 tfhd box
104
+ */
105
+ private parseTfhd;
106
+ /**
107
+ * 解析 tfdt box
108
+ */
109
+ private parseTfdt;
110
+ /**
111
+ * 解析 trun box
112
+ */
113
+ private parseTrun;
114
+ /**
115
+ * 从 moof + mdat 提取视频样本
116
+ */
117
+ extractSamples(moof: MoofBox, mdatData: Uint8Array, mdatOffset: number): VideoSample[];
118
+ /**
119
+ * 获取 timescale
120
+ */
121
+ getTimescale(): number;
122
+ /**
123
+ * 获取 avcC 配置
124
+ */
125
+ getAvcC(): Uint8Array | null;
126
+ }
127
+ /**
128
+ * 检测是否为 fMP4 格式
129
+ */
130
+ export declare function isFragmentedMp4(data: Uint8Array): boolean;
131
+ //# sourceMappingURL=fMP4Demuxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fMP4Demuxer.d.ts","sourceRoot":"","sources":["../../src/demuxer/fMP4Demuxer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8CH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;IACjC,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,IAAI,CAA0B;IAEtC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAuBtD;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAiCxD;;OAEG;IACH,OAAO,CAAC,SAAS;IA8BjB;;OAEG;IACH,OAAO,CAAC,SAAS;IA+BjB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAiEjB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE;IA4CtF;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,IAAI,UAAU,GAAG,IAAI;CAG7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAuBzD"}
@@ -0,0 +1,7 @@
1
+ export { TSDemuxer, type TSPacket } from './TSDemuxer';
2
+ export { PESExtractor } from './PESExtractor';
3
+ export { fMP4Demuxer, isFragmentedMp4, type VideoSample, type MoofBox, type InitSegment } from './fMP4Demuxer';
4
+ export { FLVDemuxer, isFLV } from './FLVDemuxer';
5
+ export { FormatDetector, type StreamFormat } from './FormatDetector';
6
+ export { DemuxerFactory, type DemuxerInterface } from './DemuxerFactory';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/demuxer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9G,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * 环境检测器
3
+ *
4
+ * 检测当前运行环境:
5
+ * - 微信小程序 WebView
6
+ * - PC 浏览器
7
+ * - 移动端浏览器
8
+ *
9
+ * 同时检测各种能力:SIMD、WebGL、WebAudio 等
10
+ */
11
+ /**
12
+ * 运行平台
13
+ */
14
+ export declare enum Platform {
15
+ /** PC 浏览器 */
16
+ PC_BROWSER = "pc-browser",
17
+ /** 移动端浏览器 */
18
+ MOBILE_BROWSER = "mobile-browser",
19
+ /** 微信小程序 WebView */
20
+ WECHAT_MINIPROGRAM = "wechat-miniprogram",
21
+ /** 支付宝小程序 WebView */
22
+ ALIPAY_MINIPROGRAM = "alipay-miniprogram",
23
+ /** 其他小程序 */
24
+ OTHER_MINIPROGRAM = "other-miniprogram",
25
+ /** 未知环境 */
26
+ UNKNOWN = "unknown"
27
+ }
28
+ /**
29
+ * 环境类型(简化分类)
30
+ */
31
+ export declare enum EnvType {
32
+ /** 浏览器环境(PC + 移动端) */
33
+ BROWSER = "browser",
34
+ /** 小程序环境 */
35
+ MINIPROGRAM = "miniprogram"
36
+ }
37
+ /**
38
+ * 环境能力
39
+ */
40
+ export interface EnvCapabilities {
41
+ /** SharedArrayBuffer 是否可用 */
42
+ sharedArrayBuffer: boolean;
43
+ /** WASM 多线程是否可用 */
44
+ wasmThreads: boolean;
45
+ /** WASM SIMD 是否可用 */
46
+ wasmSimd: boolean;
47
+ /** WebGL 是否可用 */
48
+ webGL: boolean;
49
+ /** WebGL 2 是否可用 */
50
+ webGL2: boolean;
51
+ /** VideoFrame API 是否可用 */
52
+ videoFrame: boolean;
53
+ /** OffscreenCanvas 是否可用 */
54
+ offscreenCanvas: boolean;
55
+ /** Web Audio API 是否可用 */
56
+ webAudio: boolean;
57
+ /** Web Worker 是否可用 */
58
+ webWorker: boolean;
59
+ /** Fetch API 是否可用 */
60
+ fetch: boolean;
61
+ /** WebSocket 是否可用 */
62
+ webSocket: boolean;
63
+ /** 是否支持 ReadableStream */
64
+ readableStream: boolean;
65
+ }
66
+ /**
67
+ * 环境检测结果
68
+ */
69
+ export interface EnvInfo {
70
+ /** 平台类型 */
71
+ platform: Platform;
72
+ /** 环境类型(简化) */
73
+ envType: EnvType;
74
+ /** 是否为小程序环境 */
75
+ isMiniProgram: boolean;
76
+ /** 是否为微信小程序 */
77
+ isWeChat: boolean;
78
+ /** 是否为移动设备 */
79
+ isMobile: boolean;
80
+ /** User Agent 字符串 */
81
+ userAgent: string;
82
+ /** 环境能力 */
83
+ capabilities: EnvCapabilities;
84
+ }
85
+ /**
86
+ * 环境检测器
87
+ *
88
+ * 使用方式:
89
+ * ```typescript
90
+ * const env = EnvDetector.detect()
91
+ * console.log(env.platform) // Platform.PC_BROWSER
92
+ * console.log(env.isMiniProgram) // false
93
+ * console.log(env.capabilities.wasmSimd) // true
94
+ * ```
95
+ */
96
+ export declare class EnvDetector {
97
+ private static cache;
98
+ /**
99
+ * 检测当前环境(带缓存)
100
+ */
101
+ static detect(): EnvInfo;
102
+ /**
103
+ * 获取 User Agent
104
+ */
105
+ private static getUserAgent;
106
+ /**
107
+ * 检测平台类型
108
+ */
109
+ private static detectPlatform;
110
+ /**
111
+ * 检测微信小程序环境(内部方法)
112
+ */
113
+ private static checkIsWeChatMiniProgram;
114
+ /**
115
+ * 判断是否为小程序环境
116
+ */
117
+ private static isMiniProgramEnv;
118
+ /**
119
+ * 检测是否为移动设备
120
+ */
121
+ private static isMobileDevice;
122
+ /**
123
+ * 检测环境能力
124
+ */
125
+ private static detectCapabilities;
126
+ /**
127
+ * 检测 SharedArrayBuffer
128
+ */
129
+ private static checkSharedArrayBuffer;
130
+ /**
131
+ * 检测 WASM SIMD 支持
132
+ */
133
+ private static checkWasmSimd;
134
+ /**
135
+ * 检测 WebGL 支持
136
+ */
137
+ private static checkWebGL;
138
+ /**
139
+ * 检测 WebGL 2 支持
140
+ */
141
+ private static checkWebGL2;
142
+ /**
143
+ * 清除缓存(用于测试)
144
+ */
145
+ static resetCache(): void;
146
+ /**
147
+ * 快速判断是否为小程序环境
148
+ */
149
+ static isMiniProgram(): boolean;
150
+ /**
151
+ * 快速判断是否为微信小程序
152
+ */
153
+ static isWeChatMiniProgram(): boolean;
154
+ /**
155
+ * 快速获取平台类型
156
+ */
157
+ static getPlatform(): Platform;
158
+ /**
159
+ * 快速获取环境能力
160
+ */
161
+ static getCapabilities(): EnvCapabilities;
162
+ /**
163
+ * 打印环境信息(调试用)
164
+ */
165
+ static printEnvInfo(): void;
166
+ }
167
+ //# sourceMappingURL=EnvDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvDetector.d.ts","sourceRoot":"","sources":["../../src/env/EnvDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,oBAAY,QAAQ;IAClB,aAAa;IACb,UAAU,eAAe;IACzB,aAAa;IACb,cAAc,mBAAmB;IACjC,oBAAoB;IACpB,kBAAkB,uBAAuB;IACzC,qBAAqB;IACrB,kBAAkB,uBAAuB;IACzC,YAAY;IACZ,iBAAiB,sBAAsB;IACvC,WAAW;IACX,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,OAAO;IACjB,sBAAsB;IACtB,OAAO,YAAY;IACnB,YAAY;IACZ,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mBAAmB;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,qBAAqB;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,iBAAiB;IACjB,KAAK,EAAE,OAAO,CAAA;IACd,mBAAmB;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,0BAA0B;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,2BAA2B;IAC3B,eAAe,EAAE,OAAO,CAAA;IACxB,yBAAyB;IACzB,QAAQ,EAAE,OAAO,CAAA;IACjB,sBAAsB;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,qBAAqB;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,qBAAqB;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,cAAc,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,WAAW;IACX,QAAQ,EAAE,QAAQ,CAAA;IAClB,eAAe;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe;IACf,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW;IACX,YAAY,EAAE,eAAe,CAAA;CAC9B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAuB;IAE3C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,OAAO;IAyBxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAyC7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAqCvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAgB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA8CjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAsBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA2C5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAczB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAc1B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,OAAO;IAIrC;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,QAAQ;IAI9B;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,eAAe;IAIzC;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,IAAI;CAY5B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 环境检测模块
3
+ */
4
+ export { EnvDetector, Platform, EnvType, type EnvInfo, type EnvCapabilities, } from './EnvDetector';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/env/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,OAAO,EACP,KAAK,OAAO,EACZ,KAAK,eAAe,GACrB,MAAM,eAAe,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @gtplayer/core
3
+ *
4
+ * HLS/FLV 视频播放器核心库
5
+ * 支持 WASM 软解码、SIMD 加速、流式播放
6
+ */
7
+ export { EcPlayerCore, type EcPlayerCoreConfig } from './player';
8
+ export { EnvDetector, type EnvInfo, type EnvCapabilities } from './env';
9
+ export type { PlayerState as EcPlayerState, PlayerCallbacks as EcPlayerCallbacks } from './types';
10
+ export { LogLevel, setLogLevel } from './utils';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAGhE,OAAO,EACL,WAAW,EACX,KAAK,OAAO,EACZ,KAAK,eAAe,EACrB,MAAM,OAAO,CAAA;AAGd,YAAY,EACV,WAAW,IAAI,aAAa,EAC5B,eAAe,IAAI,iBAAiB,EACrC,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}