hls-streamer 3.1.0 → 4.0.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 (76) hide show
  1. package/README.md +141 -106
  2. package/dist/Interfaces/HlsStreamer.d.ts +4 -3
  3. package/dist/Interfaces/HlsStreamer.d.ts.map +1 -1
  4. package/dist/Libs/FileLib.d.ts +11 -5
  5. package/dist/Libs/FileLib.d.ts.map +1 -1
  6. package/dist/Libs/FileLib.js +9 -3
  7. package/dist/Libs/FileLib.js.map +1 -1
  8. package/dist/Libs/FormatDetector.d.ts +3 -3
  9. package/dist/Libs/FormatDetector.d.ts.map +1 -1
  10. package/dist/Libs/FormatDetector.js +19 -2
  11. package/dist/Libs/FormatDetector.js.map +1 -1
  12. package/dist/Parsers/AacParser.d.ts +4 -4
  13. package/dist/Parsers/AacParser.d.ts.map +1 -1
  14. package/dist/Parsers/AacParser.js +5 -1
  15. package/dist/Parsers/AacParser.js.map +1 -1
  16. package/dist/Parsers/FlacParser.d.ts +4 -4
  17. package/dist/Parsers/IAudioParser.d.ts +1 -30
  18. package/dist/Parsers/IAudioParser.d.ts.map +1 -1
  19. package/dist/Parsers/IMediaParser.d.ts +43 -0
  20. package/dist/Parsers/IMediaParser.d.ts.map +1 -0
  21. package/dist/Parsers/IMediaParser.js +2 -0
  22. package/dist/Parsers/IMediaParser.js.map +1 -0
  23. package/dist/Parsers/Mp3Parser.d.ts +4 -4
  24. package/dist/Parsers/Mp4Parser.d.ts +21 -0
  25. package/dist/Parsers/Mp4Parser.d.ts.map +1 -0
  26. package/dist/Parsers/Mp4Parser.js +418 -0
  27. package/dist/Parsers/Mp4Parser.js.map +1 -0
  28. package/dist/Parsers/OggParser.d.ts +4 -4
  29. package/dist/Parsers/ParserFactory.d.ts +5 -5
  30. package/dist/Parsers/ParserFactory.d.ts.map +1 -1
  31. package/dist/Parsers/ParserFactory.js +6 -3
  32. package/dist/Parsers/ParserFactory.js.map +1 -1
  33. package/dist/Parsers/WavParser.d.ts +4 -4
  34. package/dist/cjs/Interfaces/HlsStreamer.d.ts +4 -3
  35. package/dist/cjs/Interfaces/HlsStreamer.d.ts.map +1 -1
  36. package/dist/cjs/Libs/FileLib.d.ts +11 -5
  37. package/dist/cjs/Libs/FileLib.d.ts.map +1 -1
  38. package/dist/cjs/Libs/FileLib.js +9 -3
  39. package/dist/cjs/Libs/FileLib.js.map +1 -1
  40. package/dist/cjs/Libs/FormatDetector.d.ts +3 -3
  41. package/dist/cjs/Libs/FormatDetector.d.ts.map +1 -1
  42. package/dist/cjs/Libs/FormatDetector.js +19 -2
  43. package/dist/cjs/Libs/FormatDetector.js.map +1 -1
  44. package/dist/cjs/Parsers/AacParser.d.ts +4 -4
  45. package/dist/cjs/Parsers/AacParser.d.ts.map +1 -1
  46. package/dist/cjs/Parsers/AacParser.js +5 -1
  47. package/dist/cjs/Parsers/AacParser.js.map +1 -1
  48. package/dist/cjs/Parsers/FlacParser.d.ts +4 -4
  49. package/dist/cjs/Parsers/IAudioParser.d.ts +1 -30
  50. package/dist/cjs/Parsers/IAudioParser.d.ts.map +1 -1
  51. package/dist/cjs/Parsers/IMediaParser.d.ts +43 -0
  52. package/dist/cjs/Parsers/IMediaParser.d.ts.map +1 -0
  53. package/dist/cjs/Parsers/IMediaParser.js +3 -0
  54. package/dist/cjs/Parsers/IMediaParser.js.map +1 -0
  55. package/dist/cjs/Parsers/Mp3Parser.d.ts +4 -4
  56. package/dist/cjs/Parsers/Mp4Parser.d.ts +21 -0
  57. package/dist/cjs/Parsers/Mp4Parser.d.ts.map +1 -0
  58. package/dist/cjs/Parsers/Mp4Parser.js +422 -0
  59. package/dist/cjs/Parsers/Mp4Parser.js.map +1 -0
  60. package/dist/cjs/Parsers/OggParser.d.ts +4 -4
  61. package/dist/cjs/Parsers/ParserFactory.d.ts +5 -5
  62. package/dist/cjs/Parsers/ParserFactory.d.ts.map +1 -1
  63. package/dist/cjs/Parsers/ParserFactory.js +6 -3
  64. package/dist/cjs/Parsers/ParserFactory.js.map +1 -1
  65. package/dist/cjs/Parsers/WavParser.d.ts +4 -4
  66. package/dist/cjs/errors/HlsStreamerErrors.js +1 -1
  67. package/dist/cjs/index.d.ts +1 -0
  68. package/dist/cjs/index.d.ts.map +1 -1
  69. package/dist/cjs/index.js +21 -6
  70. package/dist/cjs/index.js.map +1 -1
  71. package/dist/errors/HlsStreamerErrors.js +1 -1
  72. package/dist/index.d.ts +1 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +21 -6
  75. package/dist/index.js.map +1 -1
  76. package/package.json +8 -3
