《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于ARM11+Linux的無線視頻監控系統
基于ARM11+Linux的無線視頻監控系統
互聯網
摘要: 隨著無線網絡的普及,ARM處理器運算的能力不斷地增強以及計算機處理圖像的技術不斷地提高,基于ARM的視頻監控正越來越廣泛的應用于學校,社區,酒店,網吧,醫療等各種各樣地領域。
關鍵詞: ARM11 Linux 無線網絡
Abstract:
Key words :

1 引言

隨著無線網絡的普及,ARM處理器運算的能力不斷地增強以及計算機處理圖像的技術不斷地提高,基于ARM 的視頻監控正越來越廣泛的應用于學校,社區,酒店,網吧,醫療等各種各樣地領域。傳統的視頻監控系統布線復雜,設備龐大,智能化低,以及軟硬件資源得不到充分的發揮。而ARM 嵌入式系統的小型化、占用空間小、成本低廉、結構緊湊、支持無線網絡等特點,使得利用S3C6410 的ARM11+linux系統構成各種各樣的無線網絡數字監控系統具有廣泛的應用價值。

2 系統整體設計

2.1 硬件總體設計

本系統采用韓國三星公司ARM11 內核的S3C6410 作為微處理器,該款處理器體積小,尺寸僅相當于一個48mm*67mm 方塊的大小,同時集成了豐富的接口,32 位數據總線和32 位外部地址總線,SROM 控制器、 SRAM 控制器、NAND 閃存控制器、64 個中斷源的中斷控制器、五個三十二位定時器、四個UART、四個DMA 控制器、STN 與TFT LCD 控制器、看門狗、IIS 音頻接口、IIC-Bus 接口、兩個USB host口、一個USB device 口、兩個串行外圍接口電路、三個SD 卡接口、camera_if 接口、TV_out 接口、MFC接口、2 路SPI、Touch Screen 接口,其主頻可達800MHz,擴展總線最大頻率133MHz.在此基本上,還進行了相關的擴展,引出了一個四線RS-232 串口,該串口用于開發主機與S3C6410 開發平臺進行通信;配置了1GB 的NANDflash,用于存放嵌入式linux操作系統,應用程序和數據,128MB 的DDR 內存,用于存放運行程序,攝像頭捕獲的數據;擴展了一個WIFI 模塊,用于開發平臺與服務器傳輸視頻數據,通過無線網絡實現視頻遠程監控。

2.2 軟件總體設計

軟件總體結構包括引導加載程序Bootloader、操作系統內核,設備驅動程序和應用層程序,其軟件結構如圖1 所示。


 

圖1 軟件總體結構框圖

該系統上電后,先運行引導加載程序Bootloader,該程序的作用是初始化硬件設備、建立內存空間的映射表,引導和加載操作系統內核,然后啟動嵌入式操作系統linux,接著加載Nand flash 驅動程序、LCD 驅動程序、WIFI 驅動程序等一些必要的驅動程序。

3 視頻數據采集和編碼設計

3.1 基于V4L2 視頻數據采集設計

在Linux 系統下,對視頻設備的各種操作是通過Video4Linux2 實現的,簡稱V4L2.應用程序通過V4L2 提供的接口函數實現視頻設備的操作。整個視頻數據采集的過程如圖2 所示。

(1) 打開視頻設備, int open( const char *pathname, int flags)。調用該函數,若返回值為-1,表示打開失敗,否則,表示所打開設備的文件描述符。

(2)取得設備信息。通過ioctl(cam_fp, VIDIOC_QUERYCAP, &cap)函數來取得設備文件的屬性參數并存儲于cap 結構中,其中cam_fp 指的是打開的視頻設備的文件描述符。

(3)選擇視頻輸入方式。通過ioctl(cam_fp,VIDIOC_ S_INPUT, &chan)函數設置視頻設備的輸入方式,其中chan 的數據結構類型是v4l2_input,用來指定視頻的輸入方式。

(4 ) 設置視頻幀格式。通過ioctl(cam_fp ,VIDIOC_S _FMT, &fmt)函數設置視頻的幀格式,其中fmt 的數據結構類型是v4l2_format,用來指定視頻的寬度、高度、像素大小等。

(5)讀取視頻數據。通過read(cam_fp, g_yuv,YUV_ SIZE)函數,把攝像頭一幀的數據存放到g_yuv中,其中YUV_ SIZE 指的是每幀數據的大小。

