diff --git a/patches/README.md b/patches/README.md new file mode 100644 index 0000000..38a3ba3 --- /dev/null +++ b/patches/README.md @@ -0,0 +1,35 @@ +# Patches + +This directory contains patches for vendor dependencies that have local modifications. + +## ffmpeg-headers-fix.patch + +**Issue:** Screen share streaming fails with ffmpeg error: +``` +[NULL @ ...] Unable to find a suitable output format for 'Mozilla/5.0' +``` + +**Root Cause:** The `@dank074/discord-video-stream` library's `prepareStream` function passes HTTP headers to ffmpeg without proper quoting. The `fluent-ffmpeg-simplified` library uses `parseArgsStringToArgv` to parse command-line arguments, which splits strings by spaces. This causes the User-Agent header value (with spaces) to be split into multiple separate arguments instead of being kept as a single value. + +**Fix:** Wrap the entire headers string in quotes so `parseArgsStringToArgv` treats it as a single argument: +```typescript +// Before (broken) +command.inputOptions( + "-headers", + Object.entries(customHeaders) + .map(([k, v]) => `${k}: ${v}`) + .join("\r\n"), +); + +// After (fixed) +const headersString = Object.entries(customHeaders) + .map(([k, v]) => `${k}: ${v}`) + .join("\r\n"); +command.inputOptions(`-headers "${headersString}"`); +``` + +**Applied To:** `vendor/discord-video-stream/src/media/newApi.ts` (lines 263-269) + +**Status:** Patch is applied locally. The compiled output in `dist/media/newApi.js` reflects this fix. + +**Note:** This is a local patch to the vendor submodule. To make this permanent, it should be submitted as a PR to the upstream repository: https://github.com/dank074/discord-video-stream diff --git a/patches/ffmpeg-headers-fix.patch b/patches/ffmpeg-headers-fix.patch new file mode 100644 index 0000000..56c6f8e --- /dev/null +++ b/patches/ffmpeg-headers-fix.patch @@ -0,0 +1,19 @@ +diff --git a/src/media/newApi.ts b/src/media/newApi.ts +index original..modified 100644 +--- a/src/media/newApi.ts ++++ b/src/media/newApi.ts +@@ -261,12 +261,10 @@ export function prepareStream( + if (isHttpUrl) { +- command.inputOptions( +- "-headers", +- Object.entries(customHeaders) +- .map(([k, v]) => `${k}: ${v}`) +- .join("\r\n"), +- ); ++ const headersString = Object.entries(customHeaders) ++ .map(([k, v]) => `${k}: ${v}`) ++ .join("\r\n"); ++ command.inputOptions(`-headers "${headersString}"`); + if (!isHls) { + command.inputOptions([ + "-reconnect 1",