@remotion/webcodecs 4.0.230 → 4.0.232

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 (59) hide show
  1. package/README.md +12 -1
  2. package/dist/audio-decoder.js +6 -0
  3. package/dist/audio-encoder-config.d.ts +4 -1
  4. package/dist/audio-encoder-config.js +6 -0
  5. package/dist/audio-encoder.d.ts +4 -3
  6. package/dist/audio-encoder.js +5 -1
  7. package/dist/browser-quirks.d.ts +2 -0
  8. package/dist/browser-quirks.js +11 -0
  9. package/dist/can-copy-audio-track.d.ts +1 -1
  10. package/dist/can-copy-audio-track.js +3 -0
  11. package/dist/can-copy-video-track.d.ts +1 -1
  12. package/dist/can-copy-video-track.js +4 -1
  13. package/dist/can-reencode-audio-track.d.ts +1 -1
  14. package/dist/can-reencode-audio-track.js +3 -0
  15. package/dist/can-reencode-video-track.d.ts +1 -1
  16. package/dist/codec-id.d.ts +2 -2
  17. package/dist/codec-id.js +8 -2
  18. package/dist/convert-media.d.ts +9 -5
  19. package/dist/convert-media.js +55 -42
  20. package/dist/convert-to-correct-videoframe.d.ts +9 -0
  21. package/dist/convert-to-correct-videoframe.js +32 -0
  22. package/dist/default-on-video-track-handler.js +4 -0
  23. package/dist/esm/index.mjs +347 -110
  24. package/dist/generate-output-filename.d.ts +2 -0
  25. package/dist/generate-output-filename.js +14 -0
  26. package/dist/get-available-audio-codecs.d.ts +7 -0
  27. package/dist/get-available-audio-codecs.js +18 -0
  28. package/dist/get-available-containers.d.ts +4 -0
  29. package/dist/get-available-containers.js +8 -0
  30. package/dist/get-available-video-codecs.d.ts +7 -0
  31. package/dist/get-available-video-codecs.js +18 -0
  32. package/dist/get-default-audio-codec.d.ts +2 -1
  33. package/dist/get-default-audio-codec.js +3 -0
  34. package/dist/get-default-video-codec.d.ts +3 -2
  35. package/dist/get-default-video-codec.js +7 -1
  36. package/dist/index.d.ts +8 -6
  37. package/dist/index.js +9 -5
  38. package/dist/io-manager/io-synchronizer.js +12 -6
  39. package/dist/on-audio-track-handler.d.ts +2 -1
  40. package/dist/on-audio-track.d.ts +5 -5
  41. package/dist/on-audio-track.js +22 -8
  42. package/dist/on-frame.d.ts +4 -4
  43. package/dist/on-frame.js +11 -11
  44. package/dist/on-video-track-handler.d.ts +2 -1
  45. package/dist/on-video-track.d.ts +6 -5
  46. package/dist/on-video-track.js +15 -7
  47. package/dist/select-container-creator.d.ts +2 -0
  48. package/dist/select-container-creator.js +17 -0
  49. package/dist/set-remotion-imported.d.ts +6 -0
  50. package/dist/set-remotion-imported.js +25 -0
  51. package/dist/throttled-state-update.d.ts +13 -0
  52. package/dist/throttled-state-update.js +49 -0
  53. package/dist/video-encoder-config.d.ts +1 -1
  54. package/dist/video-encoder-config.js +2 -0
  55. package/dist/video-encoder.d.ts +3 -1
  56. package/dist/video-encoder.js +8 -4
  57. package/dist/wav-audio-encoder.d.ts +2 -0
  58. package/dist/wav-audio-encoder.js +26 -0
  59. package/package.json +4 -3
@@ -1,14 +1,16 @@
1
1
  import type { LogLevel } from '@remotion/media-parser';
2
+ import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
2
3
  export type WebCodecsVideoEncoder = {
3
4
  encodeFrame: (videoFrame: VideoFrame, timestamp: number) => Promise<void>;
4
5
  waitForFinish: () => Promise<void>;
5
6
  close: () => void;
6
7
  flush: () => Promise<void>;
7
8
  };
