用于实时视频的FFMPEG H.264到JPEG

时间:2017-07-18 16:25:58

标签: ffmpeg

任何帮助表示感谢。

我们正在将H.264流转码为Jpgs,这些Jpgs通过Web套接字发送到浏览器。我们希望这样做的原因是我们可以本地向浏览器提供实时视频。不需要以浏览器无关的方式插件。如果有更好的方法可以做到这一点,那么了解更多信息会很棒。视频源虽然是H.264,但我们无法改变它。

随着我们降低FPS,我们发现相机视频输入有更大的延迟。例如,在1 FPS,我们看到浏览器中的视频落后8秒。在15 FPS时,视频落后约1秒。因此,即使在1 FPS,它每秒更新一帧,落后8秒。

我们认为这是因为具有较低帧速率的FFMPEG必须等待更长的I帧,并且不会将Jpeg发送到Web套接字,直到它具有完整的帧。我们宁愿它发送一个Jpeg而不必等到IFrame到来,我们宁愿看到一个逐渐填充在浏览器上的部分图像。我们不能容忍浏览器中的延迟大于0.8秒。当摄像机设置为发送MJPEG时,我们看到0.250秒滞后。使用H.264,我们看到1.25秒,我们需要将其降低到0.8秒。所以我们真的希望微调H.264以减少一段时间。这就是为什么当我们降低FPS的第一种方法让事情变得更糟时我们感到惊讶,因此想知道还有什么需要与FPS一起进行微调以获得良好的结果。

FFMPEG是否有任何选项告诉它在第一个数据到达后立即发送Jpegs?或许我们应该看看其他调整途径?

以下是FFMPEG参数: ffmpeg的 -buffer_size 1024000 -r 15 -i rtsp://10.140.150.92/02441987-0826-4dc2-b9bd-62efdc0dd951/02441987-0826-4dc2-b9bd-62efdc0dd951_vs1?token = 02441987-0826-4dc2-b9bd-62efdc0dd951 ^ LVEAMOKTD ^ 100 ^ 40 ^ 26 ^ 1500482113 ^ a97effd2a6f85c4a0b5e93953b27c8e1eb40ca77&安培;用户名= USER1 -f image2 -multiple_requests 1 -icy 0 -chunked_post 0 -q:v 31 -vsync 1 -r 15 -vf scale = 640:-1 http://127.0.0.1:58014/video/cameraTag_deviceId_22cameraUid_-1scale_640:-1cameraOrigin_requestedStreams_videostream1/frame-%03d.jpeg

非常感谢, 乔。

1 个答案:

答案 0 :(得分:2)

  

我们正在将H.264流转码为Jpgs,这些Jpgs通过Web套接字发送到浏览器。

你为什么要这样做?

  

当我们降低FPS时,我们发现相机视频输入有更大的延迟。

你正在降低FPS,所以帧之间会有更长的时间......

  

我们认为这是因为具有较低帧速率的FFMPEG必须等待更长的I帧,并且不会将Jpeg发送到Web套接字,直到它有一个完整的。

无需等待I帧从视频中提取JPEG,但是谁知道你没有向我们展示你的FFmpeg命令,所以你不可能说出你使用的999种方法中的哪一种。

  

我们宁愿发送部分Jpeg

据推测,你的意思是你宁愿拥有当前帧的完整JPEG,即使它不是来自源视频的I帧,对吗?

  

因为我们无法容忍视频播放器的延迟

如果这是一个真正令人担忧的问题,那么你在这里完全使用了错误的技术。

我可能应该将所有这些作为评论发布,但这里有太多了。如果您可以解决问题并告诉我们您正在尝试做什么,我将删除此答案并发布实际答案。