QT 支持多客户端网络视频监控的实现
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
QT 支持多客户端网络视频监控的实现相关推荐
- 【智慧养殖解决方案】如何使用EasyGBS构建鱼塘养殖高清网络视频监控系统?
一.方案背景 随着我国农业的快速发展,以及对新兴技术的应用,养殖业.农牧业.种植业等也面临着全新的挑战与机遇.如何与新兴技术结合,建立智能化的远程监控平台,实现高效管理.提高经济效益和市场竞争力? 以 ...
- 基于Linux的嵌入式网络视频监控系统研究与设计
http://www.nesr.lingd.net/article-4364839-1.html 摘 要:网络视频监控已经在嵌入式领域得到了发展,但目前视频监控硬件设施比较昂贵,不能普遍使用.本文提出 ...
- 大型企业网络视频监控系统解决方案
企业级视频监控系统采用数字化.网络化和智能化相融合的新一代视频监控技术,支持领先的视音频编解码算法,具有强大的网络处理及智能整合功能,可提供集图像监控和报警联动于一体的行业网络视频监控解决方案.基于开 ...
- 【解决方案】国标GB28181平台EasyGBS级联EasyCVR视频智能分析搭建“蓝天卫士”网络视频监控系统技术方案
一.背景分析 当前,现代工农业的迅速发展在为社会创造了丰富的物质财富的同时,也对自然环境和人类健康造成了日益严重的危害,并导致了资源短缺.环境污染.生态破坏.随着中国经济环境的改善和能源环境结构调整, ...
- 【解决方案】国标GB28181协议视频平台EasyGBS搭建培训机构网络视频监控系统解决方案
近来校园安全事件及校车事故频发,引起全社会对学生上学途中及在校期间安全状况的强烈关注,送孩子去培训机构上辅导班,兴趣课亦是如此.怎样才能为家长解除后顾之忧呢?而作为培训机构管理者,必须每时每刻对园中各 ...
- 基于MPEG-4和RTP的网络视频监控系统研究
基于MPEG-4和RTP的网络视频监控系统研究 文/北京邮电大学通信网络综合技术研究所 龚猷龙 刘勇 摘 要:随着计算机.网络及多媒体通信技术的发展,视频监控在业界得到了广泛的应用,许多先进的技术 ...
- 高速公路网络视频监控方案
随着国内高速公路的大规模建设以及高速公路网的完善,对高速公路收费及路段的监控.管理已经成为高速公路管理的一项重要内容.本方案旨在利用现有的数据传输线路,建设基于IP网络传输的集中视频监控解决方案,以科 ...
- 无线网络视频监控系统基本概念和术语
无线网络视频监控系统基本概念和术语 1.网络摄像机与模拟摄像机的区别 模拟摄像机,或称摄像头,输出CVBS模拟视频信号,PAL制或者NTSC制.模拟摄像机多采用CCD器件,目前也有采用CMOS器件的. ...
- 基于嵌入式技术的网络视频监控系统
随着计算机技术及网络技术的迅猛发展,世界掀起一股强大的数字化.网络化浪潮,对于公安.安防行业的发展,必须经历模拟数字混合的阶段,但是最终的趋势必然是全面数字化,即视频在前端进行数字化.网络化,采用嵌入 ...
最新文章
- 碰疼了会躲!这个植入“迷你大脑”的AI机器人,可感知疼痛,还能自我愈合...
- SDRAM 相关资料
- 【转】java提高篇(十)-----详解匿名内部类
- 解决微信小程序配置https不成功问题
- linux系统怎么清理磁盘空间,LINUX系统怎么使用命令清理磁盘空间?
- 【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等
- DE标识DellUtility磁盘手动创建
- 自定义对话框 提示:Unable to add window token null is not for an application
- 记录jquery的ajax
- shell 调试脚本设置
- Atitit OOCSS vs bem
- php游戏充值平台源码,PHP平台源码下载-PHP第四方支付平台源码pc端下载
- 矩阵迹(trace)与行列式(determinate)的一些性质
- hspace在表格中无效吗html,HTML代码汇总详解
- transform translateY(-50%) 实现元素垂直居中效果
- iOS牛顿摆 小球撞击 物理学仿真模拟
- python函数之plot函数(一)
- pandas学习之concat合并及读写CSV文件
- 如何制作笔记本操作系统恢复盘
- 关于社区团购和菜场买菜的一点感想