音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

基于ARM11的無線視頻監(jiān)控系統(tǒng)

出處:anhzhi 發(fā)布于:2012-08-07 10:42:22

  摘 要:設(shè)計了一種基于ARM11+Linux 系統(tǒng)組成的無線視頻監(jiān)控系統(tǒng)。為提高運算速度,系統(tǒng)采用ARM11 微處理器S3C6410 作為主處理器,采用OV9650 攝像頭作為圖像采集設(shè)備,用硬編碼方式對圖像數(shù)據(jù)進(jìn)行H264編碼。接著通過WI-FI 無線網(wǎng)絡(luò)和RTP 流媒體傳輸協(xié)議把已編碼的數(shù)據(jù)傳送到遠(yuǎn)端的服務(wù)器上顯示。實現(xiàn)了運行穩(wěn)定、速度快、成本低、體積小的無線視頻監(jiān)控平臺,具有很大的實用價值。

  1 引言

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

  2 系統(tǒng)整體設(shè)計

  2.1 硬件總體設(shè)計

  本系統(tǒng)采用韓國三星公司ARM11 內(nèi)核的S3C6410 作為微處理器,該款處理器體積小,尺寸僅相當(dāng)于一個48mm*67mm 方塊的大小,同時集成了豐富的接口,32 位數(shù)據(jù)總線和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 接口,其主頻可達(dá)800MHz,擴展總線頻率133MHz.在此基本上,還進(jìn)行了相關(guān)的擴展,引出了一個四線RS-232 串口,該串口用于開發(fā)主機與S3C6410 開發(fā)平臺進(jìn)行通信;配置了1GB 的NANDFLASH,用于存放嵌入式linux操作系統(tǒng),應(yīng)用程序和數(shù)據(jù),128MB 的DDR 內(nèi)存,用于存放運行程序,攝像頭捕獲的數(shù)據(jù);擴展了一個WIFI 模塊,用于開發(fā)平臺與服務(wù)器傳輸視頻數(shù)據(jù),通過無線網(wǎng)絡(luò)實現(xiàn)視頻遠(yuǎn)程監(jiān)控。

  2.2 軟件總體設(shè)計

  軟件總體結(jié)構(gòu)包括引導(dǎo)加載程序Bootloader、操作系統(tǒng)內(nèi)核,設(shè)備驅(qū)動程序和應(yīng)用層程序,其軟件結(jié)構(gòu)如圖1 所示。

圖1 軟件總體結(jié)構(gòu)框圖

圖1 軟件總體結(jié)構(gòu)框圖

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

  3 視頻數(shù)據(jù)采集和編碼設(shè)計

  3.1 基于V4L2 視頻數(shù)據(jù)采集設(shè)計

  在Linux 系統(tǒng)下,對視頻設(shè)備的各種操作是通過Video4Linux2 實現(xiàn)的,簡稱V4L2.應(yīng)用程序通過V4L2 提供的接口函數(shù)實現(xiàn)視頻設(shè)備的操作。整個視頻數(shù)據(jù)采集的過程如圖2 所示。

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

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

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

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

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

  (6)關(guān)閉視頻設(shè)備。通過close(cam_fp)函數(shù)來實現(xiàn)視頻設(shè)備的關(guān)閉。

圖2 視頻數(shù)據(jù)采集流程框圖。

圖2 視頻數(shù)據(jù)采集流程框圖。

  3.2 視頻數(shù)據(jù)的H264 編碼

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

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

 ?。?)創(chuàng)建H264 編碼結(jié)構(gòu)。調(diào)用SsbSipH264EncodeInit (width, height, frame_rate, bitrate, gop_num)函數(shù)實現(xiàn)的,其中width 表示圖像的寬度,height 表示圖像的高度,frame_rate 表示幀頻,bitrate 表示比特率或碼率,gop_num 表示兩個相離關(guān)鍵幀之間多包含多少個幀(B 或P 幀)。

  (2)初始化H264 編碼結(jié)構(gòu),調(diào)用SsbSipH264Encode Exe (handle)函數(shù)。

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

 ?。?)輸入視頻數(shù)據(jù),調(diào)用memcpy(p_inbuf, yuv_buf, frame_size)函數(shù)實現(xiàn),p_inbuf 存放需要編碼的數(shù)據(jù),yuv_buf 存放原始視頻數(shù)據(jù),frame_size 表示數(shù)據(jù)的大小。

 ?。?)編碼視頻數(shù)據(jù),對p_inbuf 內(nèi)容進(jìn)行H264編碼,調(diào)用SsbSipH264EncodeExe(handle)函數(shù)實現(xiàn)。

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

 ?。?)關(guān)閉硬編碼設(shè)備,調(diào)用SsbSipH264EncodeDeInit (handle)函數(shù)實現(xiàn)的。

圖3 H264 編碼流程框圖

圖3 H264 編碼流程框圖。

  4 視頻數(shù)據(jù)的傳輸和顯示

  4.1 視頻數(shù)據(jù)傳輸模塊設(shè)計

  現(xiàn)代無線通信網(wǎng)絡(luò)標(biāo)準(zhǔn)主要有3G(第三代移動通信),WI-FI,Bluetooth,Zigbee(紫蜂)等,具體詳見表1.