(6)關閉視頻設備。通過close(cam_fp)函數來實現視頻設備的關閉。


 

圖2 視頻數據采集流程框圖。


3.2 視頻數據的H264編碼

為了提高視頻數據編碼速度,本系統采用的是H264 硬編碼方式,硬編碼具有不占用CPU 資源,運算速度快等優點,從而滿足視頻數據實時性的要求。

具體編碼的過程如圖3 所示。

(1)創建H264 編碼結構。調用SsbSipH264EncodeInit (width, height, frame_rate, bitrate, gop_num)函數實現的,其中width 表示圖像的寬度,height 表示圖像的高度,frame_rate 表示幀頻,bitrate 表示比特率或碼率,gop_num 表示兩個相離關鍵幀之間最多包含多少個幀(B 或P 幀)。

(2)初始化H264 編碼結構,調用SsbSipH264Encode Exe (handle)函數。

(3)獲取視頻輸入地址,SsbSipH264EncodeGetInBuf (handle, 0)函數來實現,該函數返回視頻輸入的首地址,存放在p_inbuf 中。

(4)輸入視頻數據,調用memcpy(p_inbuf, yuv_buf, frame_size)函數實現,p_inbuf 存放需要編碼的數據,yuv_buf 存放原始視頻數據,frame_size 表示數據的大小。

(5)編碼視頻數據,對p_inbuf 內容進行H264編碼,調用SsbSipH264EncodeExe(handle)函數實現。

(6)輸出已編碼的數據,SsbSipH264EncodeGetOutBuf (handle, size),該函數返回已編碼圖像的首地址,size 表示已編碼圖像的大小。

(7)關閉硬編碼設備,調用SsbSipH264EncodeDeInit (handle)函數實現的。


圖3 H264 編碼流程框圖。

4 視頻數據的傳輸和顯示

4.1 視頻數據傳輸模塊設計

現代無線通信網絡標準主要有3G(第三代移動通信),WI-FI,Bluetooth,Zigbee(紫蜂)等,具體詳見表1.

表1 常用無線通信網絡標準的基本比較


由于WI-FI 具有傳輸率高,支持的協議多,安裝及設置簡單,成本低等優點,所以本系統采用的無線網絡標準是WI-FI.

4.1.1 WI-FI 無線網絡搭建過程

(1)加載WI-FI 模塊。通過insmod 命令加載,這里需要加載2 個文件helper_sd.bin、sd8686.bin,這2 個文件可以從Marvel 官方網站下載。

(2)搜索WI-FI 網絡。先用ifconfig eth1 up 命令把WI-FI 網絡接口卡打開,然后用iwlist eth1 scanning命令搜索WIFI 網絡。

(3)設置eth1 的ip 地址和子網掩碼。

(4)設置ESSID.通過iwconfig eth1 essid 402命令實現的,ESSID 用來區分不同的網絡。

(5)設置密碼。通過iwconfig eth1 key s:your_key命令實現的,其中your_key 就是登陸密碼。

 

4.1.2 基于RTP 協議的視頻數據傳輸

RTP 是實時傳送協議( Real-time TransportProtocol)的縮寫,代表一個網絡傳輸的協議,為音頻、視頻上傳中的常用協議[5].RTCP 和RTP 一起提供流量控制和擁塞控制服務,它們能以有效反饋和最小開銷使傳輸效率最佳化,因而特別適合傳送實時的數據,所以采用該協議傳輸視頻數據。

本系統采用開源代碼Jrtplib 提供的RTP 協議棧,由于Jrtplib 對RFC3550 的實現進行了封裝,使得傳輸視頻數據更加簡單。由于本系統的網絡最大有效載荷為1500 字節,因此設置RTP 包大小的上限為1400 字節,如果發送的數據大于1400 字節,則采用拆包的方法再發送,具體傳輸過程如圖4 和圖5 所示。


 

圖4 發送端流程框圖。


 

圖5 接收端流程框圖。

發送端主要過程如下:

(1)創建RTP 會話并設置目標地址。調用Create方法得到RTP 會話實例,然后調用AddDestination 方法設置目標IP 以及目標端口號。

(2)獲得數據,調用Get_Data()函數得到。

(3)發送數據,通過SendPacket()方法實現。

接收端主要過程如下:

