- Updated: March 11, 2026
- 5 min read
ffmpeg-over-ip: Stream ffmpeg over IP – New Open‑Source Project
Skip to content You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert steelbrain / ffmpeg-over-ip Public Notifications You must be signed in to change notification settings Fork 14 Star 699 Code Issues 3 Pull requests 0 Actions Projects Security 0 Insights Additional navigation options Code Issues Pull requests Actions Projects Security Insights mainBranchesTagsGo to fileCodeOpen more actions menuFolders and filesNameNameLast commit messageLast commit dateLatest commit History15 Commits15 Commits.github/workflows.github/workflows artifactsartifacts cmdcmd docsdocs fiofio internalinternal patchespatches scriptsscripts teststests third_partythird_party vendorvendor .gitignore.gitignore .gitmodules.gitmodules CONTRIBUTING.mdCONTRIBUTING.md LICENSE.mdLICENSE.md README.mdREADME.md go.modgo.mod go.sumgo.sum template.ffmpeg-over-ip.client.jsonctemplate.ffmpeg-over-ip.client.jsonc template.ffmpeg-over-ip.server.jsonctemplate.ffmpeg-over-ip.server.jsonc View all filesRepository files navigationREADMEContributingLicenseffmpeg-over-ip Use GPU-accelerated ffmpeg from anywhere — a Docker container, a VM, or a remote machine — without GPU passthrough or shared filesystems.The Problem GPU transcoding is powerful, but getting access to the GPU is painful: Docker containers need –runtime=nvidia, device mounts, and driver version alignment between host and container Virtual machines need PCIe passthrough or SR-IOV — complex setup that locks the GPU to one VM Remote machines need shared filesystems (NFS/SMB) with all the path mapping, mount maintenance, and permission headaches that come with them You just want your media server to use the GPU for transcoding.You shouldn’t need to restructure your infrastructure to make that happen. The Solution Run the ffmpeg-over-ip server on the host (or any machine with a GPU). Point your app at the client binary instead of ffmpeg. Done — your app gets GPU-accelerated transcoding without needing direct GPU access. The client pretends to be ffmpeg. It forwards arguments to the server, which runs a patched ffmpeg that tunnels all file I/O back through the connection. Files are never stored on the server.CLIENT (has files, no GPU) SERVER (has GPU) ======================== =========================== Media server invokes “ffmpeg” Daemon listening on :5050 | | ffmpeg-over-ip-client ffmpeg-over-ip-server | | +——— TCP connection ————>+ | | Local filesystem patched ffmpeg (real files) (file I/O tunneled back to client) No GPU passthrough. No shared filesystem. No NFS. No SMB. Just one TCP port.Releases include pre-built ffmpeg and ffprobe binaries with broad hardware acceleration support (NVENC, QSV, VAAPI, AMF, VideoToolbox, and more) — built on the jellyfin-ffmpeg pipeline. No need to install ffmpeg separately on either side. Quick Start See docs/quick-start.md to get up and running in a few minutes. Upgrading from v4 See docs/upgrading.md for migration guide and breaking changes. Configuration See docs/configuration.md for full configuration reference (config file search paths, server/client options, rewrites, logging, address formats). Docker See docs/docker.md for Docker integration, Unix socket setup, and debugging tips.How It Works Your media server calls ffmpeg-over-ip-client with normal ffmpeg arguments The client connects to the server and sends the command with HMAC authentication The server launches its patched ffmpeg, which tunnels all file reads and writes back to the client stdout/stderr are forwarded in real-time; when ffmpeg exits, the client exits with the same code Multiple clients can connect to the same server simultaneously — each session gets its own ffmpeg process.Supported Platforms Client Server + ffmpeg Linux x86_64 ✓ ✓ Linux arm64 ✓ ✓ macOS arm64 ✓ ✓ macOS x86_64 ✓ ✓ Windows x86_64 ✓ ✓ Troubleshooting See docs/troubleshooting.md for common issues and debugging tips. Building from Source See CONTRIBUTING.md for build instructions, running tests, and project structure. Security Authentication: HMAC-SHA256 with a shared secret. Every command is signed. Single port: Only the server listens on a port. The client makes outbound connections only.License Split license — see LICENSE.md. The fio layer and ffmpeg patches (fio/, patches/) are GPL v3 (derived from ffmpeg). Everything else is MIT. About Connect to remote ffmpeg servers ffmpeg-over-ip.com/ Topics ffmpeg gpu emby jellyfin Resources Readme License View license Contributing Contributing Uh oh! There was an error while loading. Please reload this page.Activity Stars 699 stars Watchers 4 watching Forks 14 forks Report repository Releases 6 v5: Tunnel file I/O over TCP — no shared filesystem required Latest Mar 10, 2026 + 5 releases Uh oh! There was an error while loading. Please reload this page. Contributors 1 steelbrain Anees Iqbal Languages Go 61.2% C 28.2% Shell 8.9% Python 1.5% Makefile 0.2% You can’t perform that action at this time. [{“Name”:”.github/workflows”,”Last commit message”:””,”Last commit date”:””},{“Name”:”artifacts”,”Last commit message”:””,”Last commit date”:””},{“Name”:”cmd”,”Last commit message”:””,”Last commit date”:””},{“Name”:”docs”,”Last commit message”:””,”Last commit date”:””},{“Name”:”fio”,”Last commit message”:””,”Last commit date”:””},{“Name”:”internal”,”Last commit message”:””,”Last commit date”:””},{“Name”:”patches”,”Last commit message”:””,”Last commit date”:””},{“Name”:”scripts”,”Last commit message”:””,”Last commit date”:””},{“Name”:”tests”,”Last commit message”:””,”Last commit date”:””},{“Name”:”third_party”,”Last commit message”:””,”Last commit date”:””},{“Name”:”vendor”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.gitignore”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.gitmodules”,”Last commit message”:””,”Last commit date”:””},{“Name”:”CONTRIBUTING.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”LICENSE.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”README.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”go.mod”,”Last commit message”:””,”Last commit date”:””},{“Name”:”go.sum”,”Last commit message”:””,”Last commit date”:””},{“Name”:”template.ffmpeg-over-ip.client.jsonc”,”Last commit message”:””,”Last commit date”:””},{“Name”:”template.ffmpeg-over-ip.server.jsonc”,”Last commit message”:””,”Last commit date”:””},{}]