C++网络摄像头数据的获取与显示 (续)
来源:互联网 发布:长沙麻将源码 编辑:程序博客网 时间:2024/05/18 00:55
上篇介绍过了vlc对于网络摄像头数据的获取,继续上篇介绍opencv获取摄像头数据
OpenCV是一个强大的计算机视觉库,而不是视频流编码器或者解码器。希望大家不要走入这个误区,可以把这部分简单单独看待。目前,OpenCV只支持avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。如果你想突破这些限制,我建议你最好还是看看ffMpeg,而不是浪费时间在OpenCV上。不过也可以利用视频后期合成工具制作。
对于opencv也是刚刚学习,其中在视频这方面可以使用两种VideoWriter类或者CvCapture类。
类使用方法
个人感觉这两种似乎差不多,均可读取网络数据和本地视频数据;
闲话少叙继续网络摄像头数据的获取;
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
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地址和格式
视频码率、帧率和分辨率的联系与区别(基础知识)
- C++网络摄像头数据的获取与显示 (续)
- C++网络摄像头数据的获取与显示
- 基于QT实现对网络摄像头数据的显示
- IOS获取摄像头数据 显示当地视频
- OpenCV 获取摄像头图像数据并显示
- Linux 获取摄像头数据并实时显示
- VB如何实现摄像头数据的捕获与显示
- 如何通过手机获取到网络摄像头的视频流并显示
- python本地与网络数据的获取
- 【物联网智能网关-02】获取摄像头数据+显示
- V4L2 + opencv3 Linux获取摄像头数据显示 程序源码
- linux下摄像头图像数据的获取
- linux下摄像头图像数据的获取
- 在C#获取摄像头数据的程序
- 网络摄像头的角度与视野宽度
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- libc: ../src/pj/os_core_unix.c:692: pj_thread_this: assertion "!"Calling pjlib from unknown/external
- The following classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar (Fi
- 判断应用程序是否在前台
- SpringBoot启用HTTPS协议
- 排序算法之桶排序
- C++网络摄像头数据的获取与显示 (续)
- iOS开发多线程atomic nonatomic区别
- 【Python学习】python+Eclipse+pydev环境搭建
- Fill-rate,Canvases and input 填充率,画布和输入—(Unity3d)
- Visual Studio 安装后如何启动
- HDU2874——Connections between cities 详解 (LCA,RMQ,数据结构,dfs序,并查集)
- 关于分布式系统的数据一致性问题
- 分蛋糕问题
- Android-Lint检查的潜在问题