8
- export declare const createVideoEncoder: ({ onChunk, onError, signal, config, logLevel, }: {
9
+ export declare const createVideoEncoder: ({ onChunk, onError, signal, config, logLevel, outputCodec, }: {
9
10
  onChunk: (chunk: EncodedVideoChunk, metadata: EncodedVideoChunkMetadata | null) => Promise<void>;
10
11
  onError: (error: DOMException) => void;
11
12
  signal: AbortSignal;
12
13
  config: VideoEncoderConfig;
13
14
  logLevel: LogLevel;
15
+ outputCodec: ConvertMediaVideoCodec;
14
16
  }) => WebCodecsVideoEncoder;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createVideoEncoder = void 0;
4
+ const convert_to_correct_videoframe_1 = require("./convert-to-correct-videoframe");
4
5
  const io_synchronizer_1 = require("./io-manager/io-synchronizer");
5
- const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, }) => {
6
+ const log_1 = require("./log");
7
+ const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, outputCodec, }) => {
6
8
  if (signal.aborted) {
7
9
  throw new Error('Not creating video encoder, already aborted');
8
10
  }
@@ -44,6 +46,7 @@ const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, }) =>
44
46
  close();
45
47
  };
46
48
  signal.addEventListener('abort', onAbort);
49
+ log_1.Log.verbose(logLevel, 'Configuring video encoder', config);
47
50
  encoder.configure(config);
48
51
  let framesProcessed = 0;
49
52
  const encodeFrame = async (frame) => {
@@ -51,15 +54,16 @@ const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, }) =>
51
54
  return;
52
55
  }
53
56
  await ioSynchronizer.waitFor({
54
- unemitted: 2,
55
- _unprocessed: 2,
57
+ // Firefox stalls if too few frames are passed
58
+ unemitted: 10,
59
+ _unprocessed: 10,
56
60
  });
57
61
  // @ts-expect-error - can have changed in the meanwhile
58
62
  if (encoder.state === 'closed') {
59
63
  return;
60
64
  }
61
65
  const keyFrame = framesProcessed % 40 === 0;
62
- encoder.encode(frame, {
66
+ encoder.encode((0, convert_to_correct_videoframe_1.convertToCorrectVideoFrame)({ videoFrame: frame, outputCodec }), {
63
67
  keyFrame,
64
68
  });
65
69
  ioSynchronizer.inputItem(frame.timestamp, keyFrame);
@@ -0,0 +1,2 @@
1
+ import type { AudioEncoderInit, WebCodecsAudioEncoder } from './audio-encoder';
2
+ export declare const getWaveAudioEncoder: ({ onChunk, signal, }: Pick<AudioEncoderInit, "onChunk" | "signal">) => WebCodecsAudioEncoder;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWaveAudioEncoder = void 0;
4
+ const getWaveAudioEncoder = ({ onChunk, signal, }) => {
5
+ return {
6
+ close: () => {
7
+ return Promise.resolve();
8
+ },
9
+ encodeFrame: (audioData) => {
10
+ if (signal.aborted) {
11
+ return Promise.resolve();
12
+ }
13
+ const chunk = {
14
+ timestamp: audioData.timestamp,
15
+ duration: audioData.duration,
16
+ type: 'key',
17
+ copyTo: (destination) => audioData.copyTo(destination, { planeIndex: 0, format: 's16' }),
18
+ byteLength: audioData.allocationSize({ planeIndex: 0, format: 's16' }),
19
+ };
20
+ return onChunk(chunk);
21
+ },
22
+ flush: () => Promise.resolve(),
23
+ waitForFinish: () => Promise.resolve(),
24
+ };
25
+ };
26
+ exports.getWaveAudioEncoder = getWaveAudioEncoder;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/webcodecs",
3
- "version": "4.0.230",
3
+ "version": "4.0.232",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/esm/index.mjs",
@@ -17,19 +17,20 @@
17
17
  "author": "Jonny Burger <jonny@remotion.dev>",
18
18
  "license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
19
19
  "dependencies": {
20
- "@remotion/media-parser": "4.0.230"
20
+ "@remotion/media-parser": "4.0.232"
21
21
  },
22
22
  "peerDependencies": {},
23
23
  "devDependencies": {
24
24
  "@types/dom-webcodecs": "0.1.11",
25
25
  "eslint": "9.14.0",
26
- "@remotion/eslint-config-internal": "4.0.230"
26
+ "@remotion/eslint-config-internal": "4.0.232"
27
27
  },
28
28
  "keywords": [],
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
32
  "description": "Media conversion in the browser",
33
+ "homepage": "https://remotion.dev/webcodecs",
33
34
  "scripts": {
34
35
  "formatting": "prettier src --check",
35
36
  "lint": "eslint src",