嵌入式Qt-簡易網絡監(jiān)控攝像頭
1 必備基礎知識
本篇需要編寫一個服務器和客戶端
注意,Qt中對Socket的操作進行了進一步的封裝,其基本思想還是一樣的。
下面就來看一下Qt中如何實現(xiàn)TCP Socket通信。
1.1 QTcpSocket與QTcpServer
QTcpSocket,在Qt中,Socket被封裝成了QTcpSocket,可以用它實現(xiàn)TCP客戶端的功能,以及服務端接收到客戶端后,對客戶端的處理。
QTcpServer,對于TCP服務端的功能,可以使用QTcpServer來完成。
這里整理Qt中TCP Socket的使用方法,配合Qt的信號與槽機制,即可實現(xiàn)服務端/客戶端數(shù)據(jù)的收發(fā)處理。

1.2 QCamera相關
QCamer,獲取當前系統(tǒng)可用的攝像頭 類似獲取串口
QCamerInfo,獲取當前系統(tǒng)可用的攝像頭 類似獲取串口
QCameraViewfinder,取景框類,攝像頭的實時畫面顯示到這個里面
QCameraImageCapture,圖像錄制類,與QCamer 配合使用可進行拍照
2 Win平臺上測試
首先在Windows平臺上用Qt Creator編寫服務端和客戶端程序,并運行測試。
2.1 服務器端
先來看下服務器端的最終效果:
左側是攝像頭的顯示界面
可以切換不同的攝像頭作為視頻源(筆記本自帶的攝像頭與USB外接的攝像頭)
可以切換攝像頭的顯示分辨率
可以選擇開啟或關閉攝像頭的IP服務

2.1.1 攝像頭畫面顯示
2.1.2 創(chuàng)建Socket服務
2.1.3 讀取圖像并發(fā)送給客戶端
先定義一下圖像傳送結構體和傳送狀態(tài):
具體的實現(xiàn)過程:
需要注意的是,圖像是需要分包傳送的,最后一包一般都不是設定的最大長度,需要計算一下最后一包的數(shù)據(jù)長度。
2.2 客戶端
先來看下客戶端的最終效果:
右側是攝像頭畫面的顯示框
可以修改要連接的服務端的IP地址
可以選擇開啟或關閉網絡攝像頭

2.2.1 創(chuàng)建Socket連接
2.3.2 接收服務端的圖像
2.3.3 將圖像顯示出來
3 嵌入式Linux平臺上測試
3.1 交叉編譯
將客戶端程序的源代碼拷貝到Ubunu中進行交叉編譯,具體編譯過程可參考之前的文章:
本篇的實驗環(huán)境,繼續(xù)使用的是燒錄了野火i.MX6ULL自帶的系統(tǒng)固件Linux板子,需要通過SSH的方式將編譯的程序再發(fā)送到板子中,SSH傳輸文件的操作可參考上篇文章:
3.2 實驗演示

4 總結
本篇介紹了如何用Qt實現(xiàn)一個網絡攝像頭功能,通過服務端將USB攝像頭轉換為一個IP攝像頭,Linux板子中的客戶端來連接服務器,將攝像頭的實時畫面顯示出來。