@@ -1,11 +1,11 @@
1
- import { IAudioParser, AudioFileInfo, AudioFormat } from './IAudioParser';
2
- export declare class AacParser implements IAudioParser {
1
+ import { IMediaParser, MediaFileInfo, MediaFormat } from './IMediaParser';
2
+ export declare class AacParser implements IMediaParser {
3
3
  private static readonly SAMPLE_RATES;
4
- getFormat(): AudioFormat;
4
+ getFormat(): MediaFormat;
5
5
  canParse(buffer: Buffer): boolean;
6
6
  analyze(buffer: Buffer, opts?: {
7
7
  fileSize?: number;
8
- }): AudioFileInfo;
8
+ }): MediaFileInfo;
9
9
  private analyzeAdts;
10
10
  private analyzeM4a;
11
11
  private parseAdtsHeader;
@@ -1 +1 @@
1
- {"version":3,"file":"AacParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/AacParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM1F,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAGlC;IAEF,SAAS,IAAI,WAAW;IAKxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAkBjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;IAWxE,OAAO,CAAC,WAAW;IA8FnB,OAAO,CAAC,UAAU;IAuGlB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,aAAa;CAwBtB"}
1
+ {"version":3,"file":"AacParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/AacParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM1F,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAGlC;IAEF,SAAS,IAAI,WAAW;IAKxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAsBjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;IAWxE,OAAO,CAAC,WAAW;IA8FnB,OAAO,CAAC,UAAU;IAuGlB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,aAAa;CAwBtB"}
@@ -7,7 +7,11 @@ export class AacParser {
7
7
  return false;
8
8
  }
9
9
  if (buffer.length >= 12 && buffer.toString('ascii', 4, 8) === 'ftyp') {
10
- return true;
10
+ const brand = buffer.toString('ascii', 8, 12);
11
+ if (brand === 'M4A ' || brand === 'M4B ') {
12
+ return true;
13
+ }
14
+ return false;
11
15
  }
