QT 支持多客户端网络视频监控的实现
来源:互联网 发布:php的laravel框架 编辑:程序博客网 时间:2024/06/08 15:58
QT里获取摄像头的单张数据:
cam = new QCamera; capture = new QCameraImageCapture(cam); connect(capture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(image_ready(int,QImage))); //当捕捉一张图像数据后,触发槽函数,并传递图像数据作为参数 cam->setCaptureMode(QCamera::CaptureStillImage); //设置摄像头的工作模式为捕捉一张张的图像 cam->start(); capture->capture(); //捕捉开始,捕捉完成后,会发出信号imageCaptured(...)//这种方式,每次获取图像时,都会在硬盘上保存起来,效率低. //capture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer); //设置捕捉的图像存放在内存数组里,还是会保存到硬盘上。估计是bug.
/////////////////////////////////////////////////
用摄像头预览模式:
cam = new QCamera; view = new QCameraViewfinder(this); view->setGeometry(0, 0, 640, 480); view->show(); cam->setViewfinder(view); cam->start();//这种方式,图像会直接在view上刷出,不会保存到硬盘上。刷新速度快。但没法直接拿到图像数据.
在摄像头的预览模式下,可以通过截屏的方式来获取图像的数据:
QScreen *screen = QApplication::primaryScreen(); QPixmap map = screen->grabWindow(view->winId()); //只截view窗口对象上的图像,也就是摄像头的数据 //再编码成jpg图像 QByteArray ba; QBuffer bf(&ba); map.save(&bf, "jpg", 50); //完成后,图像数据在ba.data()里, 图像大小为ba.size();
//////////////////////////////////////////////////
网络传输的实现:
传输协议:
图像数据按1380字节分成多个部分,每次传输一部分数据.
客户端连接后,发出请求”new_request”, 服务器端发回”newImage:图像大小”
客户端发回”ack”, 服务器端发出第一部分数据,等接收到客户端的”ack”后,再发出下一部分数据…
服务器端:
1. 创建并初始化QTcpServer对象
2. 实现QCamera对象的预览模式3. 用QList<QTcpSocket*>容器把每个客户端连接上来产生的QTcpSocket对象的地址。每个客户端的网速不一样, 所以在服务端每个QTcpSocket对象都需要存放自己的图像数据,已发出的数据长度,工作状态等 .
class Data { public: char data[LEN]; //图像数据 int len; //图像大小 int len_sent; //已发出的数据长度 int stats; //工作状态, 0表示空闲(图像数据可以更新), 1表示图像数据传输中(还不可以更新图像数据), 2表示需要发出"newImage:图像大小" Data() { len_sent = 0; stats = 0; } }; // 通过QObject里的setUserData(...)来设置每个QTcpSocket对象的Data对象 // 通过QObject里的userData(..)来获取每个QTcpSocket对象的Data对象
4. 定时通过截屏的方式来获取摄像头数据, 并根据每个QTcpSocket对象的工作状态来更新图像数据. 如是状态2,还需要发出"newImage:图像大小".
////////////////////////
客户端:
1. 创建QTcpSocket对象并连接服务器端
2. 连接上后,向服务器端发出"new_request"请求图像数据. 记录服务器端发回的图像大小. 再回"ack", 然后接收并存放好每部分的图像数据,直到接收完成后,把图像刷出来.
//////////////////////////////////////////////////////////////////////////////////////////
完整服务器端,客户端的工程下载:
http://download.csdn.net/download/jklinux/9897890
阅读全文
1 0
- QT 支持多客户端网络视频监控的实现
- 使用Qt编写多路视频监控客户端
- 基于MFC的视频监控系统客户端实现 ---项目经验
- 基于QT的多线程视频监控的实现(一)
- 基于QT的多线程视频监控的实现(二)
- 基于AVI的网络视频监控存储系统的实现方法
- 基于AVI的网络视频监控存储系统的实现方法
- S3c2410-linux实现网络视频监控功能
- S3c2410-linux实现网络视频监控功能
- S3c2410-linux实现网络视频监控功能
- ADSL网络实现远程视频监控功能
- 视频监控RTSP 客户端
- 海康威视 网络硬盘录像机 Linux / QT 视频监控
- 低成本家庭视频监控的实现 开源Linux路由器+USB摄像头+手机客户端(PC也行)
- 基于安卓平台,客户端视频监控的实现(一)
- 基于安卓平台,客户端视频监控的实现(二)
- 基于安卓平台,客户端视频监控的实现(三)
- 网络视频监控领域的名词解释
- Delphi Dll线程使用Synchronize同步导致线程假死的解决方法
- 二分查找 模板
- splay总结
- Java并发编程:Synchronized及其实现原理
- C++排序算法之归并排序
- QT 支持多客户端网络视频监控的实现
- 计算机视觉目标检测的框架与过程
- java关于使用Orika的mapperFactory进行对象拷贝以及集合拷贝
- TKmybatis的框架介绍和原理分析及Mybatis新特性演示
- SpringMVC日期类型转换问题三大处理方法归纳
- mongoDB 操作
- 广播
- python gevent 示例
- WPF去除DataGrid多余的空白列