@remotion/renderer 4.0.503 → 4.0.505

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.
@@ -17826,8 +17826,16 @@ var serveHandler = async (request, response, config) => {
17826
17826
  headers["Content-Length"] = String(streamOpts.end - streamOpts.start + 1);
17827
17827
  }
17828
17828
  headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
17829
+ const readStream = stream;
17830
+ response.on("close", () => {
17831
+ readStream.destroy();
17832
+ });
17833
+ if (response.destroyed) {
17834
+ readStream.destroy();
17835
+ return;
17836
+ }
17829
17837
  response.writeHead(response.statusCode || 200, headers);
17830
- stream.pipe(response);
17838
+ readStream.pipe(response);
17831
17839
  };
17832
17840
 
17833
17841
  // src/serve-static.ts
@@ -202,7 +202,20 @@ const serveHandler = async (request, response, config) => {
202
202
  headers['Content-Length'] = String(streamOpts.end - streamOpts.start + 1);
203
203
  }
204
204
  headers['Cache-Control'] = 'no-cache, no-store, must-revalidate';
205
+ const readStream = stream;
206
+ // Chrome's media demuxer aborts Range requests constantly while seeking
207
+ // <Video>/<Audio>. Without this, an aborted request leaves the piped stream
208
+ // stranded on backpressure and its file descriptor open for the life of the
209
+ // render process. 'close' fires on completion as well as abort, and
210
+ // destroy() on an already-ended stream is a no-op.
211
+ response.on('close', () => {
212
+ readStream.destroy();
213
+ });
214
+ if (response.destroyed) {
215
+ readStream.destroy();
216
+ return;
217
+ }
205
218
  response.writeHead(response.statusCode || 200, headers);
206
- stream.pipe(response);
219
+ readStream.pipe(response);
207
220
  };
208
221
  exports.serveHandler = serveHandler;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/renderer"
4
4
  },
5
5
  "name": "@remotion/renderer",
6
- "version": "4.0.503",
6
+ "version": "4.0.505",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -22,11 +22,11 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "execa": "5.1.1",
25
- "remotion": "4.0.503",
26
- "@remotion/streaming": "4.0.503",
25
+ "remotion": "4.0.505",
26
+ "@remotion/streaming": "4.0.505",
27
27
  "source-map": "0.8.0",
28
28
  "ws": "8.21.0",
29
- "@remotion/licensing": "4.0.503"
29
+ "@remotion/licensing": "4.0.505"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": ">=16.8.0",
@@ -40,19 +40,19 @@
40
40
  "react-dom": "19.2.3",
41
41
  "@typescript/native-preview": "7.0.0-dev.20260217.1",
42
42
  "@types/ws": "8.5.10",
43
- "@remotion/example-videos": "4.0.503",
44
- "@remotion/eslint-config-internal": "4.0.503",
43
+ "@remotion/example-videos": "4.0.505",
44
+ "@remotion/eslint-config-internal": "4.0.505",
45
45
  "eslint": "9.19.0",
46
46
  "@types/node": "20.12.14"
47
47
  },
48
48
  "optionalDependencies": {
49
- "@remotion/compositor-darwin-arm64": "4.0.503",
50
- "@remotion/compositor-darwin-x64": "4.0.503",
51
- "@remotion/compositor-linux-arm64-gnu": "4.0.503",
52
- "@remotion/compositor-linux-arm64-musl": "4.0.503",
53
- "@remotion/compositor-linux-x64-gnu": "4.0.503",
54
- "@remotion/compositor-linux-x64-musl": "4.0.503",
55
- "@remotion/compositor-win32-x64-msvc": "4.0.503"
49
+ "@remotion/compositor-darwin-arm64": "4.0.505",
50
+ "@remotion/compositor-darwin-x64": "4.0.505",
51
+ "@remotion/compositor-linux-arm64-gnu": "4.0.505",
52
+ "@remotion/compositor-linux-arm64-musl": "4.0.505",
53
+ "@remotion/compositor-linux-x64-gnu": "4.0.505",
54
+ "@remotion/compositor-linux-x64-musl": "4.0.505",
55
+ "@remotion/compositor-win32-x64-msvc": "4.0.505"
56
56
  },
57
57
  "keywords": [
58
58
  "remotion",