我有一台IP网络摄像机,可以使用TCP,UDP,RTSP等流式传输MJPEG,H.264等。在我的客户端应用程序中,我需要访问此流以获取静态图像(捕获)或完整的视频流本身。
由于网络负载和延迟(为了获得最新的图像),我更喜欢RTSP。所以我尝试了WPF中的MediaElement,但即使在Stackoverflow上的许多帖子的帮助下,我都没有设法让它运行。
有关如何实现该协议或使用其他协议的任何帮助?
答案 0 :(得分:0)
尝试使用库EmguCv。
你可以通过rtsp连接。
答案 1 :(得分:0)
我在这里找到了另一个thread/post的解决方案。你会看到我只显示每10帧。这是因为帧被接收得如此之快,即imshow(...)将显示被破坏/扭曲的图像。如果你只提供每第10帧imshow(...),结果将是正常的。如果IP摄像机以30fps的速度提供1080p,我必须每隔30帧或40帧显示一次。
#include "cv.h"
#include "highgui.h"
#include <iostream>
int main(int, char**) {
cv::VideoCapture vcap;
cv::Mat image;
const std::string videoStreamAddress = "rtsp://cam_address:554/live.sdp";
/* it may be an address of an mjpeg stream,
e.g. "http://user:pass@cam_address:8081/cgi/mjpg/mjpg.cgi?.mjpg" */
//open the video stream and make sure it's opened
if(!vcap.open(videoStreamAddress)) {
std::cout << "Error opening video stream or file" << std::endl;
return -1;
}
int counter = 0;
for(;;) {
counter++;
if(!vcap.read(image)) {
std::cout << "No frame" << std::endl;
cv::waitKey();
}
// if the picture is too large, imshow will display warped images, so show only every 10th frame
if (counter % 10 != 0)
continue;
cv::imshow("Output Window", image);
if(cv::waitKey(1) >= 0) break;
}
}