首頁(yè)>>>技術(shù)>>>視像通信  視像通信產(chǎn)品

基于嵌入式Linux的視頻圖像采集與傳輸分析

2010/03/10

  摘要:視頻圖像采集及處理技術(shù)在遠程視頻監控和可視電話(huà)中有著(zhù)廣泛的應用前景,驅動(dòng)視頻采集設備和獲取視頻數據并進(jìn)行相應的處理,是實(shí)現這些應用的基礎。針對這些應用,構建了一個(gè)基于嵌入式 Linux和 PXA270微處理器的視頻采集與傳輸系統,利用 Video4Linux實(shí)現 USB攝像頭視頻數據采集,采集的視頻數據經(jīng) JPEG壓縮后,在 PXA270為核心的系統控制下通過(guò)以太網(wǎng)進(jìn)行傳輸,并通過(guò)重新編譯移植 Webcam_server應用程序實(shí)現了實(shí)時(shí)視頻采集。實(shí)驗結果表明,該系統動(dòng)態(tài)刷新良好,具有一定的實(shí)用性。

1.引言

  視頻圖像可以對客觀(guān)事物進(jìn)行形象、生動(dòng)的描述,它是一種直觀(guān)而具體的信息表達形式,也是一種重要的信息載體。而隨著(zhù)嵌入式系統的不斷發(fā)展,它所涉及的領(lǐng)域包括工業(yè)控制、網(wǎng)絡(luò )通信、軍事國防、航空航天等,我們所熟悉的電子產(chǎn)品幾乎都可以找到嵌入式系統的影子。利用嵌入式微處理器構建的視頻圖像采集系統 [1]具有體積小、成本低、穩定性高等優(yōu)點(diǎn),在智能交通、計算機視覺(jué)、通信等領(lǐng)域得到了廣泛應用。

2.系統平臺上的硬件系統與軟件系統

  本系統的硬件平臺采用 INTEL公司的 PXA270[2] [3]微處理器。該處理器是 INTEL公司于 2004年 4月發(fā)布的面向移動(dòng)電話(huà)和掌上電腦需求,基于 Xscal架構的 PXA27x系列處理器,最高主頻可達 *MHz。PXA270最引人注目的是加入了無(wú)線(xiàn)多媒體擴展技術(shù)( Wireless MMX),大大提升了多媒體處理能力;同時(shí) PXA270還加入了 INTEL SpeedStep動(dòng)態(tài)電源管理技術(shù),實(shí)現嵌入式設備的智能電源管理。此外, PXA270具有豐富的擴展接口: SD/SDIO/MMC、 CF/PCMCIA、CMOS/CCD CAMERA、USB2.0、KEYBOARD等。

  平臺的軟件系統采用內核為 Linux-2.6.18的嵌入式 Linux操作系統。嵌入式 Linux操作系統具有相當多的優(yōu)點(diǎn),它的內核穩定、功能強大、支持多種硬件平臺、源代碼完全開(kāi)放,可裁減和低成本的特性非常適合于嵌入式應用,并且 Linux本身直接提供完整的 TCP/IP協(xié)議,可非常方便地進(jìn)行網(wǎng)絡(luò )應用。

3.基于 Video4Linux的視頻圖像采集

  在 Linux下,設備驅動(dòng)程序可以看成 Linux內核與外部設備之間的接口。設備驅動(dòng)程序向應用程序屏蔽了硬件具體實(shí)現細節,使得應用程序可以像操作普通文件一樣來(lái)操作外部設備。在 Linux下,視頻采集設備的正常使用依賴(lài)于 Video4Linux標準的支持。

  Video4Linux(簡(jiǎn)稱(chēng) V4L)是 Linux中關(guān)于視頻設備的內核驅動(dòng),它為針對視頻設備的應用程序編程提供了一系列接口函數,這些視頻設備包括 TV卡、視頻捕捉卡和 USB攝像頭等。視頻采集的一般流程為:


  視頻采集主要有兩種方法:

  (1)直接從設備讀取;

  (2)內存映射。本系統采用第二種方法進(jìn)行視頻采集,其優(yōu)點(diǎn)是當采用內存映射時(shí),直接用 mmap()系統調用使得進(jìn)程之間通過(guò)映射同一個(gè)普通文件實(shí)現共享內存。

  普通文件被映射到進(jìn)程地址空間后,進(jìn)程可以像訪(fǎng)問(wèn)普通內存一樣對文件進(jìn)行訪(fǎng)問(wèn),不必再調用 read(),write()等操作。而且采用共享內存通信的一個(gè)顯而易見(jiàn)的好處是效率高,因為進(jìn)程可以直接讀寫(xiě)內存,而不需要任何數據的拷貝。

  采用內存映射實(shí)現視頻采集的部分源代碼如下:

  (1)調用 VIDIOCGBUF獲取映射的 buffer信息 ioctl(vd->fd, VIDIOCGBUF,&(vd->mbuf))

  (2)將 mmap與 video_mbuf綁定 int v4l_mmap_init(v4l_device *vd) { if(v4l_get_mbuf(vd)<0) return -1; if((vd->map=mmap(0,vd->mbuf.size,PORT_READ|PORT_WRITE,

MAP_SHARED,vd->fd))<0) return -1; return 0;}

  (3)進(jìn)行圖像采集前的設置 int v4l_grab_init(v4l_device *vd)

