@remotion/media-parser 4.0.285 → 4.0.287

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 (279) hide show
  1. package/dist/aac-codecprivate.d.ts +1 -1
  2. package/dist/combine-uint8-arrays.d.ts +1 -1
  3. package/dist/containers/aac/parse-aac.js +0 -3
  4. package/dist/containers/avc/create-sps-pps-data.d.ts +1 -1
  5. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  6. package/dist/containers/flac/parse-flac-frame.js +0 -2
  7. package/dist/containers/flac/parse-streaminfo.js +0 -2
  8. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +2 -2
  9. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +6 -3
  10. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +4 -3
  11. package/dist/containers/iso-base-media/get-keyframes.js +1 -1
  12. package/dist/containers/iso-base-media/get-moov-atom.js +0 -4
  13. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -2
  14. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +15 -0
  15. package/dist/containers/iso-base-media/{get-seeking-from-mp4.js → get-seeking-byte.js} +16 -2
  16. package/dist/containers/iso-base-media/mdat/mdat.js +6 -6
  17. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +3 -3
  18. package/dist/containers/iso-base-media/parse-boxes.js +0 -2
  19. package/dist/containers/iso-base-media/process-box.d.ts +0 -2
  20. package/dist/containers/iso-base-media/process-box.js +6 -6
  21. package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts} +8 -3
  22. package/dist/containers/iso-base-media/seeking-hints.js +52 -0
  23. package/dist/containers/iso-base-media/traversal.d.ts +4 -2
  24. package/dist/containers/iso-base-media/traversal.js +6 -5
  25. package/dist/containers/m3u/iterate-over-segment-files.js +24 -20
  26. package/dist/containers/m3u/run-over-m3u.js +0 -3
  27. package/dist/containers/mp3/parse-mpeg-header.js +0 -3
  28. package/dist/containers/riff/expect-riff-box.js +0 -2
  29. package/dist/containers/riff/parse-movi.js +0 -3
  30. package/dist/containers/riff/parse-video-section.js +1 -1
  31. package/dist/containers/transport-stream/adts-header.d.ts +1 -1
  32. package/dist/containers/transport-stream/discard-rest-of-packet.d.ts +1 -1
  33. package/dist/containers/transport-stream/find-separator.d.ts +17 -1
  34. package/dist/containers/transport-stream/find-separator.js +6 -5
  35. package/dist/containers/transport-stream/handle-aac-packet.d.ts +10 -3
  36. package/dist/containers/transport-stream/handle-aac-packet.js +24 -16
  37. package/dist/containers/transport-stream/handle-avc-packet.d.ts +10 -3
  38. package/dist/containers/transport-stream/handle-avc-packet.js +29 -17
  39. package/dist/containers/transport-stream/parse-packet.d.ts +8 -4
  40. package/dist/containers/transport-stream/parse-packet.js +15 -16
  41. package/dist/containers/transport-stream/parse-pes.d.ts +5 -1
  42. package/dist/containers/transport-stream/parse-pes.js +4 -3
  43. package/dist/containers/transport-stream/parse-stream-packet.d.ts +6 -6
  44. package/dist/containers/transport-stream/parse-stream-packet.js +10 -115
  45. package/dist/containers/transport-stream/parse-transport-stream.js +15 -3
  46. package/dist/containers/transport-stream/process-stream-buffers.d.ts +26 -6
  47. package/dist/containers/transport-stream/process-stream-buffers.js +77 -12
  48. package/dist/containers/transport-stream/seeking-hints.d.ts +9 -0
  49. package/dist/containers/transport-stream/seeking-hints.js +26 -0
  50. package/dist/containers/transport-stream/traversal.d.ts +3 -1
  51. package/dist/containers/transport-stream/traversal.js +10 -2
  52. package/dist/containers/wav/get-seeking-byte.d.ts +2 -2
  53. package/dist/containers/wav/get-seeking-byte.js +2 -2
  54. package/dist/containers/wav/parse-fmt.js +0 -2
  55. package/dist/containers/wav/parse-media-section.js +0 -2
  56. package/dist/containers/wav/seeking-hints.d.ts +12 -0
  57. package/dist/containers/wav/seeking-hints.js +25 -0
  58. package/dist/containers/webm/get-byte-for-cues.d.ts +5 -0
  59. package/dist/containers/webm/get-byte-for-cues.js +33 -0
  60. package/dist/containers/webm/get-ready-tracks.d.ts +9 -4
  61. package/dist/containers/webm/get-ready-tracks.js +6 -6
  62. package/dist/containers/webm/get-sample-from-block.d.ts +3 -2
  63. package/dist/containers/webm/get-sample-from-block.js +9 -8
  64. package/dist/containers/webm/parse-ebml.d.ts +5 -4
  65. package/dist/containers/webm/parse-ebml.js +29 -34
  66. package/dist/containers/webm/parse-webm-header.js +14 -2
  67. package/dist/containers/webm/seek/fetch-web-cues.d.ts +12 -0
  68. package/dist/containers/webm/seek/fetch-web-cues.js +32 -0
  69. package/dist/containers/webm/seek/format-cues.d.ts +8 -0
  70. package/dist/containers/webm/seek/format-cues.js +42 -0
  71. package/dist/containers/webm/seek/get-seeking-byte.d.ts +12 -0
  72. package/dist/containers/webm/seek/get-seeking-byte.js +100 -0
  73. package/dist/containers/webm/seek/seeking-hints.d.ts +10 -0
  74. package/dist/containers/webm/seek/seeking-hints.js +28 -0
  75. package/dist/containers/webm/segments/all-segments.d.ts +1 -0
  76. package/dist/containers/webm/segments.d.ts +10 -4
  77. package/dist/containers/webm/segments.js +30 -12
  78. package/dist/containers/webm/state-for-processing.d.ts +15 -0
  79. package/dist/containers/webm/state-for-processing.js +14 -0
  80. package/dist/controller/media-parser-controller.d.ts +3 -0
  81. package/dist/controller/media-parser-controller.js +15 -0
  82. package/dist/controller/seek-signal.d.ts +2 -2
  83. package/dist/download-and-parse-media.js +3 -1
  84. package/dist/emit-audio-sample.d.ts +2 -5
  85. package/dist/emit-audio-sample.js +2 -5
  86. package/dist/emit-available-info.js +1 -1
  87. package/dist/esm/index.mjs +3859 -2963
  88. package/dist/esm/node-writer.mjs +1 -2
  89. package/dist/esm/node.mjs +1 -2
  90. package/dist/esm/server-worker.mjs +46 -1
  91. package/dist/esm/universal.mjs +3 -5
  92. package/dist/esm/web.mjs +2 -3
  93. package/dist/esm/worker-server-entry.mjs +2681 -1756
  94. package/dist/esm/worker-web-entry.mjs +2680 -1754
  95. package/dist/esm/worker.mjs +46 -1
  96. package/dist/file-types/detect-file-type.js +3 -1
  97. package/dist/{forward-controller.d.ts → forward-controller-pause-resume-abort.d.ts} +1 -1
  98. package/dist/{forward-controller.js → forward-controller-pause-resume-abort.js} +3 -3
  99. package/dist/get-audio-codec.d.ts +2 -1
  100. package/dist/get-audio-codec.js +17 -3
  101. package/dist/get-dimensions.js +1 -1
  102. package/dist/get-duration.js +3 -2
  103. package/dist/get-fps.js +1 -0
  104. package/dist/get-is-hdr.js +2 -2
  105. package/dist/get-keyframes.js +1 -1
  106. package/dist/{get-sample-positions-from-lpcm.d.ts → get-sample-positions-from-mp4.d.ts} +1 -1
  107. package/dist/{get-sample-positions-from-lpcm.js → get-sample-positions-from-mp4.js} +3 -3
  108. package/dist/{get-seeking-info.d.ts → get-seeking-byte.d.ts} +10 -9
  109. package/dist/get-seeking-byte.js +51 -0
  110. package/dist/get-seeking-hints.d.ts +19 -0
  111. package/dist/get-seeking-hints.js +35 -0
  112. package/dist/get-tracks.d.ts +4 -4
  113. package/dist/get-tracks.js +14 -8
  114. package/dist/get-video-codec.js +2 -2
  115. package/dist/has-all-info.js +1 -1
  116. package/dist/index.d.ts +74 -21
  117. package/dist/init-video.js +4 -3
  118. package/dist/internal-parse-media.js +18 -2
  119. package/dist/iterator/buffer-iterator.d.ts +3 -3
  120. package/dist/iterator/buffer-iterator.js +3 -4
  121. package/dist/iterator/buffer-manager.d.ts +3 -3
  122. package/dist/log.d.ts +5 -5
  123. package/dist/metadata/metadata-from-iso.js +1 -0
  124. package/dist/options.d.ts +3 -0
  125. package/dist/parse-loop.js +0 -3
  126. package/dist/parse-media-on-worker-entry.d.ts +1 -1
  127. package/dist/parse-media-on-worker-entry.js +51 -1
  128. package/dist/parse-media.js +3 -1
  129. package/dist/readers/from-web-file.js +1 -1
  130. package/dist/register-track.d.ts +2 -5
  131. package/dist/register-track.js +2 -10
  132. package/dist/samples-from-moof.d.ts +2 -2
  133. package/dist/samples-from-moof.js +5 -8
  134. package/dist/seek-backwards.js +2 -3
  135. package/dist/seeking-hints.d.ts +39 -0
  136. package/dist/set-seeking-hints.d.ts +6 -0
  137. package/dist/set-seeking-hints.js +27 -0
  138. package/dist/state/has-tracks-section.js +3 -1
  139. package/dist/state/iso-base-media/cached-sample-positions.d.ts +1 -1
  140. package/dist/state/iso-base-media/cached-sample-positions.js +1 -1
  141. package/dist/state/iso-base-media/iso-state.d.ts +18 -2
  142. package/dist/state/iso-base-media/iso-state.js +4 -0
  143. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -0
  144. package/dist/state/iso-base-media/lazy-mfra-load.js +13 -0
  145. package/dist/state/iso-base-media/moov-box.d.ts +7 -2
  146. package/dist/state/iso-base-media/moov-box.js +1 -1
  147. package/dist/state/iso-base-media/precomputed-moof.d.ts +11 -0
  148. package/dist/state/iso-base-media/precomputed-moof.js +28 -0
  149. package/dist/state/iso-base-media/precomputed-tfra.d.ts +6 -0
  150. package/dist/state/iso-base-media/precomputed-tfra.js +17 -0
  151. package/dist/state/keyframes.d.ts +2 -0
  152. package/dist/state/keyframes.js +17 -6
  153. package/dist/state/matroska/lazy-cues-fetch.d.ts +25 -0
  154. package/dist/state/matroska/lazy-cues-fetch.js +72 -0
  155. package/dist/state/matroska/webm.d.ts +53 -0
  156. package/dist/state/{webm.js → matroska/webm.js} +27 -7
  157. package/dist/state/parser-state.d.ts +64 -11
  158. package/dist/state/parser-state.js +7 -6
  159. package/dist/state/sample-callbacks.d.ts +1 -1
  160. package/dist/state/sample-callbacks.js +9 -9
  161. package/dist/{readers/state → state/samples-observed}/slow-duration-fps.d.ts +3 -3
  162. package/dist/state/samples-observed/slow-duration-fps.js +89 -0
  163. package/dist/state/seek-infinite-loop.js +12 -2
  164. package/dist/state/transport-stream/observed-pes-header.d.ts +15 -0
  165. package/dist/state/transport-stream/observed-pes-header.js +39 -0
  166. package/dist/state/transport-stream/pts-start-offset.d.ts +8 -0
  167. package/dist/state/transport-stream/{start-offset.js → pts-start-offset.js} +4 -4
  168. package/dist/state/transport-stream/transport-stream.d.ts +11 -1
  169. package/dist/state/transport-stream/transport-stream.js +4 -2
  170. package/dist/state/video-section.js +14 -2
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.js +1 -1
  173. package/dist/with-resolvers.d.ts +5 -0
  174. package/dist/work-on-seek-request.d.ts +8 -0
  175. package/dist/work-on-seek-request.js +31 -10
  176. package/dist/worker/{forward-controller.js → forward-controller-to-worker.js} +17 -0
  177. package/dist/worker/serialize-error.d.ts +6 -1
  178. package/dist/worker/serialize-error.js +2 -1
  179. package/dist/worker/worker-types.d.ts +12 -2
  180. package/dist/worker-server.js +16 -4
  181. package/dist/worker.d.ts +0 -1
  182. package/package.json +4 -4
  183. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +0 -9
  184. package/dist/containers/iso-base-media/get-mfra-atom.js +0 -12
  185. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -11
  186. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +0 -25
  187. package/dist/containers/iso-base-media/mfra/mfra.d.ts +0 -2
  188. package/dist/containers/iso-base-media/mfra/mfra.js +0 -11
  189. package/dist/containers/transport-stream/next-pes-header-store.d.ts +0 -6
  190. package/dist/containers/transport-stream/next-pes-header-store.js +0 -18
  191. package/dist/containers/transport-stream/start-offset.d.ts +0 -4
  192. package/dist/containers/transport-stream/start-offset.js +0 -13
  193. package/dist/containers/wav/get-seeking-info.d.ts +0 -7
  194. package/dist/containers/wav/get-seeking-info.js +0 -20
  195. package/dist/containers/wav/parse-video-section.d.ts +0 -5
  196. package/dist/containers/wav/parse-video-section.js +0 -41
  197. package/dist/emitter.d.ts +0 -33
  198. package/dist/emitter.js +0 -65
  199. package/dist/get-seeking-info.js +0 -48
  200. package/dist/media-parser-controller.d.ts +0 -21
  201. package/dist/media-parser-controller.js +0 -38
  202. package/dist/pause-signal.d.ts +0 -11
  203. package/dist/pause-signal.js +0 -38
  204. package/dist/readers/state/aac-state.d.ts +0 -13
  205. package/dist/readers/state/aac-state.js +0 -17
  206. package/dist/readers/state/can-skip-tracks.d.ts +0 -16
  207. package/dist/readers/state/can-skip-tracks.js +0 -60
  208. package/dist/readers/state/current-reader.d.ts +0 -6
  209. package/dist/readers/state/current-reader.js +0 -13
  210. package/dist/readers/state/emitted-fields.d.ts +0 -1
  211. package/dist/readers/state/emitted-fields.js +0 -37
  212. package/dist/readers/state/flac-state.d.ts +0 -4
  213. package/dist/readers/state/flac-state.js +0 -13
  214. package/dist/readers/state/has-tracks-section.d.ts +0 -14
  215. package/dist/readers/state/has-tracks-section.js +0 -37
  216. package/dist/readers/state/images.d.ts +0 -9
  217. package/dist/readers/state/images.js +0 -14
  218. package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +0 -12
  219. package/dist/readers/state/iso-base-media/cached-sample-positions.js +0 -46
  220. package/dist/readers/state/iso-base-media/iso-state.d.ts +0 -24
  221. package/dist/readers/state/iso-base-media/iso-state.js +0 -20
  222. package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +0 -13
  223. package/dist/readers/state/iso-base-media/lazy-mfra-load.js +0 -29
  224. package/dist/readers/state/iso-base-media/moov-box.d.ts +0 -5
  225. package/dist/readers/state/iso-base-media/moov-box.js +0 -13
  226. package/dist/readers/state/keyframes.d.ts +0 -6
  227. package/dist/readers/state/keyframes.js +0 -15
  228. package/dist/readers/state/m3u-state.d.ts +0 -44
  229. package/dist/readers/state/m3u-state.js +0 -124
  230. package/dist/readers/state/may-skip-video-data.d.ts +0 -4
  231. package/dist/readers/state/may-skip-video-data.js +0 -18
  232. package/dist/readers/state/mp3.d.ts +0 -15
  233. package/dist/readers/state/mp3.js +0 -19
  234. package/dist/readers/state/need-samples-for-fields.d.ts +0 -6
  235. package/dist/readers/state/need-samples-for-fields.js +0 -39
  236. package/dist/readers/state/parser-state.d.ts +0 -252
  237. package/dist/readers/state/parser-state.js +0 -124
  238. package/dist/readers/state/riff.d.ts +0 -10
  239. package/dist/readers/state/riff.js +0 -32
  240. package/dist/readers/state/sample-callbacks.d.ts +0 -44
  241. package/dist/readers/state/sample-callbacks.js +0 -118
  242. package/dist/readers/state/seek-infinite-loop.d.ts +0 -5
  243. package/dist/readers/state/seek-infinite-loop.js +0 -22
  244. package/dist/readers/state/slow-duration-fps.js +0 -86
  245. package/dist/readers/state/structure.d.ts +0 -15
  246. package/dist/readers/state/structure.js +0 -78
  247. package/dist/readers/state/timings.d.ts +0 -8
  248. package/dist/readers/state/timings.js +0 -13
  249. package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +0 -6
  250. package/dist/readers/state/transport-stream/last-emitted-sample.js +0 -16
  251. package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +0 -6
  252. package/dist/readers/state/transport-stream/next-pes-header-store.js +0 -18
  253. package/dist/readers/state/transport-stream/start-offset.d.ts +0 -4
  254. package/dist/readers/state/transport-stream/start-offset.js +0 -13
  255. package/dist/readers/state/transport-stream/transport-stream.d.ts +0 -19
  256. package/dist/readers/state/transport-stream/transport-stream.js +0 -25
  257. package/dist/readers/state/video-section.d.ts +0 -33
  258. package/dist/readers/state/video-section.js +0 -65
  259. package/dist/readers/state/webm.d.ts +0 -28
  260. package/dist/readers/state/webm.js +0 -109
  261. package/dist/seek-signal.d.ts +0 -19
  262. package/dist/seek-signal.js +0 -24
  263. package/dist/seeking-info.d.ts +0 -18
  264. package/dist/server-worker.module.d.ts +0 -2
  265. package/dist/server-worker.module.js +0 -12
  266. package/dist/state/slow-duration-fps.d.ts +0 -11
  267. package/dist/state/slow-duration-fps.js +0 -86
  268. package/dist/state/transport-stream/start-offset.d.ts +0 -4
  269. package/dist/state/transport-stream.d.ts +0 -8
  270. package/dist/state/transport-stream.js +0 -11
  271. package/dist/state/uml.d.ts +0 -32
  272. package/dist/state/uml.js +0 -52
  273. package/dist/state/webm.d.ts +0 -30
  274. package/dist/state/work-on-seek-request-options.d.ts +0 -3
  275. package/dist/state/work-on-seek-request-options.js +0 -26
  276. package/dist/worker.module.d.ts +0 -4
  277. package/dist/worker.module.js +0 -12
  278. /package/dist/{seeking-info.js → seeking-hints.js} +0 -0
  279. /package/dist/worker/{forward-controller.d.ts → forward-controller-to-worker.d.ts} +0 -0