12
16
  if (buffer[0] === 0xff && (buffer[1] & 0xf6) === 0xf0) {
13
17
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"AacParser.js","sourceRoot":"","sources":["../../src/Parsers/AacParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AacParser.js","sourceRoot":"","sources":["../../src/Parsers/AacParser.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
- import { IAudioParser, AudioFileInfo, AudioFormat } from './IAudioParser';
2
- export declare class FlacParser implements IAudioParser {
1
+ import { IMediaParser, MediaFileInfo, MediaFormat } from './IMediaParser';
2
+ export declare class FlacParser implements IMediaParser {
3
3
  private static readonly FLAC_SIGNATURE;
4
- getFormat(): AudioFormat;
4
+ getFormat(): MediaFormat;
5
5
  canParse(buffer: Buffer): boolean;
6
6
  analyze(buffer: Buffer, opts?: {
7
7
  fileSize?: number;
8
- }): AudioFileInfo;
8
+ }): MediaFileInfo;
9
9
  private parseStreamInfo;
10
10
  private findNextFrameSync;
11
11
  private parseFrameHeader;
@@ -1,31 +1,2 @@
1
- export type AudioFormat = 'mp3' | 'aac' | 'm4a' | 'ogg' | 'flac' | 'wav';
2
- export interface AudioFrameInfo {
3
- index: number;
4
- offset: number;
5
- length: number;
6
- duration: number;
7
- samples: number;
8
- sampleRate: number;
9
- bitrate: number;
10
- }
11
- export interface AudioFileInfo {
12
- format: AudioFormat;
13
- size: number;
14
- duration: number;
15
- audioDataSize: number;
16
- sampleRate?: number;
17
- averageBitrate?: number;
18
- bitDepth?: number;
19
- channels?: number;
20
- frames: AudioFrameInfo[];
21
- warnings?: string[];
22
- metadata?: Record<string, any>;
23
- }
24
- export interface IAudioParser {
25
- analyze(buffer: Buffer, opts?: {
26
- fileSize?: number;
27
- }): AudioFileInfo;
28
- getFormat(): AudioFormat;
29
- canParse(buffer: Buffer): boolean;
30
- }
1
+ export type { MediaFormat, MediaFrameInfo, MediaFileInfo, IMediaParser, AudioFormat, AudioFrameInfo, AudioFileInfo, IAudioParser, } from './IMediaParser';
31
2
  //# sourceMappingURL=IAudioParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IAudioParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/IAudioParser.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAKzE,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,WAAW,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,CAAC;IAEtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,cAAc,EAAE,CAAC;IAEzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAKD,MAAM,WAAW,YAAY;IAM3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IAKrE,SAAS,IAAI,WAAW,CAAC;IAMzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC"}
1
+ {"version":3,"file":"IAudioParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/IAudioParser.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,43 @@
1
+ export type MediaFormat = 'mp3' | 'aac' | 'm4a' | 'ogg' | 'flac' | 'wav' | 'mp4' | 'mov' | 'm4v';
2
+ export interface MediaFrameInfo {
3
+ index: number;
4
+ offset: number;
5
+ length: number;
6
+ duration: number;
7
+ samples: number;
8
+ sampleRate: number;
9
+ bitrate: number;
10
+ keyFrame?: boolean;
11
+ }
12
+ export interface MediaFileInfo {
13
+ format: MediaFormat;
14
+ size: number;
15
+ duration: number;
16
+ audioDataSize: number;
17
+ sampleRate?: number;
18
+ averageBitrate?: number;
19
+ bitDepth?: number;
20
+ channels?: number;
21
+ frames: MediaFrameInfo[];
22
+ warnings?: string[];
23
+ metadata?: Record<string, any>;
24
+ initSegment?: {
25
+ offset: number;
26
+ length: number;
27
+ };
28
+ width?: number;
29
+ height?: number;
30
+ frameRate?: number;
31
+ }
32
+ export interface IMediaParser {
33
+ analyze(buffer: Buffer, opts?: {
34
+ fileSize?: number;
35
+ }): MediaFileInfo;
36
+ getFormat(): MediaFormat;
37
+ canParse(buffer: Buffer): boolean;
38
+ }
39
+ export type AudioFormat = MediaFormat;
40
+ export type AudioFrameInfo = MediaFrameInfo;
41
+ export type AudioFileInfo = MediaFileInfo;
42
+ export type IAudioParser = IMediaParser;
43
+ //# sourceMappingURL=IMediaParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMediaParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/IMediaParser.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAKjG,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,WAAW,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,CAAC;IAEtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,cAAc,EAAE,CAAC;IAEzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,WAAW,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,YAAY;IAM3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IAKrE,SAAS,IAAI,WAAW,CAAC;IAMzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAOD,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC;AAGtC,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC;AAG5C,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC;AAG1C,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IMediaParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMediaParser.js","sourceRoot":"","sources":["../../src/Parsers/IMediaParser.ts"],"names":[],"mappings":""}
@@ -1,12 +1,12 @@
1
- import { IAudioParser, AudioFileInfo, AudioFormat } from './IAudioParser';
2
- export declare class Mp3Parser implements IAudioParser {
1
+ import { IMediaParser, MediaFileInfo, MediaFormat } from './IMediaParser';
2
+ export declare class Mp3Parser implements IMediaParser {
3
3
  private static readonly BITRATE_INDEX;
4
4
  private static readonly SAMPLE_RATE_INDEX;
5
- getFormat(): AudioFormat;
5
+ getFormat(): MediaFormat;
6
6
  canParse(buffer: Buffer): boolean;
7
7
  analyze(buffer: Buffer, opts?: {
8
8
  fileSize?: number;
9
- }): AudioFileInfo;
9
+ }): MediaFileInfo;
10
10
  private calculateFrameLength;
11
11
  private getId3Offsets;
12
12
  private syncSafeInteger;
@@ -0,0 +1,21 @@
1
+ import { IMediaParser, MediaFileInfo, MediaFormat } from './IMediaParser';
2
+ export declare class Mp4Parser implements IMediaParser {
3
+ getFormat(): MediaFormat;
4
+ canParse(buffer: Buffer): boolean;
5
+ analyze(buffer: Buffer, opts?: {
6
+ fileSize?: number;
7
+ }): MediaFileInfo;
8
+ private detectFormat;
9
+ private findTopLevelBox;
10
+ private findBox;
11
+ private findAllBoxes;
12
+ private parseTracks;
13
+ private parseTrack;
14
+ private parseStts;
15
+ private parseStsz;
16
+ private parseStco;
17
+ private parseStss;
18
+ private parseStsc;
19
+ private buildFrameTable;
20
+ }
21
+ //# sourceMappingURL=Mp4Parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mp4Parser.d.ts","sourceRoot":"","sources":["../../src/Parsers/Mp4Parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA6B1F,qBAAa,SAAU,YAAW,YAAY;IAC5C,SAAS,IAAI,WAAW;IAIxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;IAgGxE,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,OAAO;IA0Bf,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAkGlB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,eAAe;CAmExB"}
@@ -0,0 +1,418 @@
1
+ export class Mp4Parser {
2
+ getFormat() {
3
+ return 'mp4';
4
+ }
5
+ canParse(buffer) {
6
+ if (buffer.length < 12)
7
+ return false;
8
+ const boxType = buffer.toString('ascii', 4, 8);
9
+ if (boxType !== 'ftyp')
10
+ return false;
11
+ const brand = buffer.toString('ascii', 8, 12);
12
+ const videoBrands = ['isom', 'mp41', 'mp42', 'M4V ', 'M4A ', 'avc1', 'iso2', 'iso5', 'iso6'];
13
+ return videoBrands.includes(brand) || boxType === 'ftyp';
14
+ }
15
+ analyze(buffer, opts = {}) {
16
+ const size = opts.fileSize ?? buffer.length;
17
+ const warnings = [];
18
+ const format = this.detectFormat(buffer);
19
+ const moovBox = this.findTopLevelBox(buffer, 'moov');
20
+ if (!moovBox) {
21
+ return {
22
+ format,
23
+ size,
24
+ duration: 0,
25
+ audioDataSize: 0,
26
+ frames: [],
27
+ warnings: ['Could not find moov box']
28
+ };
29
+ }
30
+ const initSegment = { offset: moovBox.offset, length: moovBox.size };
31
+ const moovData = buffer.subarray(moovBox.dataOffset, moovBox.offset + moovBox.size);
32
+ const mvhd = this.findBox(moovData, 'mvhd');
33
+ let movieTimescale = 1000;
34
+ let movieDuration = 0;
35
+ if (mvhd) {
36
+ const d = moovData;
37
+ const o = mvhd.dataOffset;
38
+ const version = d[o];
39
+ if (version === 1) {
40
+ movieTimescale = d.readUInt32BE(o + 16);
41
+ movieDuration = Number(d.readBigUInt64BE(o + 20));
42
+ }
43
+ else {
44
+ movieTimescale = d.readUInt32BE(o + 8);
45
+ movieDuration = d.readUInt32BE(o + 12);
46
+ }
47
+ }
48
+ const totalDurationSeconds = movieTimescale > 0 ? movieDuration / movieTimescale : 0;
49
+ const tracks = this.parseTracks(moovData, warnings);
50
+ const videoTrack = tracks.find(t => t.isVideo) ?? tracks[0];
51
+ if (!videoTrack) {
52
+ return {
53
+ format,
54
+ size,
55
+ duration: totalDurationSeconds,
56
+ audioDataSize: 0,
57
+ frames: [],
58
+ initSegment,
59
+ warnings: ['No tracks found']
60
+ };
61
+ }
62
+ const frames = this.buildFrameTable(videoTrack, warnings);
63
+ const audioDataSize = frames.reduce((acc, f) => acc + f.length, 0);
64
+ const averageBitrate = totalDurationSeconds > 0
65
+ ? (audioDataSize * 8) / totalDurationSeconds / 1000
66
+ : undefined;
67
+ const result = {
68
+ format,
69
+ size,
70
+ duration: totalDurationSeconds,
71
+ audioDataSize,
72
+ frames,
73
+ initSegment,
74
+ };
75
+ if (videoTrack.isVideo) {
76
+ result.width = videoTrack.width;
77
+ result.height = videoTrack.height;
78
+ if (videoTrack.frameRate > 0) {
79
+ result.frameRate = videoTrack.frameRate;
80
+ }
81
+ }
82
+ if (averageBitrate !== undefined) {
83
+ result.averageBitrate = averageBitrate;
84
+ }
85
+ result.metadata = { container: format === 'mov' ? 'mov' : 'mp4' };
86
+ if (warnings.length > 0) {
87
+ result.warnings = warnings;
88
+ }
89
+ return result;
90
+ }
91
+ detectFormat(buffer) {
92
+ if (buffer.length < 12)
93
+ return 'mp4';
94
+ const brand = buffer.toString('ascii', 8, 12);
95
+ if (brand === 'qt ')
96
+ return 'mov';
97
+ if (brand.startsWith('M4V'))
98
+ return 'm4v';
99
+ return 'mp4';
100
+ }
101
+ findTopLevelBox(buffer, type) {
102
+ let offset = 0;
103
+ while (offset + 8 <= buffer.length) {
104
+ let size = buffer.readUInt32BE(offset);
105
+ const boxType = buffer.toString('ascii', offset + 4, offset + 8);
106
+ let dataOffset = offset + 8;
107
+ if (size === 1) {
108
+ if (offset + 16 > buffer.length)
109
+ break;
110
+ size = Number(buffer.readBigUInt64BE(offset + 8));
111
+ dataOffset = offset + 16;
112
+ }
113
+ else if (size === 0) {
114
+ size = buffer.length - offset;
115
+ }
116
+ if (size < 8)
117
+ break;
118
+ if (boxType === type) {
119
+ return { offset, size, type: boxType, dataOffset };
120
+ }
121
+ offset += size;
122
+ }
123
+ return null;
124
+ }
125
+ findBox(data, type) {
126
+ let offset = 0;
127
+ while (offset + 8 <= data.length) {
128
+ let size = data.readUInt32BE(offset);
129
+ const boxType = data.toString('ascii', offset + 4, offset + 8);
130
+ let dataOffset = offset + 8;
131
+ if (size === 1) {
132
+ if (offset + 16 > data.length)
133
+ break;
134
+ size = Number(data.readBigUInt64BE(offset + 8));
135
+ dataOffset = offset + 16;
136
+ }
137
+ else if (size === 0) {
138
+ size = data.length - offset;
139
+ }
140
+ if (size < 8)
141
+ break;
142
+ if (boxType === type) {
143
+ return { offset, size, type: boxType, dataOffset };
144
+ }
145
+ offset += size;
146
+ }
147
+ return null;
148
+ }
149
+ findAllBoxes(data, type) {
150
+ const results = [];
151
+ let offset = 0;
152
+ while (offset + 8 <= data.length) {
153
+ let size = data.readUInt32BE(offset);
154
+ const boxType = data.toString('ascii', offset + 4, offset + 8);
155
+ let dataOffset = offset + 8;
156
+ if (size === 1) {
157
+ if (offset + 16 > data.length)
158
+ break;
159
+ size = Number(data.readBigUInt64BE(offset + 8));
160
+ dataOffset = offset + 16;
161
+ }
162
+ else if (size === 0) {
163
+ size = data.length - offset;
164
+ }
165
+ if (size < 8)
166
+ break;
167
+ if (boxType === type) {
168
+ results.push({ offset, size, type: boxType, dataOffset });
169
+ }
170
+ offset += size;
171
+ }
172
+ return results;
173
+ }
174
+ parseTracks(moovData, warnings) {
175
+ const trakBoxes = this.findAllBoxes(moovData, 'trak');
176
+ const tracks = [];
177
+ for (const trak of trakBoxes) {
178
+ const trakData = moovData.subarray(trak.dataOffset, trak.offset + trak.size);
179
+ const track = this.parseTrack(trakData, warnings);
180
+ if (track)
181
+ tracks.push(track);
182
+ }
183
+ return tracks;
184
+ }
185
+ parseTrack(trakData, warnings) {
186
+ const tkhd = this.findBox(trakData, 'tkhd');
187
+ let width = 0;
188
+ let height = 0;
189
+ if (tkhd) {
190
+ const o = tkhd.dataOffset;
191
+ const version = trakData[o];
192
+ const tkhdSize = tkhd.size;
193
+ if (version === 1 && tkhdSize >= 96) {
194
+ width = trakData.readUInt32BE(o + 76) >> 16;
195
+ height = trakData.readUInt32BE(o + 80) >> 16;
196
+ }
197
+ else if (tkhdSize >= 84) {
198
+ width = trakData.readUInt32BE(o + 52) >> 16;
199
+ height = trakData.readUInt32BE(o + 56) >> 16;
200
+ }
201
+ }
202
+ const mdia = this.findBox(trakData, 'mdia');
203
+ if (!mdia)
204
+ return null;
205
+ const mdiaData = trakData.subarray(mdia.dataOffset, mdia.offset + mdia.size);
206
+ const mdhd = this.findBox(mdiaData, 'mdhd');
207
+ let timescale = 1000;
208
+ let trackDuration = 0;
209
+ if (mdhd) {
210
+ const o = mdhd.dataOffset;
211
+ const version = mdiaData[o];
212
+ if (version === 1) {
213
+ timescale = mdiaData.readUInt32BE(o + 16);
214
+ trackDuration = Number(mdiaData.readBigUInt64BE(o + 20));
215
+ }
216
+ else {
217
+ timescale = mdiaData.readUInt32BE(o + 8);
218
+ trackDuration = mdiaData.readUInt32BE(o + 12);
219
+ }
220
+ }
221
+ const hdlr = this.findBox(mdiaData, 'hdlr');
222
+ let isVideo = false;
223
+ if (hdlr) {
224
+ const handlerType = mdiaData.toString('ascii', hdlr.dataOffset + 4, hdlr.dataOffset + 8);
225
+ isVideo = handlerType === 'vide';
226
+ }
227
+ const minf = this.findBox(mdiaData, 'minf');
228
+ if (!minf)
229
+ return null;
230
+ const minfData = mdiaData.subarray(minf.dataOffset, minf.offset + minf.size);
231
+ const stbl = this.findBox(minfData, 'stbl');
232
+ if (!stbl)
233
+ return null;
234
+ const stblData = minfData.subarray(stbl.dataOffset, stbl.offset + stbl.size);
235
+ const sttsEntries = this.parseStts(stblData);
236
+ const { defaultSize, sampleCount, sizes } = this.parseStsz(stblData);
237
+ const chunkOffsets = this.parseStco(stblData);
238
+ const keyframeSet = this.parseStss(stblData);
239
+ const stscEntries = this.parseStsc(stblData);
240
+ let frameRate = 0;
241
+ if (sttsEntries.length > 0 && timescale > 0) {
242
+ const firstEntry = sttsEntries[0];
243
+ if (firstEntry.delta > 0) {
244
+ frameRate = timescale / firstEntry.delta;
245
+ }
246
+ }
247
+ return {
248
+ timescale,
249
+ duration: trackDuration,
250
+ width,
251
+ height,
252
+ isVideo,
253
+ sttsEntries,
254
+ stszSizes: sizes,
255
+ stszDefaultSize: defaultSize,
256
+ stszSampleCount: sampleCount,
257
+ stcoOffsets: chunkOffsets,
258
+ stssKeyframes: keyframeSet,
259
+ stscEntries,
260
+ frameRate,
261
+ };
262
+ }
263
+ parseStts(stblData) {
264
+ const stts = this.findBox(stblData, 'stts');
265
+ if (!stts)
266
+ return [];
267
+ const o = stts.dataOffset;
268
+ const entryCount = stblData.readUInt32BE(o + 4);
269
+ const entries = [];
270
+ for (let i = 0; i < entryCount; i++) {
271
+ const base = o + 8 + i * 8;
272
+ if (base + 8 > stblData.length)
273
+ break;
274
+ entries.push({
275
+ count: stblData.readUInt32BE(base),
276
+ delta: stblData.readUInt32BE(base + 4),
277
+ });
278
+ }
279
+ return entries;
280
+ }
281
+ parseStsz(stblData) {
282
+ const stsz = this.findBox(stblData, 'stsz');
283
+ if (!stsz)
284
+ return { defaultSize: 0, sampleCount: 0, sizes: [] };
285
+ const o = stsz.dataOffset;
286
+ const defaultSize = stblData.readUInt32BE(o + 4);
287
+ const sampleCount = stblData.readUInt32BE(o + 8);
288
+ const sizes = [];
289
+ if (defaultSize === 0) {
290
+ for (let i = 0; i < sampleCount; i++) {
291
+ const base = o + 12 + i * 4;
292
+ if (base + 4 > stblData.length)
293
+ break;
294
+ sizes.push(stblData.readUInt32BE(base));
295
+ }
296
+ }
297
+ return { defaultSize, sampleCount, sizes };
298
+ }
299
+ parseStco(stblData) {
300
+ const co64 = this.findBox(stblData, 'co64');
301
+ if (co64) {
302
+ const o = co64.dataOffset;
303
+ const entryCount = stblData.readUInt32BE(o + 4);
304
+ const offsets = [];
305
+ for (let i = 0; i < entryCount; i++) {
306
+ const base = o + 8 + i * 8;
307
+ if (base + 8 > stblData.length)
308
+ break;
309
+ offsets.push(Number(stblData.readBigUInt64BE(base)));
310
+ }
311
+ return offsets;
312
+ }
313
+ const stco = this.findBox(stblData, 'stco');
314
+ if (!stco)
315
+ return [];
316
+ const o = stco.dataOffset;
317
+ const entryCount = stblData.readUInt32BE(o + 4);
318
+ const offsets = [];
319
+ for (let i = 0; i < entryCount; i++) {
320
+ const base = o + 8 + i * 4;
321
+ if (base + 4 > stblData.length)
322
+ break;
323
+ offsets.push(stblData.readUInt32BE(base));
324
+ }
325
+ return offsets;
326
+ }
327
+ parseStss(stblData) {
328
+ const stss = this.findBox(stblData, 'stss');
329
+ const keyframes = new Set();
330
+ if (!stss)
331
+ return keyframes;
332
+ const o = stss.dataOffset;
333
+ const entryCount = stblData.readUInt32BE(o + 4);
334
+ for (let i = 0; i < entryCount; i++) {
335
+ const base = o + 8 + i * 4;
336
+ if (base + 4 > stblData.length)
337
+ break;
338
+ keyframes.add(stblData.readUInt32BE(base));
339
+ }
340
+ return keyframes;
341
+ }
342
+ parseStsc(stblData) {
343
+ const stsc = this.findBox(stblData, 'stsc');
344
+ if (!stsc)
345
+ return [];
346
+ const o = stsc.dataOffset;
347
+ const entryCount = stblData.readUInt32BE(o + 4);
348
+ const entries = [];
349
+ for (let i = 0; i < entryCount; i++) {
350
+ const base = o + 8 + i * 12;
351
+ if (base + 12 > stblData.length)
352
+ break;
353
+ entries.push({
354
+ firstChunk: stblData.readUInt32BE(base),
355
+ samplesPerChunk: stblData.readUInt32BE(base + 4),
356
+ descIndex: stblData.readUInt32BE(base + 8),
357
+ });
358
+ }
359
+ return entries;
360
+ }
361
+ buildFrameTable(track, warnings) {
362
+ const frames = [];
363
+ const { sttsEntries, stszSizes, stszDefaultSize, stszSampleCount, stcoOffsets, stscEntries, stssKeyframes, timescale } = track;
364
+ if (stcoOffsets.length === 0 || stszSampleCount === 0) {
365
+ warnings.push('Missing chunk offset or sample size table');
366
+ return frames;
367
+ }
368
+ const sampleDurations = [];
369
+ for (const entry of sttsEntries) {
370
+ for (let i = 0; i < entry.count; i++) {
371
+ sampleDurations.push(entry.delta);
372
+ }
373
+ }
374
+ const getSampleSize = (i) => {
375
+ if (stszDefaultSize > 0)
376
+ return stszDefaultSize;
377
+ return stszSizes[i] ?? 0;
378
+ };
379
+ const getSamplesPerChunk = (chunkIndex1based) => {
380
+ let result = 1;
381
+ for (const entry of stscEntries) {
382
+ if (chunkIndex1based >= entry.firstChunk) {
383
+ result = entry.samplesPerChunk;
384
+ }
385
+ else {
386
+ break;
387
+ }
388
+ }
389
+ return result;
390
+ };
391
+ let sampleIndex = 0;
392
+ for (let chunkIdx = 0; chunkIdx < stcoOffsets.length && sampleIndex < stszSampleCount; chunkIdx++) {
393
+ const chunkOffset = stcoOffsets[chunkIdx];
394
+ const samplesInChunk = getSamplesPerChunk(chunkIdx + 1);
395
+ let offsetInChunk = 0;
396
+ for (let s = 0; s < samplesInChunk && sampleIndex < stszSampleCount; s++) {
397
+ const sampleSize = getSampleSize(sampleIndex);
398
+ const sampleDelta = sampleDurations[sampleIndex] ?? (sampleDurations[sampleDurations.length - 1] ?? 1);
399
+ const duration = timescale > 0 ? sampleDelta / timescale : 0;
400
+ const sampleNumber1based = sampleIndex + 1;
401
+ frames.push({
402
+ index: sampleIndex,
403
+ offset: chunkOffset + offsetInChunk,
404
+ length: sampleSize,
405
+ duration,
406
+ samples: sampleDelta,
407
+ sampleRate: timescale,
408
+ bitrate: duration > 0 ? Math.round((sampleSize * 8) / duration / 1000) : 0,
409
+ keyFrame: stssKeyframes.size === 0 ? true : stssKeyframes.has(sampleNumber1based),
410
+ });
411
+ offsetInChunk += sampleSize;
412
+ sampleIndex++;
413
+ }
414
+ }
415
+ return frames;
416
+ }
417
+ }
418
+ //# sourceMappingURL=Mp4Parser.js.map