我有一个使用 ffmpeg 流式传输真实相机图像的 c# 应用程序。输入图像是原始的 8 位灰度格式。我使用标准输入创建了一个 ffmpeg 流来提供图像并将输出包发送到 websocket 客户端。
我使用此配置启动外部 ffmpeg 进程:
-f rawvideo -pixel_format gray -video_size " + camera.Width.ToString() + "x" + camera.Height.ToString() + " -framerate 25 -i - -f mpeg1video -b:v 512k -s 320x240 -
典型图像尺寸为 1040*1392 像素
我使用 jsmpeg 库在浏览器上显示流
这适用于合理的延迟(本地主机上约 500 毫秒),但是当相机图像真的很暗(黑色图像)时,延迟非常大(本地主机上约 2-3 秒)。当黑色时段后图像上再次出现明亮的东西时,“同步”大约需要 2-3 秒。
我在想黑色图像真的很容易压缩并且会生成非常小的包,jsmpeg几乎没有信息可以显示并等待一个完整的数据包到达,但我无法证明我的理论。
我使用了比特率和 fps 等 ffmpeg 参数,但没有任何改变。
有什么我可以尝试的设置吗?
最佳答案
图像的大小取决于有多少噪声蔓延。明亮的图像通常具有较少的噪声并且具有压缩成较小尺寸的清晰区域。
关于c# - 为什么 ffmpeg 在暗图像上有更大的延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374795/