(1)創建RTP 會話。調用Create 方法來創建一個會話實例,并且在創建會話的同時設置端口號,要與發送端的端口號保持一致。

(2)接受RTP 數據。調用RTPSession 類的PollData()方法接收數據。

(3)保存RTP 數據報。通過創建了一個指針數組,里面存放的是RTP 數據報的指針,只要將剛接收到RTP 數據報的指針賦給這個指針數組即可,這樣可以節省數據拷貝的時間。

(4)判斷是否接收完成,如果沒有,則跳轉到第b 步,否則接收端程序退出。

4.2 視頻數據的解碼和顯示

由于接收到的數據是經H264 編碼的數據,因此,先要對該數據進行解碼,然后才能顯示。而在服務器端,對視頻數據解碼用到FFmpeg.FFmpeg 是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件。

解碼時主要涉及FFmpeg 下的libavcodec 庫、libswscale庫和libavformat 庫,其中第一個庫是一個包含了所有FFmpeg 音視頻編解碼器的庫,第二個庫是格式轉化庫,因為解碼后的數據是YUV420 格式,而要在計算機上顯示該數據,則需要的是RGB 格式的,該庫功能就是把YUV420 格式轉化成RGB 格式,第三個庫是一個包含了所有的普通音視格式的解析器和產生器的庫。

4.2.1 初始化解碼線程

(1) 注冊全部的文件格式和編解碼器,調用av_register_all()函數完成注冊。

(2) 設置AVFormatContext 結構體。該結構體是FFmpeg 格式轉換過程中實現輸入和輸出功能,保存相關數據的主要結構,通過av_open_input_file 函數設置該結構體。

(3)檢查視頻流的信息,通過調用av_find_stream_info(pFormatCtx)函數,pFormatCtx-》streams 就填充了正確的視頻流信息,pFormatCtx 類型是AVFormatContext.

(4) 得到編解碼器上下文,pCodecCtx= pFormatCtx -》 streams[videoStream]-》codec,pCodecCtx 指針指向了流中所使用的關于編解碼器的所有信息。

(5) 打開解碼器,先通過avcodec_find_decoder 函數找到相應解碼器,然后調用avcodec_open 函數打開解碼器。

(6) 申請內存用來存放解碼數據, 通過調用avcodec_alloc_frame 函數實現,由于解碼的數據是YUV420 格式的,因此還需要將該數據轉換成RGB 格式,因此,再次調用avcodec_alloc_frame 申請內存用來存放RGB 格式數據。

(7) 申請內存用來存放原始數據,因為H264 解碼時,對于P 幀需要參考前面一個關鍵幀或P 幀,而B幀需要參考前后幀,因此需要存放原始數據,首先,用avpicture_get_size 來獲得需要的大小,然后調用av_malloc 函數申請內存空間。

(8) 通過調用avpicture_fill 函數將幀和新申請的內存結合起來。

(9) 創建格式轉換上下文,通過img_convert_ctx=sws _getContext(src_w, src_h,src_pix_fmt, dst_w, dst_h,PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL,NULL)方法實現。其中,src_w 表示源圖像的寬度,src_h 表示源圖像的高度,src_pix_fmt 表示源圖像的格式,dst_w 表示目標圖像的寬度,dst_h 表示目標圖像的高度,PIX_FMT_RGB24 表示目標圖像的格式。

 

4.2.2 對數據進行H264 解碼

(1)獲得需要解碼的一幀數據,由于前面接收端線程已經把接收到的數據存放在一個指針數組中,因此,解碼線程只需要從指針數據中獲取數據即可。

(2) 解碼數據。調用解碼函數avcodec_ decode_video(pCodecCtx , pFrame , &finished , encodedData,size)來解碼視頻文件。其中,參數pCodecCtx是前面得到視頻流編碼上下文的指針;參數pFrame存儲解碼后的圖片的位置,參數finished 用來記錄已完成的幀數;參數encodedData 是輸入緩沖區指針,指向要解碼的原始數據;參數size 是輸入緩沖區的大小。

(3) 將已解碼的視頻數據YUV420 格式轉換成RGB 格式,通過調用sws_scale()函數實現格式轉換。

4.2.3 視頻數據的顯示

