基於ARM的網絡視頻監控開發

 

轉載自:http://blog.sina.com.cn/s/blog_5fe2e9b10100cz9v.html

相關文獻:http://www.linuxsir.org/main/?q=node/221

            http://hi.baidu.com/zhxust/blog/item/059bfa876955dc23c65cc31c.html

 

要用到的軟件包

  攝像頭驅動: http://mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.4.31LE06.patch.tar.gz
  服務器視頻採集: http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_0_0.tar.gz
  客戶端播放視頻: ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz
  瀏覽器java plugs: http://software.lupaworld.com/data/upload/jre-1_5_0_06-linux-i586-rpm.bin
(1)安裝攝像頭驅動

將usb-2.4.31LE06.patch.tar.gz 複製到/armlinux/kernel/driver/usb下,解壓,打補丁

#tar -xvzf usb-2.4.31.patch.gz

#patch -p1 < usb-2.4.31.patch
  此時就會在此目錄下看到spca5xx文件夾了.不知是何原因,估計是KERNEL版本的原因,在/armlinux/kernel/driver/usb 的目錄中的Makefile 和config.in中找不到對應的關鍵字,此時會有一些錯誤,並將錯誤放在Makefile.rej 和config.in.rej 兩文件中,打開兩個文件,分別將其中前面有+的文字加到 Makefile和config.in中
對應的分類中即可. 我做的時候,沒有生成config.in.rej ,只需處理一下Makefile.rej 。

(2)編譯內核

進入armlinux

#make menuconfig.

在arm linux的kernel目錄下make menuconfig,
  首先<*>選擇Multimedia device->下的Video for linux,
  然後 USB support ---> USB Multimedia devices 選項下應該有
  <M> USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把它配置成module。
(3)#make clean //刪除以前的編譯結果

#make dep //依賴編譯

#make

#make Image //形成vmlinux

#/usr/local/arm/2.95.3/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin //形成linux.bin

// /usr/local/arm/2.95.3/bin/arm-linux-objcopy 在交叉編譯工具的安裝目錄中的一個工具

#gzip -v9 linux.bin //形成linux.bin.gz

#./mkimage -A arm -O linux -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage //把linux.bin.gz文件變爲最終的影像文件uImage

//G:\FFT-9200\標準配置光盤\fft-U-boot\編譯\fft-uboot-1.0.0\tools\mkimage

在linux-2.4.19-rmk7/driver/usb/spca5xx目錄下生成spca5xx.o,spcadecoder.o,spca_core.o。這就是我們要的驅動. 實際使用時,只需spca5xx.o就可以了。

(4)燒寫新的內核到開發板

掛載相關文件到開發板

需要掛載spca5xx.o,servfox,boa,boa的lib,etc,var三個文件目錄

#insmod spca5xx.o

會打印出找到攝像頭的提示信息

(5)移植視頻採集程序servfox

解壓servfox-R1_1_3.tar.gz,將目錄中的Makefile.arm文件,修改爲名爲Makefile即可。再make。

將生成的servfox掛載到開發板。

#mknod /dev/video0 c 81 0 //不寫這一步,會出現 ERROR opening V4L interface錯誤。這一步的意思是:創建一個USB攝像頭設備文件/dev/video0

#./servfox -g -d /dev/video0 -s 320x240 -w 7070

// -g :直接從內存讀取數據

// -s :servfox上顯示的視頻窗口的大小

// -w : 服務器端口

(6)客戶端spcaview

make生成目標文件

在PC上,spcaview –w 192.168.0.11:7070就可以看到攝像頭採集來的圖片了

解壓後,還會產生<http-java-applet>,此是WEB客戶端。將java目錄拷到boa服務器的/var/www目錄下。目標板啓動boa服務器,在windows瀏覽器下訪問:http://192.168.0.11/java/index-sample.html。就可以在線視頻監控。

(7)window瀏覽器安裝jre-1_5_0_06-windows-i586-p.exe

下載,安裝即可。

安裝好後,啓動開發板,將攝像頭驅動spca5xx.o,服務器視頻採集程序servfox,boa服務器程序,以及boa服務器的三個文件夾:lib,etc,var。

開發板的啓動步驟:

(1)設置IP

#ifconfig eth0 192.168.0.11

注意:若使用不同的開發板,要對板子進行操作的命令是大致一樣的,關鍵是找到如何以根用戶登錄的方式。我的板子是啓動後輸入:root即可。有的板子是啓動後輸入:login,然後輸入:root即可。

