That was the clue. FFmpeg was up, the process IDs alive, yet no packets crossed. Digging deeper revealed the culprit: an internal port binding that lived inside the container network, invisible from outside.
FFmpeg, by design, can stream or listen on specific addresses and ports. But when it binds to an internal interface, it stays locked within the loopback or container network. From a security view, that’s clean. From a deployment view, it can break your pipeline. Understanding how FFmpeg handles ports—inside and out—is the difference between seamless streaming and ghost connections.
The “internal port” term surfaces most often with containerized workloads, isolated networks, and complex multi-stage pipelines. In Kubernetes pods, Docker networks, or VM bridges, FFmpeg may happily bind to 127.0.0.1:8554 or another port local to its network namespace. The process runs fine. Logs look fine. But nothing gets out unless routing or port mapping is explicit. Only a published port or a proxy can bridge that internal address to the external world.