C++网络摄像头数据的获取与显示 (续)

来源:互联网 发布:长沙麻将源码 编辑:程序博客网 时间:2024/05/18 00:55

上篇介绍过了vlc对于网络摄像头数据的获取,继续上篇介绍opencv获取摄像头数据


OpenCV是一个强大的计算机视觉库,而不是视频流编码器或者解码器。希望大家不要走入这个误区,可以把这部分简单单独看待。目前,OpenCV只支持avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。如果你想突破这些限制,我建议你最好还是看看ffMpeg,而不是浪费时间在OpenCV上。不过也可以利用视频后期合成工具制作。
对于opencv也是刚刚学习,其中在视频这方面可以使用两种VideoWriter类或者CvCapture类。

类使用方法

类 使用 VideoCapture cv::VideoCapture vcap(“C:/115.avi”); CvCapture CvCapture* capture = cvCreateFileCapture(“C:/115.avi”);

个人感觉这两种似乎差不多,均可读取网络数据和本地视频数据;
闲话少叙继续网络摄像头数据的获取;

const std::string videoStreamAddress = "rtsp://admin:admin@192.168.1.115:554/cam/realmonitor?channel=1&subtype=0";//或者本地文件路径;cv::VideoCapture vcap;if(!vcap.open(videoStreamAddress)) {        std::cout << "Error opening video stream or file" << std::endl;    }    cv::namedWindow("Output Window");    for(;;) {        if(!vcap.read(image1)) {            std::cout << "No frame" << std::endl;            cv::waitKey();        }        cv::imshow("Output Window", image1);        if(cv::waitKey(1) >= 0) break;    }       std::cout<<"\nend image show\n"<<std::endl;

或者

CvCapture *camera=cvCaptureFromFile("http://admin:admin@192.168.1.115/axis-cgi/mjpg/video.cgi?resolution=1280x720&req_fps=30&.mjpg");//http;//CvCapture *camera = cvCreateFileCapture("rtsp://admin:admin@192.168.1.115:554");//rtsp流;if (camera==NULL)    printf("camera is null\n");else    printf("camera is not null");cvNamedWindow("img");while (cvWaitKey(10)!=atoi("q")){    double t1=(double)cvGetTickCount();    IplImage *img=cvQueryFrame(camera);    double t2=(double)cvGetTickCount();    printf("time: %gms  fps: %.2g\n",(t2-t1)/(cvGetTickFrequency()*1000.), 1000./((t2-t1)/(cvGetTickFrequency()*1000.)));    cvShowImage("img",img);//显示视频图像;}cvReleaseCapture(&camera);

这两种方式,使用上感觉差别不是太大。
对于延迟性问题,这个跟网路和所选择的协议相关,如上篇文章所述,vlc有将近不到1s的延迟,用opencv来获取rtsp流或http协议也是不错的选择。但如上篇所述,也会有各种的问题,如http刚开始时,会有视频的卡顿(也可以理解为延迟);rtsp会造成花影,同时延迟性并不比vlc好(但不会出现vlc那样中间变灰的情况),因为opencv使用ffmpeg库解析rtsp等等,但是至少h264视频解码错误。
Console:(控制台输出类似错误)
[h264 @ 00000000030afaa0] error while decoding MB 59 10, bytestream (-9)
[h264 @ 00000000055e7420] left block unavailable for requested intra4x4 mode -1 at 0 14
opencv中FFMPEG对h264编码有些问题
ip camera h264 error while decoding的解决尝试
how to stream h264 video with rtsp in opencv- partially answered
根据这两个链接尝试过GStreamer和vlc,GStreamer未尝试成功,期待小伙伴们的成功。
摄像头产品,有各种连接方式,如http、tcp、udp、rtsp等等
大华摄像头的连接
该扯的都扯完了,如有错误请多多指教。接着整理代码,尽快上传;
可以参考一些网络摄像头rtsp地址格式:
IPC网络摄像头常见传输协议(rtsp协议,udp协议)介绍
海康大华IPCamera RTSP地址和格式
视频码率、帧率和分辨率的联系与区别(基础知识)

0 0
原创粉丝点击