{ vd->mmap.width=640; //設置圖像窗口 vd->mmap.height=480; //窗口大小為 640×480 vd->mmap.format=VEDIO_PALETTE_YUV420P; //采樣格式為 YUV420P …}

  (4)調用 VIDIOCMCAPTURE開(kāi)始一幀的截取 ioctl(vd->fd, VIDIOCMCAPTURE,&(vd->mmap));

  (5)調用 VIDIOSYNC等待一幀截取結束

if(ioctl(vd->fd, VIDIOSYNC,&frame)<0) {perror(v4l_sync);return -1;}

  該函數成功返回則表示一幀采集已完成,采集到的圖像數據放到起始地址為 vd->map+vd->mbuf.offsets[vd->frame]的內存區中,讀取該內存區中的數據便可得到圖像數據。接著(zhù)可以做下一次的 VIDIOCMCAPTURE。

  使用 V4L進(jìn)行圖像采集時(shí),可采用 “不間斷采集”的方法加快采集過(guò)程。驅動(dòng)程序要提供至少兩幀圖像大小的緩沖空間,在一幀緩沖完成之后,不管此時(shí)應用程序有無(wú)提出新的 VIDIOCMCAPTURE請求,驅動(dòng)都將第二幀圖像覆蓋保存至另一個(gè)緩沖內,兩個(gè)緩沖輪流使用,不丟任何幀。

4.視頻圖像壓縮與傳輸

  通過(guò)以上采集程序獲得的圖像數據為原始數據,可以根據圖像采集格式將圖像信息存儲成文件,通過(guò)網(wǎng)絡(luò )用 webserver傳輸到服務(wù)器端刷新顯示。如果不對圖像進(jìn)行壓縮,則圖像數據較大,不便于在網(wǎng)絡(luò )上傳輸,這就要求系統首先對原始視頻圖像數據進(jìn)行壓縮處理,而通用網(wǎng)絡(luò )瀏覽器一般支持 BMP、JPG、GIF三種網(wǎng)絡(luò )圖片格式,因此本系統采用 JPEG壓縮方式。

  JPEG是 Joint Photographic Experts Group(聯(lián)合圖像專(zhuān)家組)的縮寫(xiě),文件后綴名為“.jpg”或“.jpeg”,是最常用的圖像文件格式,是由一個(gè)軟件開(kāi)發(fā)聯(lián)合會(huì )組織制定,是一種有損壓縮方式,能夠將圖像壓縮到很小的儲存空間。JPEG格式是目前網(wǎng)絡(luò )上最流行的圖像格式,JPEG壓縮技術(shù)十分先進(jìn),它用有損壓縮方式去除冗余的圖像數據,在獲得較高的壓縮率的同時(shí)能展現十分豐富生動(dòng)的圖像,非常適合于視頻網(wǎng)絡(luò )傳輸。

  Linux中沒(méi)有 jpeg函數庫,需要下載 jpegsrc.v6b.tar.gz后,在 /usr/src解壓安裝: cd jpeg-6b ./configure Make Make install

  這樣,Linux就支持 jpeg函數庫了,在編譯器編譯連接時(shí)帶有 -l jpeg選項就能連接上 jpeg函數庫了。

  利用下面函數將采集到的 YUV420P的原始圖像數據直接壓縮成 JPEG格式進(jìn)行傳輸:

  int yuv420p_to_jpeg(char **jpeg_data, unsigned char *image, int width, int height,int quality),其中, jpeg_data 指向壓縮圖像數據指針的指針, image為采集圖像原始數據,width為長(cháng)度,height為高度,quality為壓縮質(zhì)量,函數的返回值為產(chǎn)生壓縮圖像數據的長(cháng)度。

  現在企事業(yè)的業(yè)務(wù)大多通過(guò) Web技術(shù)[4]來(lái)部署實(shí)現。通過(guò) Web方式主要有以下幾點(diǎn)優(yōu)勢:

  (1)可以簡(jiǎn)化界面的工作,直接使用瀏覽器界面,而瀏覽器已是計算機的必備軟件了。

  (2)很容易實(shí)現超出局域網(wǎng)范圍的遠程控制,并可以實(shí)現遠程自動(dòng)系統升級。

  (3)應用層程序開(kāi)發(fā)快捷,由于 Web標準的統一,使得開(kāi)發(fā)是跨平臺的。而嵌入式系統性能的增強也使得 Web服務(wù)進(jìn)入嵌入式領(lǐng)域成為可能。 Web服務(wù)的優(yōu)勢也同樣適用于嵌入式系統。

  webserver又被稱(chēng)為 HTTP Server,它是對 HTTP協(xié)議服務(wù)器端功能的實(shí)現。HTTP協(xié)議是架構在 TCP/IP協(xié)議上的應用級協(xié)議,其目的是方便和加速對分布式協(xié)同工作的超媒體信息系統的訪(fǎng)問(wèn)。HTTP協(xié)議通過(guò)統一資源定位符(Universal Resource Location,URL)來(lái)定位分布式的超媒體信息。URL通過(guò)“通信協(xié)議+網(wǎng)絡(luò )地址”字符串來(lái)唯一標識信息位置。如: http://www.nass.net/storage.htm就是一個(gè) URL。這個(gè) URL明確給出使用的協(xié)議是: HTTP協(xié)議。

  Linux系統是通過(guò)提供套接字( socket)來(lái)進(jìn)行網(wǎng)絡(luò )編程的。通過(guò) webserver進(jìn)行網(wǎng)絡(luò )傳輸時(shí)涉及到的套接口操作函數[5]主要有:socket()函數,主要功能是創(chuàng )建指定類(lèi)型的套接口并返回套接口描述符;bind()函數,主要功能是使套接口與 IP地址和端口號綁定;connect()函數,主要功能是用來(lái)與遠端服務(wù)器建立連接; listen()函數,主要功能是當 socket與某一端口捆綁以后,就需要*該端口,以便對到達的服務(wù)請求加以處理; accept()函數,主要功能是接受連接隊列里的服務(wù)請求,并返回一個(gè)新的 socket描述符,來(lái)供這個(gè)新連接使用。需要注意的是,服務(wù)器并不是通過(guò)*端口來(lái)與客戶(hù)連接并通信,而是產(chǎn)生一個(gè)新的套接口與客戶(hù)通信。例如 webserver在 80號端口*,當有客戶(hù)向 80號端口發(fā)出連接請求時(shí),服務(wù)器將接受請求且由服務(wù)器進(jìn)程派生出子進(jìn)程和新的套接口(由 accept()的返回值指向)來(lái)與客戶(hù)連接并通信。

  將采集格式為 YUV420P的原始視頻圖像數據壓縮成 JPEG格式,并當客戶(hù)端有連接時(shí),通過(guò)子進(jìn)程向客戶(hù)端發(fā)送 JPEG圖像數據: if((size=(yuv420p_to_jpeg(&imagebmp,imageptr,640,480,20)))<0) { printf("Error:write jpeg error!");

}

if(!fork())

{

if(revbuf[5]==' ')

send(nsockfd, imagebmp, size, 0);

}

  這樣,當系統運行時(shí),通過(guò)設置 PC機的 IP地址(與系統 IP地址在同一網(wǎng)段內),在 PC機的 IE瀏覽器內輸入以下 IP地址:http://192.168.0.232:81/,將看到圖像格式為 JPEG的圖片。通過(guò)刷新,可以更新圖像。

5.播放視頻流

  為了播放實(shí)時(shí)視頻,可以通過(guò)在目標板的 ARM Linux系統中移植一個(gè)視頻服務(wù)器的應用程序來(lái)實(shí)現。Webcam[6][7]是一個(gè)比較常用的的視頻應用程序,通過(guò)網(wǎng)絡(luò )下載 webcam_server的 Linux版本: webcam_server-0.50.tar.gz,它是基于 GNU架構之下的,完全免費,源碼開(kāi)放。解壓后執行./configure,生成 Makefile文件。修改當前目錄和 src目錄下的 Makefile的 CC為/usr/local/arm/3.4.3/bin/arm-linux-gcc,執行 make,產(chǎn)生 webcam_server可執行文件,把此應用程序加載到 270開(kāi)發(fā)板上就可以使用了。

  如果遠端客戶(hù)端是 Windows操作系統,下載 Active webcam的客戶(hù)端,并安裝。設置好 PC機的 IP地址(與系統 IP地址在同一網(wǎng)段內)后,啟動(dòng) Active webcam。選擇 Tools—>Create Web Page新建一個(gè)網(wǎng)頁(yè)瀏覽頁(yè),并選中 settings,對視頻瀏覽的相關(guān)參數進(jìn)行設置。具體設置為:Video Device選中 Network IP Camera;Preview Frame. Rate:8 frames per sec;Camera Model:Active WebCam HTTP Server;IP Adress or URL:192.168.0.232(即開(kāi)發(fā)板的 IP地址);Port:8888。整個(gè)設置完后,就可以搜索攝像頭,找到攝像頭后,就能在相應的 PC機上動(dòng)態(tài)顯示攝像頭采集的圖像信息,如圖 1所示,畫(huà)面清晰,圖像采樣大小為 320×240。點(diǎn)擊記錄按鈕,還能將采集到的動(dòng)態(tài)視頻以 .AWLive的文件格式保存到

  C:\Program Files\Active WebCam\Gallery目錄下,文件類(lèi)型為: Active WebCam Video Record,雙擊該文件能進(jìn)行自動(dòng)播放。

  如果遠端客戶(hù)端是 Linux操作系統,可以使用 java applet進(jìn)行視頻流播放,需要在 Linux主機上安裝 jdk環(huán)境,可從 Sun公司的 Java網(wǎng)站上下載 JDK1.6的 Linux版本: jdk-6u11-linux-i586-rpm.bin,先為該文件增加可執行權限: chmod a+x jdk-6u11-linux-i586-rpm.bin,然后對該文件進(jìn)行自解壓: ./ jdk-6u11-linux-i586-rpm.bin,將自動(dòng)進(jìn)行安裝,在 /usr/java目錄下生成了 java環(huán)境,設定相關(guān)的環(huán)境變量: export PATH=/usr/java/jdk1.6.0_11/bin:$PATH,為了讓瀏覽器找到這個(gè) Java Plug-in,必須將環(huán)境參數 NPX_PLUGIN_PATH指到文件 javaplugin.so所在的目錄: export NPX_PLUGIN_PATH=/usr/java/ jdk1.6.0_11/jre/plugin/i386/ns7。設置完后,可以使用 java applet程序播放視頻流,具體命令為:java –classpath applet.jar:/usr/java/ jdk1.6.0_11/lib/tool.jar

  WebCam 192.168.0.232 8888。這時(shí),在 Linux主機上可以獲取 usb camera采集的視頻流,并產(chǎn)生動(dòng)態(tài)鏈接的畫(huà)面,如圖2所示,畫(huà)面清晰,圖像采樣大小為 320×240,速率能達到 8幀/秒,動(dòng)態(tài)刷新效果良好。


6.結束語(yǔ)

  本文討論了基于 PXA270和嵌入式 Linux操作系統下 Web服務(wù)器中視頻圖片壓縮及其傳輸的實(shí)現方法,并通過(guò)移植 Webcam_server及其相應軟件,客戶(hù)端可以完成對遠程的視頻圖像的采集和動(dòng)態(tài)顯示。由于該系統的核心工作采用高性能嵌入式微處理器完成,因此該系統具有結構簡(jiǎn)單、性能穩定、成本低廉等優(yōu)點(diǎn)。該技術(shù)具有通用性,應用范圍相當廣,可以作為簡(jiǎn)單的安全監控、遠程現場(chǎng)監控等應用,同時(shí),在機器人監控系統、視頻電話(huà)、遠程教學(xué)等應用中也有一定的應用前景。

  本文創(chuàng )新點(diǎn):

  1. 對原始采集的視頻圖像信號進(jìn)行 JPEG壓縮后,自主設計 Webserver對其進(jìn)行網(wǎng)絡(luò )傳輸;

  2. 利用 Webcam_server分別在 Linux和 Windows操作系統下進(jìn)行網(wǎng)絡(luò )實(shí)時(shí)視頻采集與傳輸。

共 2 頁(yè): 1  2 

維庫開(kāi)發(fā)網(wǎng)



相關(guān)閱讀:
思科推新一代路由器:支持中國人同時(shí)打視頻電話(huà) 2010-03-10
思科推出新型運營(yíng)商級路由系統(CRS-3) 2010-03-10
3G不同制式搞暈消費者:視頻通話(huà)只限網(wǎng)內 2010-03-09
埃森哲部署AT&T BUSINESS EXCHANGE通訊平臺 2010-03-09
華平視頻會(huì )議多屏受控技術(shù)趨于領(lǐng)先 2010-03-09


亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 肥城市| 巧家县| 浙江省| 宾阳县| 鄢陵县| 西青区| 汾阳市| 吉首市| 资中县| 上栗县| 祁门县| 贵定县| 洛扎县| 皋兰县| 大理市| 宕昌县| 宝兴县| 丘北县| 来凤县| 宣城市| 本溪| 新和县| 常宁市| 梁山县| 靖宇县| 玉田县| 尼玛县| 开鲁县| 沁阳市| 宁晋县| 汶上县| 巴马| 乌苏市| 固原市| 丹巴县| 河西区| 仪陇县| 民乐县| 深州市| 搜索| 平顺县| http://444 http://444 http://444 http://444 http://444 http://444