如果您的目标是 Windows 操作系统,Engine 推荐的选项似乎是理想的选择。
对于 Linux,我最终使用 RTSP 服务器(FFSERVER)作为 VideoCapture 输入,然后使用 FFMPEG 和“x11grab”进行屏幕广播。
Windows 的 FFMPEG 将接受“屏幕捕获记录器”应用程序作为输入,但我没有任何在 Windows 上设置 RTSP 服务器的经验。
对于我的设置,这转换为如下代码:
cv::VideoCapture cap;
cap.open("http://localhost:8090/live.flv"); // open the default camera
cap.set(CV_CAP_PROP_FOURCC, CV_FOURCC('F', 'L', 'V', '1'));
and
cv::resize(frame, frame, cv::Size(200, 200));
cv::VideoWriter outStream("http://localhost:8090/feed2.ffm",
CV_FOURCC('F', 'L', 'V', '1'), 10, cv::Size(200, 200), true);
200x200 分辨率对于最大限度地减少延迟是必要的,因此如果您可以直接抓取屏幕缓冲区以避免不必要的屏幕广播/编码,从性能的角度来看,这听起来更好......