Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自c+的低延迟视频流+;WINDOWS下的opencv应用_C++_Windows_Opencv_Rtsp_Mjpeg - Fatal编程技术网

C++ 来自c+的低延迟视频流+;WINDOWS下的opencv应用

C++ 来自c+的低延迟视频流+;WINDOWS下的opencv应用,c++,windows,opencv,rtsp,mjpeg,C++,Windows,Opencv,Rtsp,Mjpeg,在这个主题上有很多问题,但大多数都涉及到不希望使用的协议——HTML5、WebRTC等 基本上,问题可以表述如下:如何在Windows中通过RTSP或MJPEG[AFAIK it’s better for Real Time streaming]流传输我自己的cv::Mat图像?我能找到的几乎所有东西都依赖于Linux操作系统,只是不适用于该项目 FFMPEG的流水线工作正常,但延迟约为10秒。可以使用ffmpeg团队非常喜欢的一些难以理解的长参数列表将时间缩短到3-4秒,但这还不够,因为正在考

在这个主题上有很多问题,但大多数都涉及到不希望使用的协议——HTML5、WebRTC等

基本上,问题可以表述如下:如何在Windows中通过RTSP或MJPEG[AFAIK it’s better for Real Time streaming]流传输我自己的cv::Mat图像?我能找到的几乎所有东西都依赖于Linux操作系统,只是不适用于该项目

FFMPEG的流水线工作正常,但延迟约为10秒。可以使用ffmpeg团队非常喜欢的一些难以理解的长参数列表将时间缩短到3-4秒,但这还不够,因为正在考虑的项目是一个监控应用程序,由活动用户控制摄像头,所以我需要尽可能接近实时

另一个问题是,解决方案不应该吃掉全部内核,因为它们已经被对象跟踪算法超载

提前谢谢你的帮助

编辑
ffmpeg-re-an-f mjpeg-ihttp://..addr.../video.mjpg -vcodec libx264-调优零延迟-f rtprtp://127.0.0.1:1234 -sdp_file stream.sdp
-我用来直接重新传输流的命令,无需任何预处理,在本地主机上,它产生了大约4秒的延迟

首先,您必须找出延迟的来源

延迟有四个基本来源:

  • 视频捕获
  • 编码
  • 传输
  • 解码(播放器)
  • <>因为你是从本地主机测量的,我们可以考虑传输为0秒。如果您的视频分辨率和帧速率不是很高,解码时间也将接近于零

    我们现在应该关注前两个iten:捕获和编码

    这里的“问题”是libx264是一个软件编码器。因此,它使用CPU电源,需要主内存中的数据,而不是第一次创建图像的GPU内存中的数据

    因此,当FFMPEG捕获帧时,它必须将操作系统的层从视频内存传递到主内存

    不幸的是,如果使用libx264,您不会得到比3秒或2秒更好的结果

    我建议你看一下英伟达的捕获解决方案。


    如果您使用的是功能强大的GPU,则可以直接在GPU中从backbuffer或帧内缓冲区捕获并编码每个帧。您可以使用ffmpeg发送它

    不幸的是,我使用的单板PC上没有离散的GPU图形:(