嵌入式Qt-简易网络监控摄像头
1 必备基础知识
本篇需要编写一个服务器和客户端
注意,Qt中对Socket的操作进行了进一步的封装,其基本思想还是一样的。
下面就来看一下Qt中如何实现TCP Socket通信。
1.1 QTcpSocket与QTcpServer
QTcpSocket,在Qt中,Socket被封装成了QTcpSocket,可以用它实现TCP客户端的功能,以及服务端接收到客户端后,对客户端的处理。
QTcpServer,对于TCP服务端的功能,可以使用QTcpServer来完成。
这里整理Qt中TCP Socket的使用方法,配合Qt的信号与槽机制,即可实现服务端/客户端数据的收发处理。

1.2 QCamera相关
QCamer,获取当前系统可用的摄像头 类似获取串口
QCamerInfo,获取当前系统可用的摄像头 类似获取串口
QCameraViewfinder,取景框类,摄像头的实时画面显示到这个里面
QCameraImageCapture,图像录制类,与QCamer 配合使用可进行拍照
2 Win平台上测试
首先在Windows平台上用Qt Creator编写服务端和客户端程序,并运行测试。
2.1 服务器端
先来看下服务器端的最终效果:
左侧是摄像头的显示界面
可以切换不同的摄像头作为视频源(笔记本自带的摄像头与USB外接的摄像头)
可以切换摄像头的显示分辨率
可以选择开启或关闭摄像头的IP服务

2.1.1 摄像头画面显示
2.1.2 创建Socket服务
2.1.3 读取图像并发送给客户端
先定义一下图像传送结构体和传送状态:
具体的实现过程:
需要注意的是,图像是需要分包传送的,最后一包一般都不是设定的最大长度,需要计算一下最后一包的数据长度。
2.2 客户端
先来看下客户端的最终效果:
右侧是摄像头画面的显示框
可以修改要连接的服务端的IP地址
可以选择开启或关闭网络摄像头

2.2.1 创建Socket连接
2.3.2 接收服务端的图像
2.3.3 将图像显示出来
3 嵌入式Linux平台上测试
3.1 交叉编译
将客户端程序的源代码拷贝到Ubunu中进行交叉编译,具体编译过程可参考之前的文章:
本篇的实验环境,继续使用的是烧录了野火i.MX6ULL自带的系统固件Linux板子,需要通过SSH的方式将编译的程序再发送到板子中,SSH传输文件的操作可参考上篇文章:
3.2 实验演示

4 总结
本篇介绍了如何用Qt实现一个网络摄像头功能,通过服务端将USB摄像头转换为一个IP摄像头,Linux板子中的客户端来连接服务器,将摄像头的实时画面显示出来。