@editframe/assets 0.6.0-beta.1 → 0.6.0-beta.11

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.
@@ -152,7 +152,7 @@ class MP4File extends MP4Box__namespace.ISOFile {
152
152
  complete: trackInfoForFrag.complete,
153
153
  cts: startSample.cts,
154
154
  dts: startSample.dts,
155
- duration: endSample.dts - startSample.dts + endSample.duration
155
+ duration: endSample.cts - startSample.cts + endSample.duration
156
156
  };
157
157
  trackInfoForFrag.index += 1;
158
158
  fragTrak.segmentStream = null;
@@ -133,7 +133,7 @@ class MP4File extends MP4Box.ISOFile {
133
133
  complete: trackInfoForFrag.complete,
134
134
  cts: startSample.cts,
135
135
  dts: startSample.dts,
136
- duration: endSample.dts - startSample.dts + endSample.duration
136
+ duration: endSample.cts - startSample.cts + endSample.duration
137
137
  };
138
138
  trackInfoForFrag.index += 1;
139
139
  fragTrak.segmentStream = null;
@@ -114,7 +114,9 @@ class Probe {
114
114
  return this.data.format;
115
115
  }
116
116
  get mustReencodeAudio() {
117
- return this.audioStreams.some((stream) => stream.codec_name !== "aac");
117
+ return this.audioStreams.some(
118
+ (stream) => stream.codec_name !== "aac" || stream.sample_rate !== "48000"
119
+ );
118
120
  }