(2)加載攝像頭驅動

進入攝像頭驅動的安放目錄

#insmod spca5xx.o

(3)#mknod /dev/video0 c 81 0

(4)啓動boa服務器

進入boa服務器安放目錄

#./boa

(5)啓動視頻採集程序

#./servfox -g -d /dev/video0 -s 320x240 -w 7070

windows下啓動IE,輸入地址:http://192.168.0.11/java/index-sample/html

就可在線看到採集的視頻。注意windows主機的IP必須和開發板在同一個網段。

 

在windows在線觀看採集的視頻的同時,通過網頁上的10個按鈕給安放攝像頭的小車發送命令,以控制攝像頭的動作。動作:開始,停止,向上,向下,向左,向右,向前,向後,左轉,右轉。發送命令的方式:通過開發板的串口向單片機發送命令數據。

開發方法如下:

用javascript Editor對boa服務器/var/www/java下的index-sample.html網頁進行添加按鈕和按鈕的相應動作。

代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>spcaserv</title>
</head>

<body>
<center><h1>Spcaserv (c) Servfox (c) Michel Xhaard && JWebcamPlayer(c) Alvaro Salmador Andrea Partinico </h1></center>

<center>
<table border=2 cellspacing=10 cellpadding=10 align="center">
<tr>
<td width="62%">
<applet codebase="." archive="JWebcamPlayer.jar" code="JWebcamPlayer.class" name="JWebcamPlayer" ID="JWebcamPlayer" align="center" width="400" height="400" MAYSCRIPT>
<param name="Color" value="#ffffff">
<param name="Server" value="192.168.0.11">
<param name="Port" value="7070">
<PARAM NAME="scriptable" value="true">
<PARAM NAME="mayscript" value="true">
<strong>You need to download Java.<br>
Click <a href="http://www.java.com/en/download/manual.jsp">here:
http://www.java.com/en/download/manual.jsp</a></strong><br>
</applet>
<br>
click on the window surface to set brightness and contrast <br>
when done, click again to remove the control box.
</td>
<td width="38%">
<table width="100%" align="center">
<center><tr>
<td width="33%" align="right">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Start" method=POST><input type="submit" name="Start" value= "Start"></input></form>
</td>
<td width="34%"></td>
<td width="33%" align="left">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Stop" method="post"><input type="submit" name="Stop" value= "Stop "></input></form>
</td>
</tr></center>
<br>
<tr><center>
<td></td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Forward" method="post"><input type="submit" name="Forward" value= "Forward"></input></form>
</td>
<td></td>
</center></tr>
<tr><center>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Left" method="post"><input type="submit" name="Left" value= "Left "></input></form>
</td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Backward" method="post"><input type="submit" name="Backward" value= "Backward"></input></form>
</td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Right" method="post"><input type="submit" name="Right" value= "Right"></input></form>
</td>
</center></tr>
<br>
<tr><td><br></td></tr>
<tr><td><br></td></tr>
<tr><center>
<td></td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?CameraUp" method="post"><input type="submit" name="CameraUp" value= "CameraUp"></input></form>
</td>
<td></td>
</center></tr>
<tr><center>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?CameraLeft" method="post"><input type="submit" name="CLeft" value= "Left "></input></form>
</td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?CameraDown" method="post"><input type="submit" name="CameraDown" value= "Down"></input></form>
</td>
<td align="center">
<form action="http://192.168.0.11/cgi-bin/serialSendData.cgi?CameraRight" method="post"><input type="submit" name="CRight" value= "Right"></input></form>
</center></tr>
<br>
</table>
</td>
</tr>
</table>
</center>
</body>
</html>
//action="http://192.168.0.11/cgi-bin/serialSendData.cgi?Start"表示:後面的按鈕的發送命令發生後,服務器自動調用服務器下的/var/www/cgi-bin/serialSendData.cgi可執行的c程序。?Start:向c程序傳遞參數,即argv[1]的值。

服務器下的串口程序開發:

和一般的串口程序開發是一樣的。

主要是在main()函數的開始加上一句:printf("Status 204 No Response");

加這個的目的是爲了,在點擊服務器網頁按鈕給服務器發送命令,服務器調用cgi程序(放在boa服務器的/var/www/cgi-bin目錄下)時,網頁的頁面不發生轉,即不變化。

c的串口程序交叉編譯好後,放在boa服務器的/var/www/cgi-bin目錄下,名字可以是serialSendData。不一定需要.cgi後綴的,這個不相干的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章