<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于ARM Linux的3G無線車載視頻監(jiān)控系統(tǒng)

          基于ARM Linux的3G無線車載視頻監(jiān)控系統(tǒng)

          作者: 時間:2013-03-05 來源:網(wǎng)絡(luò) 收藏

          主要過程如下:
          (1)打開視頻設(shè)備。調(diào)用函數(shù)int open(constchar * pathname,int flags),若返回值為-1,表示打開失敗,否則,表示所打開設(shè)備的文件描述符。
          (2)讀取設(shè)備信息。Ioctl(cam_fp,VIDIOC_QUERYCAP,cap)函數(shù)來取得設(shè)備文件的屬性參數(shù)并存儲存于cap結(jié)構(gòu)中,其中cam_fp指的是打開的視頻設(shè)備文件描述符。
          (3)選擇視頻的輸入方式。通過ioetl(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,用來指定視頻的寬度、高度、像素大小等。
          (5)讀取視頻數(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)閉。根據(jù)流程圖可對其進行相應(yīng)操作。當(dāng)攝像頭通過USB接口連接后,程序中調(diào)用V4L API對設(shè)備文件的讀操作read(),即可完成視頻數(shù)據(jù)采集到內(nèi)存中,視頻數(shù)據(jù)可用圖4形式保存,也可壓縮后封裝進數(shù)據(jù)包。本文是先將采集數(shù)據(jù)進行壓縮后再封裝進數(shù)據(jù)包,并傳輸?shù)奖O(jiān)控PC進行處理。
          3.2.3 視頻壓縮模塊設(shè)計
          因視頻采集模塊采集的視頻數(shù)據(jù)信息量非常大,為了提高數(shù)據(jù)傳輸速度、降低網(wǎng)絡(luò)數(shù)據(jù)流量、保證監(jiān)控的實時性,有必要對車載攝像頭采集的數(shù)據(jù)壓縮編碼。文中采用硬編碼方式(硬編碼具有不占用CPU資源,運算速度快等優(yōu)點,從而滿足視頻數(shù)據(jù)實時性的要求)將攝像頭采集的圖像系列壓縮編碼成流媒體。具體編碼的過程如圖5所示。

          本文引用地址:http://www.ex-cimer.com/article/148087.htm

          e.JPG


          (1)創(chuàng)建編碼結(jié)構(gòu)。調(diào)用SsbSipH264Encodehlit(width,height,frame_rate,bitrate,gop_num)函數(shù)實現(xiàn),其中width表示圖像的寬度,height表示圖像的高度,frame_rate表示幀頻,bitrate表示比特率或碼率,gop_num表示兩個相離關(guān)鍵幀之間最多包含多少個幀(B或P幀)。
          (2)初始化H.264編碼結(jié)構(gòu),調(diào)用SsbSipH264Encode Exe(handle)函數(shù)。
          (3) 獲取視頻輸入地址,調(diào)用SsbSipH264EncodeGetInBuf(handle,0)函數(shù)來實現(xiàn),該函數(shù)返回視頻輸入的首地址,存放在p_inbuf中。
          (4)輸入視頻數(shù)據(jù),調(diào)用memcpy(p_inbuf,yuv_bur,frame_size)函數(shù)實現(xiàn),p_inbuf存放需要編碼的數(shù)據(jù),yuv_buf存放原始視頻數(shù)據(jù),frame_size表示數(shù)據(jù)的大小。
          (5)編碼視頻數(shù)據(jù),對p_inbuf內(nèi)容進行H.264編碼,調(diào)用SsbSipH264EncodeExe(handle)函數(shù)實現(xiàn)。
          (6) 輸出已編碼的數(shù)據(jù),調(diào)用 SsbSipH264EncodeGetOutBuf(handle,size),該函數(shù)返回已編碼圖像的首地址,size表示已編碼圖像的大小。
          (7)關(guān)閉硬編碼設(shè)備,調(diào)用SsbsipH264Encode DeInit(handle)函數(shù)實現(xiàn)的。
          3.2.4 嵌入式服務(wù)器boa移植
          Linux支持boa、HTTPD、THTTPD等幾種Web服務(wù)器,其中boa Web服務(wù)器更適合于嵌入式系統(tǒng),因為它是一個單任務(wù)、支持CGI(Common Gateway Interface,通用網(wǎng)關(guān)接口)功能的Web服務(wù)器,只能依次完成用戶的請求,而不會fork出新的進程來處理并發(fā)出連接請求,可執(zhí)行代碼只有約60K。
          首先進入boa源碼目錄的src子目錄,執(zhí)行命令./con-figure生成Maketile文件,然后修改Makefile文件找到CC=gcc,將其改成CC=arm-linux-gcc,再將CPP=gcc-E改成CPP=arm-linux-gcc-E,并保存退出。然后運行make進行編譯,得到的可執(zhí)行程序為boa,之后執(zhí)行命令arm-linux-strip boa,將調(diào)試信息去掉,得到的最終程序。第二步完成boa的配置,使其能夠支持CGI程序的執(zhí)行。Boa需要在/etc目錄下建立一個boa目錄,里面放入boa的主要配置文件boa.conf,主要文件的含義有:AccessLog/var/log/boa/access_log訪問日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始;VerboseCGILogs是否記錄CGI運行信息,如果沒有注釋掉,則記錄,注釋掉則不記錄;Document Root/var/wwwHTML文檔的主目錄,如果沒有以/開始,則表示從服務(wù)器的根路徑開始;DirectoryMaker/usr/lib/boa/boa_indexer當(dāng)HTML目錄沒有索引文件時,用戶只指明訪問目錄時,boa會調(diào)用該程序生索引文件給用戶,因為該過程比較慢最好不執(zhí)行,可以注釋掉;Scri ptAlia/cgi-bin//var/www/cgi-bin/指明CGI腳本的虛擬路徑對應(yīng)的實際路徑。一般所有的CGI腳本都要放在實際路徑里,用戶訪問執(zhí)行時輸入站點+虛擬路徑+CGI腳本名。對boa.conf進行修改的必須要保證是使其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,不然boa就不能正常工作。另外還需要創(chuàng)建日志文件所在目錄/var/log/boa,創(chuàng)建HTML文檔的主目錄/var/www,將mime.types文件拷貝到/etc目錄,創(chuàng)建CGI肢本所在目錄/var/www/cgi-bin/。
          3.2.5 CGI程序的設(shè)計
          CGI提供了一個Web服務(wù)器的外部程序通道,運行在服務(wù)器上,由瀏覽器輸入觸發(fā),是Web服務(wù)器和系統(tǒng)中其他程序的連接通道。CGI程序就是符合這種接口的程序。服務(wù)器接收到用戶的請求,并將數(shù)據(jù)送給CGI程序。CGI程序接收到數(shù)據(jù)后,啟動編寫好的應(yīng)用程序,并按照用戶提供的數(shù)據(jù)執(zhí)行。應(yīng)用程序執(zhí)行完成后,返回執(zhí)行結(jié)果,并通過Web服務(wù)器傳送給用戶瀏覽器顯不。
          CGI模塊程序的設(shè)計主要包括如下幾部分:Web服務(wù)器的配置、HTML頁面的編寫、CGI腳本實現(xiàn)。
          (1)Web服務(wù)器的配置
          嵌入式Web服務(wù)器采用boa,其配置是以文本的形式提供,放在文件系統(tǒng)中的/etc/httpd/conf/目錄下面,其主要配置在以上的boa服務(wù)器移植中講述過了。
          (2)HTML頁面的編寫
          因為系統(tǒng)的設(shè)計的主要方向是能夠通過USB攝像頭進行實時監(jiān)控。所以為了實現(xiàn)簡單化,拋開一些不必要復(fù)雜的選擇項。主要的HTML頁面有登錄界面、注冊界面和監(jiān)控界面。這些HTML放在嵌入式文件系統(tǒng)的/var/www目錄下。
          (3)CGI腳本實現(xiàn)
          實現(xiàn)動態(tài)Web頁面的第二步是用C編寫CGI程序,CGI程序分為以下幾部分:根據(jù)POST方法或GET方法從提交的表單中接收數(shù)據(jù);URL編碼的解碼;用printf()函數(shù)來產(chǎn)生HTML源代碼,并將經(jīng)過解碼后的數(shù)據(jù)正確地返回給瀏覽器。
          3.2.6 遠(yuǎn)程視頻數(shù)據(jù)接收模塊設(shè)計
          目前流行的瀏覽器有IE、FireFox、Chrome等,對于普通的文本及HTML文件支持的GIF、JPEG等格式的圖片都可以輕松的顯示,但對于實時視頻數(shù)據(jù),這些普通瀏覽器無法正常的顯示。所以實時視頻數(shù)據(jù)接收模塊主要完成的工作是視頻數(shù)據(jù)的接收、報文的解封裝、發(fā)送RTcP反饋信息、H.264視頻解碼和Web瀏覽器的顯示。
          本系統(tǒng)采用ActiveX控件技術(shù),嵌入在Web頁面中,來完成視頻數(shù)據(jù)的接收、協(xié)議、解碼和最后的顯示工作。最重要的一點,系統(tǒng)采用雙緩沖技術(shù),來滿足視頻的解碼速度的問題,實現(xiàn)實時播放。具體流程圖如圖6所示。

          f.JPG



          4 系統(tǒng)的測試與結(jié)論
          本文設(shè)計了一種基于ARM S3C2440的嵌入式系統(tǒng),首先通過USB采集中星微攝像頭作為服務(wù)器,實現(xiàn)利用V4L2技術(shù)對USB攝像頭進行數(shù)據(jù)采集,并將數(shù)據(jù)送入H.264編碼模塊進行數(shù)據(jù)的壓縮,壓縮后的數(shù)據(jù)經(jīng)過視頻服務(wù)器封裝打包,最后通過嵌入式Web服務(wù)器與遠(yuǎn)程客戶端進行交互。本系統(tǒng)在實際的運營網(wǎng)絡(luò)中進行了測試,目標(biāo)定位信息接收速率為1次/s,動態(tài)定位精度小于等于10 m;能實現(xiàn)動態(tài)視頻傳輸,且視頻傳輸流暢,圖像最大分辨率可達(dá)VGA(640×480像素),視頻傳輸?shù)馁|(zhì)量優(yōu)于基于2.5G網(wǎng)絡(luò)的車輛監(jiān)控系統(tǒng)(圖像最大的分辨率為320×240像素,且基本上只能傳輸靜態(tài)圖像)。

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


          攝像頭相關(guān)文章:攝像頭原理

          上一頁 1 2 3 下一頁

          關(guān)鍵詞: GPS 3G 視頻監(jiān)控 H.264 RTP

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();