119
121
  get mustReencodeVideo() {
120
122
  return false;
@@ -539,17 +539,36 @@ export interface TrackSegment {
539
539
  offset: number;
540
540
  size: number;
541
541
  }
542
- export interface TrackFragmentIndex {
542
+ interface AudioTrackFragmentIndex {
543
543
  track: number;
544
- type: "audio" | "video";
544
+ type: "audio";
545
545
  timescale: number;
546
546
  duration: number;
547
+ channel_count: number;
548
+ sample_rate: number;
549
+ sample_size: number;
550
+ sample_count: number;
547
551
  initSegment: {
548
552
  offset: 0;
549
553
  size: number;
550
554
  };
551
555
  segments: Array<TrackSegment>;
552
556
  }
557
+ interface VideoTrackFragmentIndex {
558
+ track: number;
559
+ type: "video";
560
+ timescale: number;
561
+ duration: number;
562
+ width: number;
563
+ height: number;
564
+ sample_count: number;
565
+ initSegment: {
566
+ offset: 0;
567
+ size: number;
568
+ };
569
+ segments: Array<TrackSegment>;
570
+ }
571
+ export type TrackFragmentIndex = AudioTrackFragmentIndex | VideoTrackFragmentIndex;
553
572
  export declare class Probe {
554
573
  private absolutePath;
555
574
  data: z.infer<typeof ProbeSchema>;
@@ -95,7 +95,9 @@ class Probe {
95
95
  return this.data.format;
96
96
  }
97
97
  get mustReencodeAudio() {
98
- return this.audioStreams.some((stream) => stream.codec_name !== "aac");
98
+ return this.audioStreams.some(
99
+ (stream) => stream.codec_name !== "aac" || stream.sample_rate !== "48000"
100
+ );
99
101
  }
100
102
  get mustReencodeVideo() {
101
103
  return false;
@@ -26,17 +26,47 @@ const generateTrackFragmentIndexFromPath = async (absolutePath) => {
26
26
  }
27
27
  if (fragment.segment === "init") {
28
28
  trackByteOffsets[fragment.track] = fragment.data.byteLength;
29
- trackFragmentIndexes[fragment.track] = {
30
- track: fragment.track,
31
- type: track?.type ?? "video",
32
- timescale: track.timescale,
33
- duration: 0,
34
- initSegment: {
35
- offset: 0,
36
- size: fragment.data.byteLength
37
- },
38
- segments: []
39
- };
29
+ if (track?.type === "video") {
30
+ const videoTrack = mp4File.getInfo().videoTracks.find((track2) => track2.id === fragment.track);
31
+ if (!videoTrack) {
32
+ throw new Error("Video track not found");
33
+ }
34
+ trackFragmentIndexes[fragment.track] = {
35
+ track: fragment.track,
36
+ type: "video",
37
+ width: videoTrack.video.width,
38
+ height: videoTrack.video.height,
39
+ timescale: track.timescale,
40
+ sample_count: videoTrack.nb_samples,
41
+ duration: 0,
42
+ initSegment: {
43
+ offset: 0,
44
+ size: fragment.data.byteLength
45
+ },
46
+ segments: []
47
+ };
48
+ }
49
+ if (track?.type === "audio") {
50
+ const audioTrack = mp4File.getInfo().audioTracks.find((track2) => track2.id === fragment.track);
51
+ if (!audioTrack) {
52
+ throw new Error("Audio track not found");
53
+ }
54
+ trackFragmentIndexes[fragment.track] = {
55
+ track: fragment.track,
56
+ type: "audio",
57
+ channel_count: audioTrack.audio.channel_count,
58
+ sample_rate: audioTrack.audio.sample_rate,
59
+ sample_size: audioTrack.audio.sample_size,
60
+ sample_count: audioTrack.nb_samples,
61
+ timescale: track.timescale,
62
+ duration: 0,
63
+ initSegment: {
64
+ offset: 0,
65
+ size: fragment.data.byteLength
66
+ },
67
+ segments: []
68
+ };
69
+ }
40
70
  } else {
41
71
  const fragmentIndex = trackFragmentIndexes[fragment.track];
42
72
  if (trackByteOffsets[fragment.track] === void 0) {
@@ -24,17 +24,47 @@ const generateTrackFragmentIndexFromPath = async (absolutePath) => {
24
24
  }
25
25
  if (fragment.segment === "init") {
26
26
  trackByteOffsets[fragment.track] = fragment.data.byteLength;
27
- trackFragmentIndexes[fragment.track] = {
28
- track: fragment.track,
29
- type: track?.type ?? "video",
30
- timescale: track.timescale,
31
- duration: 0,
32
- initSegment: {
33
- offset: 0,
34
- size: fragment.data.byteLength
35
- },
36
- segments: []
37
- };
27
+ if (track?.type === "video") {
28
+ const videoTrack = mp4File.getInfo().videoTracks.find((track2) => track2.id === fragment.track);
29
+ if (!videoTrack) {
30
+ throw new Error("Video track not found");
31
+ }
32
+ trackFragmentIndexes[fragment.track] = {
33
+ track: fragment.track,
34
+ type: "video",
35
+ width: videoTrack.video.width,
36
+ height: videoTrack.video.height,
37
+ timescale: track.timescale,
38
+ sample_count: videoTrack.nb_samples,
39
+ duration: 0,
40
+ initSegment: {
41
+ offset: 0,
42
+ size: fragment.data.byteLength
43
+ },
44
+ segments: []
45
+ };
46
+ }
47
+ if (track?.type === "audio") {
48
+ const audioTrack = mp4File.getInfo().audioTracks.find((track2) => track2.id === fragment.track);
49
+ if (!audioTrack) {
50
+ throw new Error("Audio track not found");
51
+ }
52
+ trackFragmentIndexes[fragment.track] = {
53
+ track: fragment.track,
54
+ type: "audio",
55
+ channel_count: audioTrack.audio.channel_count,
56
+ sample_rate: audioTrack.audio.sample_rate,
57
+ sample_size: audioTrack.audio.sample_size,
58
+ sample_count: audioTrack.nb_samples,
59
+ timescale: track.timescale,
60
+ duration: 0,
61
+ initSegment: {
62
+ offset: 0,
63
+ size: fragment.data.byteLength
64
+ },
65
+ segments: []
66
+ };
67
+ }
38
68
  } else {
39
69
  const fragmentIndex = trackFragmentIndexes[fragment.track];
40
70
  if (trackByteOffsets[fragment.track] === void 0) {
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@editframe/assets",
3
- "version": "0.6.0-beta.1",
3
+ "version": "0.6.0-beta.11",
4
4
  "description": "",
5
5
  "exports": {
6
6
  ".": {
7
- "module": "./dist/packages/assets/src/index.mjs",
8
- "require": "./dist/packages/assets/src/index.js"
7
+ "import": "./dist/packages/assets/src/index.js",
8
+ "require": "./dist/packages/assets/src/index.cjs"
9
9
  }
10
10
  },
11
11
  "type": "module",
@@ -28,4 +28,4 @@
28
28
  "vite-plugin-dts": "^3.9.1",
29
29
  "vite-tsconfig-paths": "^4.3.2"
30
30
  }
31
- }
31
+ }