表1 常用無線通信網(wǎng)絡(luò)標(biāo)準(zhǔn)的基本比較

  由于WI-FI 具有傳輸率高,支持的協(xié)議多,安裝及設(shè)置簡單,成本低等優(yōu)點,所以本系統(tǒng)采用的無線網(wǎng)絡(luò)標(biāo)準(zhǔn)是WI-FI.

  4.1.1 WI-FI 無線網(wǎng)絡(luò)搭建過程

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

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

  (3)設(shè)置eth1 的ip 地址和子網(wǎng)掩碼。

 ?。?)設(shè)置ESSID.通過iwconfig eth1 essid 402命令實現(xiàn)的,ESSID 用來區(qū)分不同的網(wǎng)絡(luò)。

 ?。?)設(shè)置密碼。通過iwconfig eth1 key s:your_key命令實現(xiàn)的,其中your_key 就是登陸密碼。

  4.1.2 基于RTP 協(xié)議的視頻數(shù)據(jù)傳輸

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

  本系統(tǒng)采用開源代碼Jrtplib 提供的RTP 協(xié)議棧,由于Jrtplib 對RFC3550 的實現(xiàn)進(jìn)行了封裝,使得傳輸視頻數(shù)據(jù)更加簡單。由于本系統(tǒng)的網(wǎng)絡(luò)有效載荷為1500 字節(jié),因此設(shè)置RTP 包大小的上限為1400 字節(jié),如果發(fā)送的數(shù)據(jù)大于1400 字節(jié),則采用拆包的方法再發(fā)送,具體傳輸過程如圖4 和圖5 所示。

圖4 發(fā)送端流程框圖

圖4 發(fā)送端流程框圖。

圖5 接收端流程框圖

圖5 接收端流程框圖。

  發(fā)送端主要過程如下:

 ?。?)創(chuàng)建RTP 會話并設(shè)置目標(biāo)地址。調(diào)用Create方法得到RTP 會話實例,然后調(diào)用AddDestination 方法設(shè)置目標(biāo)IP 以及目標(biāo)端口號。

 ?。?)獲得數(shù)據(jù),調(diào)用Get_Data()函數(shù)得到。

 ?。?)發(fā)送數(shù)據(jù),通過SendPacket()方法實現(xiàn)。

  接收端主要過程如下:

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

 ?。?)接受RTP 數(shù)據(jù)。調(diào)用RTPSession 類的PollData()方法接收數(shù)據(jù)。

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

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

  4.2 視頻數(shù)據(jù)的解碼和顯示

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

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

  4.2.1 初始化解碼線程

 ?。?) 注冊全部的文件格式和編解碼器,調(diào)用av_register_all()函數(shù)完成注冊。

 ?。?) 設(shè)置AVFormatContext 結(jié)構(gòu)體。該結(jié)構(gòu)體是FFmpeg 格式轉(zhuǎn)換過程中實現(xiàn)輸入和輸出功能,保存相關(guān)數(shù)據(jù)的主要結(jié)構(gòu),通過av_open_input_file 函數(shù)設(shè)置該結(jié)構(gòu)體。

 ?。?) 檢查視頻流的信息,通過調(diào)用av_find_stream_info(pFormatCtx)函數(shù),pFormatCtx->streams 就填充了正確的視頻流信息,pFormatCtx 類型是AVFormatContext.

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

  (5) 打開解碼器,先通過avcodec_find_decoder 函數(shù)找到相應(yīng)解碼器,然后調(diào)用avcodec_open 函數(shù)打開解碼器。

 ?。?) 申請內(nèi)存用來存放解碼數(shù)據(jù), 通過調(diào)用avcodec_alloc_frame 函數(shù)實現(xiàn),由于解碼的數(shù)據(jù)是YUV420 格式的,因此還需要將該數(shù)據(jù)轉(zhuǎn)換成RGB 格式,因此,再次調(diào)用avcodec_alloc_frame 申請內(nèi)存用來存放RGB 格式數(shù)據(jù)。

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

 ?。?) 通過調(diào)用avpicture_fill 函數(shù)將幀和新申請的內(nèi)存結(jié)合起來。

 ?。?) 創(chuàng)建格式轉(zhuǎn)換上下文,通過img_convert_ctx=sws _getContext(src_w, src_h,src_pix_fmt, dst_w, dst_h,PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL,NULL)方法實現(xiàn)。其中,src_w 表示源圖像的寬度,src_h 表示源圖像的高度,src_pix_fmt 表示源圖像的格式,dst_w 表示目標(biāo)圖像的寬度,dst_h 表示目標(biāo)圖像的高度,PIX_FMT_RGB24 表示目標(biāo)圖像的格式。

  4.2.2 對數(shù)據(jù)進(jìn)行H264 解碼

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

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

 ?。?) 將已解碼的視頻數(shù)據(jù)YUV420 格式轉(zhuǎn)換成RGB 格式,通過調(diào)用sws_scale()函數(shù)實現(xiàn)格式轉(zhuǎn)換。

  4.2.3 視頻數(shù)據(jù)的顯示

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

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

 ?。?) 循環(huán)取得視頻數(shù)據(jù)的R 分量、G 分量、B 分量。

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

 ?。?) 對取得的RGB 各自分量,構(gòu)造該像素點的顏色值,通過調(diào)用qRGB(R,G,B)構(gòu)造方法實現(xiàn)。

 ?。?) 設(shè)置相應(yīng)點的像素值,首先生成QImage 類的對象,然后調(diào)用該類的setPixel(x,y,rgb)。其中,x 是圖像的x 坐標(biāo)值,y 是圖像的y 坐標(biāo)值,rgb 是該點的顏色值。

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

  5 結(jié)論

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

參考文獻(xiàn):

[1]. SROM  datasheet http://m.58mhw.cn/datasheet/SROM+_622730.html.
[2]. RS-232  datasheet http://m.58mhw.cn/datasheet/RS-232+_584855.html.

關(guān)鍵詞:基于ARM11的無線視頻監(jiān)控系統(tǒng)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!