
本文详解如何在 Go 中正确捕获 ffmpeg 的实时输出流(如 rawvideo),避免因忽略 Read 返回值导致的数据截断问题,并提供两种健壮的流式读写方案,适用于后续 UDP 流处理、中间字节修改等场景。
本文详解如何在 go 中正确捕获 ffmpeg 的实时输出流(如 rawvideo),避免因忽略 `read` 返回值导致的数据截断问题,并提供两种健壮的流式读写方案,适用于后续 udp 流处理、中间字节修改等场景。
在 Go 中调用 ffmpeg 进行实时音视频流处理(如 UDP 输入→ffmpeg 解复用/转码→字节修改→ffmpeg 重封装→UDP 输出)时,一个常见且隐蔽的陷阱是:直接对 io.Read 的返回字节数不加判断,误将整个缓冲区当作有效数据写入。这正是原代码中输出文件比输入小约 1MB 的根本原因——stdout.Read(bytes) 每次仅填充部分缓冲区(例如只读入 32768 字节),但代码却无条件写入全部 1024 字节(甚至更大缓冲区),导致大量零填充(
