Сохранить кадры в буфере. Как работать с RTSP в OpenCV?

Мне нужно получить поток RTSP с IP-камеры и вырезать поток на кадры.
Я пытался:

int _tmain(int argc, _TCHAR* argv[])
{
CvCapture *camera = cvCreateFileCapture("rtsp://MYIP:8554/CH001.sdp");

if (camera == NULL) {
printf("camera is null, aborting...");
return -1;
}
printf("camera is not null\n");
fflush(stdout);
cvNamedWindow("img");
int i = 0;
while (cvWaitKey(100) != 27) {
IplImage *img = cvQueryFrame(camera);
if (img == NULL) break;
cvShowImage("img", img);
// cvReleaseCapture(&camera);
// printf("Image: %i\n", ++i);
}
cvReleaseCapture(&camera);
return 0;
}

не работает, но:

int _tmain(int argc, _TCHAR* argv[])
{
{
VideoCapture cap("C:/720.mp4"); // open the video file for reading
if ( !cap.isOpened() )  // if not success, exit program
{
cout << "Cannot open the video file" << endl;
return -1;
}

//cap.set(CV_CAP_PROP_POS_MSEC, 90000); //start the video at 300ms
double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video
cout << "Frame per seconds : " << fps << endl;
namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"while(1)
{
Mat frame;

bool bSuccess = cap.read(frame); // read a new frame from video

if (!bSuccess) //if not success, break loop
{
cout << "Cannot read the frame from video file" << endl;
break;
}
imshow("MyVideo", frame); //show the frame in "MyVideo" window

if(waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
{
cout << "esc key is pressed by user" << endl;
break;
}
}
return 0;
}
}

Работает отлично!
Как вырезать поток RTSP для кадров? как работать с RTSP в opencv? Я также могу использовать FFmpeg и другие библиотеки, но Мне нужно сохранить кадры в буфере.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]