基于A(yíng)RM11+Linux的無(wú)線(xiàn)視頻監控系統
1 引言
本文引用地址:http://dyxdggzs.com/article/273140.htm隨著(zhù)無(wú)線(xiàn)網(wǎng)絡(luò )的普及,ARM處理器運算的能力不斷地增強以及計算機處理圖像的技術(shù)不斷地提高,基于A(yíng)RM 的視頻監控正越來(lái)越廣泛的應用于學(xué)校,社區,酒店,網(wǎng)吧,醫療等各種各樣地領(lǐng)域。傳統的視頻監控系統布線(xiàn)復雜,設備龐大,智能化低,以及軟硬件資源得不到充分的發(fā)揮。而ARM 嵌入式系統的小型化、占用空間小、成本低廉、結構緊湊、支持無(wú)線(xiàn)網(wǎng)絡(luò )等特點(diǎn),使得利用S3C6410 的ARM11+linux系統構成各種各樣的無(wú)線(xiàn)網(wǎng)絡(luò )數字監控系統具有廣泛的應用價(jià)值。
2 系統整體設計
2.1 硬件總體設計
本系統采用韓國三星公司ARM11 內核的S3C6410 作為微處理器,該款處理器體積小,尺寸僅相當于一個(gè)48mm*67mm 方塊的大小,同時(shí)集成了豐富的接口,32 位數據總線(xiàn)和32 位外部地址總線(xiàn),SROM 控制器、 SRAM 控制器、NAND 閃存控制器、64 個(gè)中斷源的中斷控制器、五個(gè)三十二位定時(shí)器、四個(gè)UART、四個(gè)DMA 控制器、STN 與TFT LCD 控制器、看門(mén)狗、IIS 音頻接口、IIC-Bus 接口、兩個(gè)USB host口、一個(gè)USB device 口、兩個(gè)串行外圍接口電路、三個(gè)SD 卡接口、camera_if 接口、TV_out 接口、MFC接口、2 路SPI、Touch Screen 接口,其主頻可達800MHz,擴展總線(xiàn)最大頻率133MHz.在此基本上,還進(jìn)行了相關(guān)的擴展,引出了一個(gè)四線(xiàn)RS-232 串口,該串口用于開(kāi)發(fā)主機與S3C6410 開(kāi)發(fā)平臺進(jìn)行通信;配置了1GB 的NANDflash,用于存放嵌入式linux操作系統,應用程序和數據,128MB 的DDR 內存,用于存放運行程序,攝像頭捕獲的數據;擴展了一個(gè)WIFI 模塊,用于開(kāi)發(fā)平臺與服務(wù)器傳輸視頻數據,通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò )實(shí)現視頻遠程監控。
2.2 軟件總體設計
軟件總體結構包括引導加載程序Bootloader、操作系統內核,設備驅動(dòng)程序和應用層程序,其軟件結構如圖1 所示。

圖1 軟件總體結構框圖
該系統上電后,先運行引導加載程序Bootloader,該程序的作用是初始化硬件設備、建立內存空間的映射表,引導和加載操作系統內核,然后啟動(dòng)嵌入式操作系統linux,接著(zhù)加載Nand flash 驅動(dòng)程序、LCD 驅動(dòng)程序、WIFI 驅動(dòng)程序等一些必要的驅動(dòng)程序。
3 視頻數據采集和編碼設計
3.1 基于V4L2 視頻數據采集設計
在Linux 系統下,對視頻設備的各種操作是通過(guò)Video4Linux2 實(shí)現的,簡(jiǎn)稱(chēng)V4L2.應用程序通過(guò)V4L2 提供的接口函數實(shí)現視頻設備的操作。整個(gè)視頻數據采集的過(guò)程如圖2 所示。
(1) 打開(kāi)視頻設備, int open( const char *pathname, int flags)。調用該函數,若返回值為-1,表示打開(kāi)失敗,否則,表示所打開(kāi)設備的文件描述符。
(2)取得設備信息。通過(guò)ioctl(cam_fp, VIDIOC_QUERYCAP, &cap)函數來(lái)取得設備文件的屬性參數并存儲于cap 結構中,其中cam_fp 指的是打開(kāi)的視頻設備的文件描述符。
(3)選擇視頻輸入方式。通過(guò)ioctl(cam_fp,VIDIOC_ S_INPUT, &chan)函數設置視頻設備的輸入方式,其中chan 的數據結構類(lèi)型是v4l2_input,用來(lái)指定視頻的輸入方式。
(4 ) 設置視頻幀格式。通過(guò)ioctl(cam_fp ,VIDIOC_S _FMT, &fmt)函數設置視頻的幀格式,其中fmt 的數據結構類(lèi)型是v4l2_format,用來(lái)指定視頻的寬度、高度、像素大小等。
(5)讀取視頻數據。通過(guò)read(cam_fp, g_yuv,YUV_ SIZE)函數,把攝像頭一幀的數據存放到g_yuv中,其中YUV_ SIZE 指的是每幀數據的大小。
(6)關(guān)閉視頻設備。通過(guò)close(cam_fp)函數來(lái)實(shí)現視頻設備的關(guān)閉。

圖2 視頻數據采集流程框圖。
3.2 視頻數據的H264編碼
為了提高視頻數據編碼速度,本系統采用的是H264 硬編碼方式,硬編碼具有不占用CPU 資源,運算速度快等優(yōu)點(diǎn),從而滿(mǎn)足視頻數據實(shí)時(shí)性的要求。
具體編碼的過(guò)程如圖3 所示。
(1)創(chuàng )建H264 編碼結構。調用SsbSipH264EncodeInit (width, height, frame_rate, bitrate, gop_num)函數實(shí)現的,其中width 表示圖像的寬度,height 表示圖像的高度,frame_rate 表示幀頻,bitrate 表示比特率或碼率,gop_num 表示兩個(gè)相離關(guān)鍵幀之間最多包含多少個(gè)幀(B 或P 幀)。
(2)初始化H264 編碼結構,調用SsbSipH264Encode Exe (handle)函數。
(3)獲取視頻輸入地址,SsbSipH264EncodeGetInBuf (handle, 0)函數來(lái)實(shí)現,該函數返回視頻輸入的首地址,存放在p_inbuf 中。
(4)輸入視頻數據,調用memcpy(p_inbuf, yuv_buf, frame_size)函數實(shí)現,p_inbuf 存放需要編碼的數據,yuv_buf 存放原始視頻數據,frame_size 表示數據的大小。
(5)編碼視頻數據,對p_inbuf 內容進(jìn)行H264編碼,調用SsbSipH264EncodeExe(handle)函數實(shí)現。
(6)輸出已編碼的數據,SsbSipH264EncodeGetOutBuf (handle, size),該函數返回已編碼圖像的首地址,size 表示已編碼圖像的大小。
(7)關(guān)閉硬編碼設備,調用SsbSipH264EncodeDeInit (handle)函數實(shí)現的。

圖3 H264 編碼流程框圖。
4 視頻數據的傳輸和顯示
4.1 視頻數據傳輸模塊設計
現代無(wú)線(xiàn)通信網(wǎng)絡(luò )標準主要有3G(第三代移動(dòng)通信),WI-FI,Bluetooth,Zigbee(紫蜂)等,具體詳見(jiàn)表1.
表1 常用無(wú)線(xiàn)通信網(wǎng)絡(luò )標準的基本比較

linux相關(guān)文章:linux教程
評論