本系統使用QT 下的QImage 顯示視頻數據,由于QImage 能夠存取單個像素,這樣在顯示前一幀圖像的時候,將該圖像保存下來,當顯示后一幀圖像的時候,如果該像素值與前一幀相同,則不必修改該值,從而節省了大量的時間,即哪里變修改哪里,顯示過程的具體步驟如下:

(1) 取得已解碼的視頻數據,且該數據是RGB 格式的。

(2) 循環取得視頻數據的R 分量、G 分量、B 分量。

(3) 判斷該點的像素值是否與前一幀對應位置的像素值相同,若相同,跳轉到第2 步,否則,保存該像素值。

(4) 對取得的RGB 各自分量,構造該像素點的顏色值,通過調用qRGB(R,G,B)構造方法實現。

(5) 設置相應點的像素值,首先生成QImage 類的對象,然后調用該類的setPixel(x,y,rgb)。其中,x 是圖像的x 坐標值,y 是圖像的y 坐標值,rgb 是該點的顏色值。

(6)顯示圖像,通過調用update()方法,該方法會觸發繪畫事件,因此,在繪畫事件里,寫入顯示圖像代碼,即可顯示剛生成的QImage 對象,通過調用drawImage()方法繪制圖像。

5 結論

本系統在視頻圖像采集時,為了降低數據量,采用YUV420 的采樣格式。視頻數據編碼采用H264 硬編碼方式,極大地提高了編碼速度。而在無線網絡傳輸時,考慮到丟包問題,將編碼數據進行拆包然后發送,降低了丟包率。經測試,本系統采集一幅OV9650攝像頭拍攝的且分辨率為320X240 的圖像,經H264硬編碼,編碼后的圖像數據大致為5KB 左右,降低了數據傳輸量,并且硬編碼每秒可編碼25 幀圖像數據,達到實時視頻數據編碼的要求。對于WI-FI 無線網絡的傳輸率一般在11-54Mbps 左右,因此,該無線網絡可以滿足實時傳輸視頻的需求。本系統構建了高實時性,低成本,低功耗的數字化無線視頻監控平臺,在該平臺基礎上,可以搭建各種各樣的應用,比如,路況實時監控,人臉識別,倉庫報警等應用,該系統具有一定的實用價值。
 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲男人的天堂在线观看| 午夜精品久久久久久久久| 一区二区三区毛片| 亚洲区免费影片| 在线观看成人av| 狠狠色丁香婷婷综合影院| 国产欧美日韩亚洲精品| 国产精品久久一卡二卡| 欧美日韩亚洲一区二区| 欧美日韩精品欧美日韩精品一 | 亚洲天堂偷拍| av成人免费观看| 一区二区成人精品| 99国产精品国产精品久久| 亚洲人体偷拍| 亚洲精品一二区| 亚洲精选中文字幕| 一区二区三区 在线观看视| 99国产精品久久久久久久成人热| 亚洲精品国产精品国产自| 亚洲美女啪啪| 一区二区91| 亚洲免费综合| 欧美中文在线免费| 久久精品视频网| 久热精品视频在线免费观看| 免播放器亚洲| 欧美激情亚洲自拍| 欧美日韩精品一区二区在线播放| 欧美日韩一区二区高清| 欧美午夜精品一区二区三区| 欧美性猛交xxxx免费看久久久| 国产精品福利在线观看网址| 国产精品美女久久久久久久| 国产深夜精品| 在线观看亚洲a| 亚洲裸体在线观看| 亚洲一级片在线观看| 欧美自拍偷拍午夜视频| 亚洲国产精品久久久久| 亚洲开发第一视频在线播放| 国产精品99久久久久久人| 午夜精品久久久久久久久久久久| 久久成人综合视频| 欧美freesex交免费视频| 欧美日韩国产综合久久| 国产精品久久久一区二区| 国内精品久久久久久 | 亚洲精品免费在线| 在线中文字幕日韩| 欧美一区在线直播| 亚洲欧美国产精品专区久久| 亚洲免费大片| 亚洲欧美日韩精品一区二区| 亚洲高清三级视频| 在线亚洲一区二区| 久久精品视频亚洲| 欧美精品一区在线| 国产精品久久久久久久久动漫| 狠狠色丁香婷婷综合久久片| 亚洲美女啪啪| 久久黄色网页| 亚洲欧美日韩精品久久亚洲区| 麻豆国产va免费精品高清在线| 欧美日韩国内| 国模一区二区三区| 一本久久知道综合久久| 欧美一区永久视频免费观看| 正在播放亚洲一区| 麻豆freexxxx性91精品| 欧美性片在线观看| 亚洲国产精品一区二区久| 亚洲欧美日韩精品| 一区二区成人精品 | 日韩亚洲欧美高清| 欧美一区二区三区免费观看| 欧美国产视频在线| 国产在线不卡视频| 亚洲视频免费看| 亚洲精品国精品久久99热| 欧美在线免费视屏| 国产精品hd| 亚洲欧洲在线观看| 久久精品一本| 欧美在线首页| 国产精品ⅴa在线观看h| 亚洲国产精品久久久久婷婷老年| 午夜精品区一区二区三| 一区二区三区日韩欧美精品| 免费观看亚洲视频大全| 国产日本欧美一区二区| 日韩亚洲国产精品| 亚洲另类在线视频| 久久在线免费| 国产麻豆9l精品三级站| 一区二区三区产品免费精品久久75| 亚洲激情电影中文字幕| 久久久久久久久久久一区 | 欧美亚洲在线| 亚洲综合视频1区| 欧美日韩精品免费观看| 亚洲国产精品欧美一二99| 欧美在线一区二区| 欧美在线视频播放| 国产伦精品一区二区三区免费 | 欧美中文在线免费| 国产精品欧美经典| 中国女人久久久| 亚洲天堂男人| 欧美日韩在线免费观看| 亚洲日本乱码在线观看| 亚洲精品社区| 欧美激情va永久在线播放| 亚洲激情在线激情| 亚洲伦理精品| 麻豆成人精品| 国产欧美日韩精品一区| 亚洲一区二区精品在线| 亚洲砖区区免费| 欧美三级免费| 中文国产成人精品| 亚洲专区国产精品| 国产精品三级视频| 亚洲主播在线观看| 欧美在线你懂的| 国产亚洲人成a一在线v站| 欧美亚洲一区二区三区| 久久久久国产精品www| 国产一区二区三区自拍| 亚洲成人资源网| 蜜桃av噜噜一区| 亚洲黄色在线观看| 一区二区三区免费网站| 欧美日韩亚洲一区二区| 在线综合亚洲欧美在线视频| 亚洲综合首页| 国产视频一区在线| 久久精品欧美日韩| 欧美成人黑人xx视频免费观看| 亚洲国产精品一区在线观看不卡 | 欧美日韩不卡在线| 一区二区三区福利| 欧美综合激情网| 红桃av永久久久| 亚洲精品影院| 欧美午夜在线| 香蕉av福利精品导航| 久久香蕉国产线看观看网| 有码中文亚洲精品| 一区二区三区黄色| 国产精品天美传媒入口| 欧美一区二区三区四区在线观看地址| 久久久久国产成人精品亚洲午夜| 在线观看一区| 中文精品一区二区三区| 国产精品久久久久影院色老大 | 亚洲电影免费| 欧美日韩国产一区精品一区 | 欧美日韩精品久久久| 亚洲在线观看免费| 久久亚洲精品伦理| 亚洲美女中文字幕| 欧美一区午夜精品| 亚洲国产精品成人精品| 亚洲在线一区二区| 伊伊综合在线| 亚洲欧美国产高清| 在线看日韩欧美| 亚洲欧美日韩国产成人| 国内精品视频666| 亚洲视频1区| 国产一区二区中文| 一卡二卡3卡四卡高清精品视频| 国产农村妇女毛片精品久久麻豆 | 欧美激情综合色综合啪啪| 亚洲一区免费视频| 欧美91大片| 亚洲一区国产| 欧美久久久久久蜜桃| 午夜在线精品偷拍| 欧美精品九九99久久| 性久久久久久久久| 欧美精品久久久久久久久老牛影院| 亚洲欧美成人网| 欧美女主播在线| 欧美一区高清| 日韩香蕉视频| 一区二区三区国产盗摄| 韩曰欧美视频免费观看| 亚洲一区二区三区在线观看视频 | 亚洲国产欧美日韩精品| 国产精品av一区二区| 亚洲国产日韩欧美综合久久| 国产精品麻豆va在线播放| 亚洲日本视频| 国产在线视频欧美一区二区三区| 亚洲视频一区二区在线观看| 一区二区在线观看av| 欧美一级视频精品观看| 亚洲美女在线国产|