基于C++(QT框架)设计的⽹络摄像头项⽬(⽀持跨平台运
⾏)
⼀、运⾏效果展⽰感恩父母小故事
1.1 windows系统运⾏效果展⽰
2011年入党申请书⽹络摄像头项⽬(Windows系统运⾏效果)
1.2 Android系统运⾏效果展⽰
⽹络摄像头项⽬(Android系统运⾏效果)
1.3 Linux系统运⾏效果展⽰
⽹络摄像头项⽬(Linux系统运⾏效果)
⼆、功能简介
2.1 功能介绍
这是基于C++(QT框架)设计的⽹络摄像头项⽬,本篇⽂章介绍的⽹络摄像头项⽬并不是采⽤RTMP或者RTSP推流编码的⽹络摄像头产品,⽽是采⽤HTTP协议推送图⽚流的⽅式,采⽤浏览器访问查看摄像头画⾯。
这是软件运⾏截图:
这是浏览器访问截图:
什么牌子护肤品好项⽬运⾏的效果:
软件打开之后,先点击刷新信息,程序会扫描当前设备的摄像头和IP地址信息;并将访问的地址打印了出来,然后点击开启摄像头,界⾯就实时显⽰选择的摄像头画⾯。 在局域⽹内,其他设备打开浏览器,输⼊下⾯提⽰的地址访问,输⼊⽤户名和密码,即可查看到摄像头画⾯。程序⾥处理浏览器的请求是采⽤多线程⽅式,可以⽀持多个浏览器同时访问。
表达能力差怎么办代码思路
代码采⽤的是C++(QT框架)编写,代码本⾝主要是分为两个部分:
1. 绑定指定端⼝号,创建TCP服务器,⽤来响应客户端的请求(浏览器)
2. 摄像头画⾯采集部分,摄像头数据采集采⽤单独的线程,采集之后将图像传递给界⾯刷新显⽰,并将图像填充到全局缓冲区,⽅便客户端处理线程将图像再传递给浏览器。
每当有新的浏览器访问进来,就会单独开辟⼀个线程,去处理这个浏览器接下来的通信交互,浏览器断开连接之后,线程⾃动销毁;图像缓冲区是⼀个公共的缓冲区,摄像头图像采集线程向该缓冲区填充数据,与浏览器通信的线程就从这个缓冲区读取数据,采⽤的是条件变量+互斥锁同步访问。
项⽬⾥⽤到的知识点主要是摄像头采集,线程处理、⽹络编程,HTTP协议等知识点。
如果是搞QT开发,都可以当做⼊门学习参考;如果想要⽤其他语⾔实现,思路搞清楚也很容易。 标准C语⾔。
在Linux下如果不需要界⾯,可以直接使⽤C语⾔完成项⽬效果,摄像头采集采⽤Linux下标准V4L2框架,线程就采⽤pthread_create创建,互斥锁、条件变量这些Linux都有,只要把程序思路搞清楚,实现起来还是很容易。
2.2 跨平台运⾏
代码是采⽤QT框架编写,所以⽀持跨平台编译运⾏;⽬前代码在Android、Linux、windows系统上都编译运⾏通过,达到相同效果;由于⾝边没有苹果设备,暂时未做测试。
不同系统间代码上还是有少许区别,代码⾥通过宏的⽅式区分了,不同的系统运⾏不同的部分代码。
如果要编译QT的代码在Android设备上运⾏,得先搭建对应的开发环境;如果不会环境搭建,可以参考下⾯链接。
(1). Linux(ubuntu)下搭建QT Android开发环境
(2). windows(win10 64bit)下搭建QT Android开发环境
(3). windows下Qt + VS2017 环境安装
吕一2.3 项⽬源码运⾏环境
QT版本: 5.12.6
编译器: MinGW 32
系统: Win10 Ubuntu18.04
2.4 代码运⾏介绍
程序运⾏时,需要⽤到⼀些资源⽂件,这些资源⽂件在程序的源码⽬录下,名称是: www。
支付宝扫福字一天能扫几个如果是windows、Linux系统环境,需要把资源⽬录拷贝到程序运⾏的同级⽬录下。
如果是Android系统,这些资源⽂件需要在编译的时候打包进APK⾥,在⼯程⽬录下的Android⽬录⾥创建⼀个assets⽬录,将资源⽂件全部拷贝到assets⽬录下;程序编译的时候会⾃动将assets⽬录打包进apk,到时候Android程序运⾏时就可以直接去assets⽬录下获取资源⽂件。
当apk⽣成之后,可以解压出来看看,assets⽬录打包成功没有。
检查了下,打包成功的,这样Android程序运⾏时,访问的路径就没有问题。
2.5 Linux系统运⾏摄像头⽆法读取数据问题说明
由于我测试的环境是在虚拟机⾥运⾏ubuntu系统,要在ubuntu⾥访问摄像头,需要先把摄像头挂载到虚拟机,才能访问。如果打开虚拟机发现右下⾓托盘⾥摄像头图标都没有,说明托盘程序可能被360、电脑管家之类的安全软件禁⽌了,需要开启⾃动启动,重启VM虚拟机软件再测试。
发布评论