@@ -1,19 +1,39 @@
1
+ import type { LogLevel } from '../../log';
1
2
  import type { TransportStreamStructure } from '../../parse-result';
2
- import type { ParserState } from '../../state/parser-state';
3
+ import type { SampleCallbacks } from '../../state/sample-callbacks';
4
+ import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
+ import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
3
6
  import type { PacketPes } from './parse-pes';
4
7
  export type TransportStreamPacketBuffer = {
5
- buffer: Uint8Array;
6
8
  pesHeader: PacketPes;
7
9
  offset: number;
10
+ getBuffer: () => Uint8Array;
11
+ addBuffer: (buffer: Uint8Array) => void;
12
+ get2ndSubArrayIndex: () => number;
8
13
  };
14
+ export declare const makeTransportStreamPacketBuffer: ({ buffers, pesHeader, offset, }: {
15
+ buffers: Uint8Array | null;
16
+ pesHeader: PacketPes;
17
+ offset: number;
18
+ }) => TransportStreamPacketBuffer;
9
19
  export type StreamBufferMap = Map<number, TransportStreamPacketBuffer>;
10
- export declare const processStreamBuffer: ({ streamBuffer, state, programId, structure, }: {
20
+ export declare const processStreamBuffer: ({ streamBuffer, programId, structure, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }: {
11
21
  streamBuffer: TransportStreamPacketBuffer;
12
- state: ParserState;
13
22
  programId: number;
14
23
  structure: TransportStreamStructure;
24
+ sampleCallbacks: SampleCallbacks;
25
+ logLevel: LogLevel;
26
+ onAudioTrack: OnAudioTrack | null;
27
+ onVideoTrack: OnVideoTrack | null;
28
+ transportStream: TransportStreamState;
29
+ makeSamplesStartAtZero: boolean;
15
30
  }) => Promise<void>;
16
- export declare const processFinalStreamBuffers: ({ state, structure, }: {
17
- state: ParserState;
31
+ export declare const processFinalStreamBuffers: ({ structure, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }: {
18
32
  structure: TransportStreamStructure;
33
+ sampleCallbacks: SampleCallbacks;
34
+ logLevel: LogLevel;
35
+ onAudioTrack: OnAudioTrack | null;
36
+ onVideoTrack: OnVideoTrack | null;
37
+ transportStream: TransportStreamState;
38
+ makeSamplesStartAtZero: boolean;
19
39
  }) => Promise<void>;
@@ -1,52 +1,117 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processFinalStreamBuffers = exports.processStreamBuffer = void 0;
3
+ exports.processFinalStreamBuffers = exports.processStreamBuffer = exports.makeTransportStreamPacketBuffer = void 0;
4
+ const combine_uint8_arrays_1 = require("../../combine-uint8-arrays");
5
+ const find_separator_1 = require("./find-separator");
4
6
  const get_tracks_1 = require("./get-tracks");
5
7
  const handle_aac_packet_1 = require("./handle-aac-packet");
6
8
  const handle_avc_packet_1 = require("./handle-avc-packet");
7
9
  const traversal_1 = require("./traversal");
8
- const processStreamBuffer = async ({ streamBuffer, state, programId, structure, }) => {
10
+ const makeTransportStreamPacketBuffer = ({ buffers, pesHeader, offset, }) => {
11
+ let currentBuf = buffers ? [buffers] : [];
12
+ let subarrayIndex = null;
13
+ const getBuffer = () => {
14
+ if (currentBuf.length === 0) {
15
+ return new Uint8Array();
16
+ }
17
+ if (currentBuf.length === 1) {
18
+ return currentBuf[0];
19
+ }
20
+ currentBuf = [(0, combine_uint8_arrays_1.combineUint8Arrays)(currentBuf)];
21
+ return currentBuf[0];
22
+ };
23
+ let fastFind = null;
24
+ return {
25
+ pesHeader,
26
+ offset,
27
+ getBuffer,
28
+ addBuffer: (buffer) => {
29
+ currentBuf.push(buffer);
30
+ subarrayIndex = null;
31
+ },
32
+ get2ndSubArrayIndex: () => {
33
+ var _a, _b;
34
+ if (subarrayIndex === null) {
35
+ const result = (0, find_separator_1.findNthSubarrayIndex)({
36
+ array: getBuffer(),
37
+ subarray: new Uint8Array([0, 0, 1, 9]),
38
+ n: 2,
39
+ startIndex: (_a = fastFind === null || fastFind === void 0 ? void 0 : fastFind.index) !== null && _a !== void 0 ? _a : 0,
40
+ startCount: (_b = fastFind === null || fastFind === void 0 ? void 0 : fastFind.count) !== null && _b !== void 0 ? _b : 0,
41
+ });
42
+ if (result.type === 'found') {
43
+ subarrayIndex = result.index;
44
+ fastFind = null;
45
+ }
46
+ else {
47
+ fastFind = result;
48
+ return -1;
49
+ }
50
+ }
51
+ return subarrayIndex;
52
+ },
53
+ };
54
+ };
55
+ exports.makeTransportStreamPacketBuffer = makeTransportStreamPacketBuffer;
56
+ const processStreamBuffer = async ({ streamBuffer, programId, structure, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }) => {
9
57
  const stream = (0, traversal_1.getStreamForId)(structure, programId);
10
58
  if (!stream) {
11
59
  throw new Error('No stream found');
12
60
  }
61
+ // 2 = ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
62
+ if (stream.streamType === 2) {
63
+ throw new Error('H.262 video stream not supported');
64
+ }
13
65
  // 27 = AVC / H.264 Video
14
66
  if (stream.streamType === 27) {
15
67
  await (0, handle_avc_packet_1.handleAvcPacket)({
16
68
  programId,
17
69
  streamBuffer,
18
- state,
70
+ sampleCallbacks,
71
+ logLevel,
72
+ onVideoTrack,
19
73
  offset: streamBuffer.offset,
74
+ transportStream,
75
+ makeSamplesStartAtZero,
20
76
  });
21
77
  }
22
78
  // 15 = AAC / ADTS
23
79
  else if (stream.streamType === 15) {
24
80
  await (0, handle_aac_packet_1.handleAacPacket)({
25
81
  streamBuffer,
26
- state,
27
82
  programId,
28
83
  offset: streamBuffer.offset,
84
+ sampleCallbacks,
85
+ logLevel,
86
+ onAudioTrack,
87
+ transportStream,
88
+ makeSamplesStartAtZero,
29
89
  });
30
90
  }
31
- if (!state.callbacks.tracks.hasAllTracks()) {
32
- const tracksRegistered = state.callbacks.tracks.getTracks().length;
91
+ if (!sampleCallbacks.tracks.hasAllTracks()) {
92
+ const tracksRegistered = sampleCallbacks.tracks.getTracks().length;
33
93
  const { streams } = (0, traversal_1.findProgramMapTableOrThrow)(structure);
34
94
  if ((0, get_tracks_1.filterStreamsBySupportedTypes)(streams).length === tracksRegistered) {
35
- state.callbacks.tracks.setIsDone(state.logLevel);
95
+ sampleCallbacks.tracks.setIsDone(logLevel);
36
96
  }
37
97
  }
38
98
  };
39
99
  exports.processStreamBuffer = processStreamBuffer;
40
- const processFinalStreamBuffers = async ({ state, structure, }) => {
41
- for (const [programId, buffer] of state.transportStream.streamBuffers) {
42
- if (buffer.buffer.byteLength > 0) {
100
+ const processFinalStreamBuffers = async ({ structure, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }) => {
101
+ for (const [programId, buffer] of transportStream.streamBuffers) {
102
+ if (buffer.getBuffer().byteLength > 0) {
43
103
  await (0, exports.processStreamBuffer)({
44
104
  streamBuffer: buffer,
45
- state,
46
105
  programId,
47
106
  structure,
107
+ sampleCallbacks,
108
+ logLevel,
109
+ onAudioTrack,
110
+ onVideoTrack,
111
+ transportStream,
112
+ makeSamplesStartAtZero,
48
113
  });
49
- state.transportStream.streamBuffers.delete(programId);
114
+ transportStream.streamBuffers.delete(programId);
50
115
  }
51
116
  }
52
117
  };
@@ -0,0 +1,9 @@
1
+ import type { TransportStreamSeekingHints } from '../../seeking-hints';
2
+ import type { TracksState } from '../../state/has-tracks-section';
3
+ import type { ParserState } from '../../state/parser-state';
4
+ import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
+ export declare const getSeekingHintsFromTransportStream: (transportStream: TransportStreamState, tracksState: TracksState) => TransportStreamSeekingHints | null;
6
+ export declare const setSeekingHintsForTransportStream: ({ hints, state, }: {
7
+ hints: TransportStreamSeekingHints;
8
+ state: ParserState;
9
+ }) => void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForTransportStream = exports.getSeekingHintsFromTransportStream = void 0;
4
+ const getSeekingHintsFromTransportStream = (transportStream, tracksState) => {
5
+ const firstVideoTrack = tracksState
6
+ .getTracks()
7
+ .find((t) => t.type === 'video');
8
+ if (!firstVideoTrack) {
9
+ return null;
10
+ }
11
+ return {
12
+ type: 'transport-stream-seeking-hints',
13
+ observedPesHeaders: transportStream.observedPesHeaders.getPesKeyframeHeaders(),
14
+ ptsStartOffset: transportStream.startOffset.getOffset(firstVideoTrack.trackId),
15
+ firstVideoTrackId: firstVideoTrack.trackId,
16
+ };
17
+ };
18
+ exports.getSeekingHintsFromTransportStream = getSeekingHintsFromTransportStream;
19
+ const setSeekingHintsForTransportStream = ({ hints, state, }) => {
20
+ state.transportStream.observedPesHeaders.setPesKeyframesFromSeekingHints(hints);
21
+ state.transportStream.startOffset.setOffset({
22
+ trackId: hints.firstVideoTrackId,
23
+ newOffset: hints.ptsStartOffset,
24
+ });
25
+ };
26
+ exports.setSeekingHintsForTransportStream = setSeekingHintsForTransportStream;
@@ -1,6 +1,8 @@
1
1
  import type { TransportStreamStructure } from '../../parse-result';
2
+ import type { TransportStreamPMTBox } from './boxes';
2
3
  import type { TransportStreamProgramAssociationTableEntry } from './parse-pat';
3
4
  import type { TransportStreamEntry } from './parse-pmt';
4
- export declare const findProgramMapTableOrThrow: (structure: TransportStreamStructure) => import("./boxes").TransportStreamPMTBox;
5
+ export declare const findProgramMapOrNull: (structure: TransportStreamStructure) => TransportStreamPMTBox | null;
6
+ export declare const findProgramMapTableOrThrow: (structure: TransportStreamStructure) => TransportStreamPMTBox;
5
7
  export declare const getProgramForId: (structure: TransportStreamStructure, packetIdentifier: number) => TransportStreamProgramAssociationTableEntry | null;
6
8
  export declare const getStreamForId: (structure: TransportStreamStructure, packetIdentifier: number) => TransportStreamEntry | null;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getStreamForId = exports.getProgramForId = exports.findProgramMapTableOrThrow = void 0;
3
+ exports.getStreamForId = exports.getProgramForId = exports.findProgramMapTableOrThrow = exports.findProgramMapOrNull = void 0;
4
4
  const findProgramAssociationTableOrThrow = (structure) => {
5
5
  const box = structure.boxes.find((b) => b.type === 'transport-stream-pat-box');
6
6
  if (!box) {
@@ -8,8 +8,16 @@ const findProgramAssociationTableOrThrow = (structure) => {
8
8
  }
9
9
  return box;
10
10
  };
11
- const findProgramMapTableOrThrow = (structure) => {
11
+ const findProgramMapOrNull = (structure) => {
12
12
  const box = structure.boxes.find((b) => b.type === 'transport-stream-pmt-box');
13
+ if (!box) {
14
+ return null;
15
+ }
16
+ return box;
17
+ };
18
+ exports.findProgramMapOrNull = findProgramMapOrNull;
19
+ const findProgramMapTableOrThrow = (structure) => {
20
+ const box = (0, exports.findProgramMapOrNull)(structure);
13
21
  if (!box) {
14
22
  throw new Error('No PMT box found');
15
23
  }
@@ -1,7 +1,7 @@
1
- import type { WavSeekingInfo } from '../../seeking-info';
1
+ import type { WavSeekingHints } from '../../seeking-hints';
2
2
  import type { SeekResolution } from '../../work-on-seek-request';
3
3
  export declare const WAVE_SAMPLES_PER_SECOND = 25;
4
4
  export declare const getSeekingByteFromWav: ({ info, time, }: {
5
- info: WavSeekingInfo;
5
+ info: WavSeekingHints;
6
6
  time: number;
7
7
  }) => Promise<SeekResolution>;
@@ -4,12 +4,12 @@ exports.getSeekingByteFromWav = exports.WAVE_SAMPLES_PER_SECOND = void 0;
4
4
  exports.WAVE_SAMPLES_PER_SECOND = 25;
5
5
  const getSeekingByteFromWav = ({ info, time, }) => {
6
6
  const bytesPerSecond = info.sampleRate * info.blockAlign;
7
- const durationInSeconds = info.mediaSections.size / bytesPerSecond;
7
+ const durationInSeconds = info.mediaSection.size / bytesPerSecond;
8
8
  const timeRoundedDown = Math.floor(Math.min(time, durationInSeconds - 0.0000001) * exports.WAVE_SAMPLES_PER_SECOND) / exports.WAVE_SAMPLES_PER_SECOND;
9
9
  const byteOffset = bytesPerSecond * timeRoundedDown;
10
10
  return Promise.resolve({
11
11
  type: 'do-seek',
12
- byte: byteOffset + info.mediaSections.start,
12
+ byte: byteOffset + info.mediaSection.start,
13
13
  });
14
14
  };
15
15
  exports.getSeekingByteFromWav = getSeekingByteFromWav;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseFmt = void 0;
4
4
  const register_track_1 = require("../../register-track");
5
- const work_on_seek_request_1 = require("../../work-on-seek-request");
6
5
  const parseFmt = async ({ state, }) => {
7
6
  const { iterator } = state;
8
7
  const ckSize = iterator.getUint32Le(); // chunkSize
@@ -36,7 +35,6 @@ const parseFmt = async ({ state, }) => {
36
35
  };
37
36
  state.structure.getWavStructure().boxes.push(wavHeader);
38
37
  await (0, register_track_1.registerAudioTrack)({
39
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
40
38
  track: {
41
39
  type: 'audio',
42
40
  codec: format,
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseMediaSection = void 0;
4
4
  const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
5
5
  const emit_audio_sample_1 = require("../../emit-audio-sample");
6
- const work_on_seek_request_1 = require("../../work-on-seek-request");
7
6
  const get_seeking_byte_1 = require("./get-seeking-byte");
8
7
  const parseMediaSection = async ({ state, }) => {
9
8
  const { iterator } = state;
@@ -36,7 +35,6 @@ const parseMediaSection = async ({ state, }) => {
36
35
  },
37
36
  timescale: 1,
38
37
  }),
39
- workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
40
38
  callbacks: state.callbacks,
41
39
  });
42
40
  return null;
@@ -0,0 +1,12 @@
1
+ import type { WavSeekingHints } from '../../seeking-hints';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ import type { MediaSectionState } from '../../state/video-section';
4
+ import type { WavStructure } from './types';
5
+ export declare const getSeekingHintsFromWav: ({ structure, mediaSectionState, }: {
6
+ structure: WavStructure;
7
+ mediaSectionState: MediaSectionState;
8
+ }) => WavSeekingHints | null;
9
+ export declare const setSeekingHintsForWav: ({ hints, state, }: {
10
+ hints: WavSeekingHints;
11
+ state: ParserState;
12
+ }) => void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSeekingHintsForWav = exports.getSeekingHintsFromWav = void 0;
4
+ const getSeekingHintsFromWav = ({ structure, mediaSectionState, }) => {
5
+ const fmtBox = structure.boxes.find((box) => box.type === 'wav-fmt');
6
+ if (!fmtBox) {
7
+ return null;
8
+ }
9
+ const mediaSection = mediaSectionState.getMediaSections();
10
+ if (mediaSection.length !== 1) {
11
+ return null;
12
+ }
13
+ return {
14
+ type: 'wav-seeking-hints',
15
+ sampleRate: fmtBox.sampleRate,
16
+ blockAlign: fmtBox.blockAlign,
17
+ mediaSection: mediaSection[0],
18
+ };
19
+ };
20
+ exports.getSeekingHintsFromWav = getSeekingHintsFromWav;
21
+ const setSeekingHintsForWav = ({ hints, state, }) => {
22
+ // abstaining from setting fmt box, usually it is at the very beginning
23
+ state.mediaSection.addMediaSection(hints.mediaSection);
24
+ };
25
+ exports.setSeekingHintsForWav = setSeekingHintsForWav;
@@ -0,0 +1,5 @@
1
+ import { type SeekHeadSegment } from './segments/all-segments';
2
+ export declare const getByteForSeek: ({ seekHeadSegment, offset, }: {
3
+ seekHeadSegment: SeekHeadSegment;
4
+ offset: number;
5
+ }) => number | null;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getByteForSeek = void 0;
4
+ const truthy_1 = require("../../truthy");
5
+ const all_segments_1 = require("./segments/all-segments");
6
+ const getByteForSeek = ({ seekHeadSegment, offset, }) => {
7
+ const value = seekHeadSegment.value
8
+ .map((v) => {
9
+ if (v.type !== 'Seek') {
10
+ return null;
11
+ }
12
+ const seekId = v.value.find((_v) => {
13
+ // cues
14
+ return _v.type === 'SeekID' && _v.value === all_segments_1.matroskaElements.Cues;
15
+ });
16
+ if (!seekId) {
17
+ return null;
18
+ }
19
+ const seekPosition = v.value.find((_v) => {
20
+ return _v.type === 'SeekPosition';
21
+ });
22
+ if (!seekPosition) {
23
+ return false;
24
+ }
25
+ return seekPosition.value;
26
+ })
27
+ .filter(truthy_1.truthy);
28
+ if (value.length === 0) {
29
+ return null;
30
+ }
31
+ return value[0].value + offset;
32
+ };
33
+ exports.getByteForSeek = getByteForSeek;
@@ -1,10 +1,15 @@
1
1
  import type { Track } from '../../get-tracks';
2
- import type { ParserState } from '../../state/parser-state';
2
+ import type { WebmState } from '../../state/matroska/webm';
3
+ import type { StructureState } from '../../state/structure';
3
4
  export type ResolvedAndUnresolvedTracks = {
4
5
  resolved: Track[];
5
6
  missingInfo: Track[];
6
7
  };
7
- export declare const getTracksFromMatroska: ({ state, }: {
8
- state: ParserState;
8
+ export declare const getTracksFromMatroska: ({ structureState, webmState, }: {
9
+ structureState: StructureState;
10
+ webmState: WebmState;
9
11
  }) => ResolvedAndUnresolvedTracks;
10
- export declare const matroskaHasTracks: (state: ParserState) => boolean;
12
+ export declare const matroskaHasTracks: ({ structureState, webmState, }: {
13
+ structureState: StructureState;
14
+ webmState: WebmState;
15
+ }) => boolean;
@@ -4,9 +4,8 @@ exports.matroskaHasTracks = exports.getTracksFromMatroska = void 0;
4
4
  const codec_string_1 = require("../avc/codec-string");
5
5
  const make_track_1 = require("./make-track");
6
6
  const traversal_1 = require("./traversal");
7
- const getTracksFromMatroska = ({ state, }) => {
8
- const webmState = state.webm;
9
- const structure = state.structure.getMatroskaStructure();
7
+ const getTracksFromMatroska = ({ structureState, webmState, }) => {
8
+ const structure = structureState.getMatroskaStructure();
10
9
  const mainSegment = (0, traversal_1.getMainSegment)(structure.boxes);
11
10
  if (!mainSegment) {
12
11
  throw new Error('No main segment');
@@ -50,15 +49,16 @@ const getTracksFromMatroska = ({ state, }) => {
50
49
  return { missingInfo, resolved: resolvedTracks };
51
50
  };
52
51
  exports.getTracksFromMatroska = getTracksFromMatroska;
53
- const matroskaHasTracks = (state) => {
54
- const structure = state.structure.getMatroskaStructure();
52
+ const matroskaHasTracks = ({ structureState, webmState, }) => {
53
+ const structure = structureState.getMatroskaStructure();
55
54
  const mainSegment = (0, traversal_1.getMainSegment)(structure.boxes);
56
55
  if (!mainSegment) {
57
56
  return false;
58
57
  }
59
58
  return ((0, traversal_1.getTracksSegment)(mainSegment) !== null &&
60
59
  (0, exports.getTracksFromMatroska)({
61
- state,
60
+ structureState,
61
+ webmState,
62
62
  }).missingInfo.length === 0);
63
63
  };
64
64
  exports.matroskaHasTracks = matroskaHasTracks;
@@ -1,4 +1,5 @@
1
- import type { ParserState } from '../../state/parser-state';
1
+ import type { WebmState } from '../../state/matroska/webm';
2
+ import type { StructureState } from '../../state/structure';
2
3
  import type { AudioOrVideoSample } from '../../webcodec-sample-types';
3
4
  import type { BlockSegment, SimpleBlockSegment } from './segments/all-segments';
4
5
  type SampleResult = {
@@ -13,5 +14,5 @@ type SampleResult = {
13
14
  } | {
14
15
  type: 'no-sample';
15
16
  };
16
- export declare const getSampleFromBlock: (ebml: BlockSegment | SimpleBlockSegment, state: ParserState, offset: number) => SampleResult;
17
+ export declare const getSampleFromBlock: (ebml: BlockSegment | SimpleBlockSegment, webmState: WebmState, offset: number, structureState: StructureState) => SampleResult;
17
18
  export {};
@@ -6,18 +6,18 @@ const parse_avc_1 = require("../avc/parse-avc");
6
6
  const get_ready_tracks_1 = require("./get-ready-tracks");
7
7
  const all_segments_1 = require("./segments/all-segments");
8
8
  const block_simple_block_flags_1 = require("./segments/block-simple-block-flags");
9
- const addAvcToTrackIfNecessary = ({ partialVideoSample, codec, state, trackNumber, }) => {
9
+ const addAvcToTrackIfNecessary = ({ partialVideoSample, codec, structureState, webmState, trackNumber, }) => {
10
10
  if (codec === 'V_MPEG4/ISO/AVC' &&
11
- (0, get_ready_tracks_1.getTracksFromMatroska)({ state }).missingInfo.length > 0) {
11
+ (0, get_ready_tracks_1.getTracksFromMatroska)({ structureState, webmState }).missingInfo.length > 0) {
12
12
  const parsed = (0, parse_avc_1.parseAvc)(partialVideoSample.data);
13
13
  for (const parse of parsed) {
14
14
  if (parse.type === 'avc-profile') {
15
- state.webm.setAvcProfileForTrackNumber(trackNumber, parse);
15
+ webmState.setAvcProfileForTrackNumber(trackNumber, parse);
16
16
  }
17
17
  }
18
18
  }
19
19
  };
20
- const getSampleFromBlock = (ebml, state, offset) => {
20
+ const getSampleFromBlock = (ebml, webmState, offset, structureState) => {
21
21
  const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(ebml.value, ebml.value.length);
22
22
  const trackNumber = iterator.getVint();
23
23
  if (trackNumber === null) {
@@ -27,9 +27,9 @@ const getSampleFromBlock = (ebml, state, offset) => {
27
27
  const { keyframe } = (0, block_simple_block_flags_1.parseBlockFlags)(iterator, ebml.type === 'SimpleBlock'
28
28
  ? all_segments_1.matroskaElements.SimpleBlock
29
29
  : all_segments_1.matroskaElements.Block);
30
- const { codec, trackTimescale } = state.webm.getTrackInfoByNumber(trackNumber);
31
- const clusterOffset = state.webm.getTimestampOffsetForByteOffset(offset);
32
- const timescale = state.webm.getTimescale();
30
+ const { codec, trackTimescale } = webmState.getTrackInfoByNumber(trackNumber);
31
+ const clusterOffset = webmState.getTimestampOffsetForByteOffset(offset);
32
+ const timescale = webmState.getTimescale();
33
33
  if (clusterOffset === undefined) {
34
34
  throw new Error('Could not find offset for byte offset ' + offset);
35
35
  }
@@ -65,7 +65,8 @@ const getSampleFromBlock = (ebml, state, offset) => {
65
65
  addAvcToTrackIfNecessary({
66
66
  codec,
67
67
  partialVideoSample,
68
- state,
68
+ structureState,
69
+ webmState,
69
70
  trackNumber,
70
71
  });
71
72
  const sample = {
@@ -1,11 +1,12 @@
1
- import type { ParserState } from '../../state/parser-state';
1
+ import type { BufferIterator } from '../../iterator/buffer-iterator';
2
2
  import type { PossibleEbml } from './segments/all-segments';
3
+ import type { WebmRequiredStatesForProcessing } from './state-for-processing';
3
4
  export type Prettify<T> = {
4
5
  [K in keyof T]: T[K];
5
6
  } & {};
6
- export declare const parseEbml: (state: ParserState) => Promise<Prettify<PossibleEbml>>;
7
- export declare const postprocessEbml: ({ offset, ebml, state, }: {
7
+ export declare const parseEbml: (iterator: BufferIterator, statesForProcessing: WebmRequiredStatesForProcessing | null) => Promise<Prettify<PossibleEbml>>;
8
+ export declare const postprocessEbml: ({ offset, ebml, statesForProcessing: { webmState, callbacks, logLevel, onAudioTrack, onVideoTrack, structureState, }, }: {
8
9
  offset: number;
9
10
  ebml: Prettify<PossibleEbml>;
10
- state: ParserState;
11
+ statesForProcessing: WebmRequiredStatesForProcessing;
11
12
  }) => Promise<Prettify<PossibleEbml>>;