1. 程式人生 > >mjpg streamer(OpenWRT)

mjpg streamer(OpenWRT)

軟體介紹

mjpg-streamer 可以通過檔案或者是HTTP方式訪問linux UVC相容攝像頭。

安裝

  1. 在openwrt系統下,需要安裝以下攝像頭的驅動(需聯網)。
opkg install kmod-usb2
opkg install kmod-usb-ohci           #一般BCM用的是ohci USB控制器
opkg install kmod-video-gspca-core
opkg install kmod-video-core
opkg install kmod-video-uvc            #免驅uvc攝像頭
opkg install kmod-video-gspca-zc3xx #中微星攝像頭 如zc301 zc303 zc305 opkg install kmod-i2c-core opkg install kmod-input-core

如果能找到 /dev/video0 的裝置檔案,就說明驅動已經安裝成功。
如果沒有成功,羅技的攝像頭還可以嘗試一下安裝kmod-video-pwc。
在openwrt系統下面,安裝mjpg-streamer很簡單。

opkg install mjpg-streamer
  1. 安裝完了之後,可使用下面指令執行啟動
/etc/init.d/mjpg-streamer start

使用

在firefox瀏覽器裡面輸入 http://192.168.1.1:8080/?action=stream,應該能看到攝像頭抓取的視訊。
這個視訊的幀數很低,顯得攝像頭反應很慢。可以修改/etc/config/mjpg-streamer裡面的fps引數。
如果想在公司訪問家裡的攝像頭,還應該修改防火牆,接受8080埠的外網請求。
新增下面配置到 /etc/config/firewall

config rule
option src              wan
option proto            tcp
option dest_port        8080
option target           ACCEPT

然後重啟防火牆 /etc/init.d/firewall restart,就可以了。
外網訪問攝像頭的時候,如果看視訊可能速度會跟不上,可以只看截圖。http://192.168.1.1:8080/?action=snapshot

:需要將192.168.1.1替換成路由器說使用的公網IP地址

mjpg_streamer啟動引數

修改mjpg_streamer啟動引數,在您更換攝像頭或者更高解析度等引數時,可使用下面方法進行修改。

vi etc/init.d/fscar #此檔案是我自己建立,本身不存在

這裡寫圖片描述

關於輸入配置引數:

  • y是關鍵,預設啟動是mjpeg格式,改成YUV格式
  • d指定裝置
  • f 制定幀數,預設30幀
  • r指定視訊大小,如320×240
  • q指定畫質,預設80

關於輸出引數:

  • p 指定埠
  • w 指定網頁目錄
  • c設定通過密碼訪問

免驅攝像頭(UVC標準攝像頭,標配使用此類攝像頭),使用以下啟動引數:

mjpg_streamer -b -i "input_uvc.so -r 320x240 -f 15 -y"  -o "output_http.so -p 8080 -w /web"

設定開機自啟動

openwrt是基於linux核心的路由作業系統,
總結一下OpenWrt的啟動流程:1.CFE->2.linux->3./etc/preinit->4./sbin/init ->5./etc/inittab ->6./etc/init.d/rcS->7./etc/rc.d/S* ->8.經過裁剪,因此與普通linux系統檔案結構有所不同。為了新增攝像頭裝了mjpg_streamer,但是每次都要手動啟動攝像頭,實在是太麻煩了於是給它設定為開機自啟動。
首先在/etc/init.d裡新增需要啟動的shell指令碼

vim startCamera
#!/bin/sh /etc/rc.common  
# /init.d/startCamera  
START=50  
start()  
{  
mjpg_streamer -b -i "input_uvc.so -r 320x240 -f 15 -y "  -o "output_http.so -p 8080 -w /web"
}  
stop()  
{  
kill all startCamera  
}  

之後還需要在rc.d目錄下做一個連結,啟動時系統會按順序啟動rc.d目錄下的指令碼連結,對應執行init.d目錄下的啟動指令碼。
(1) 進入etc資料夾

cd /etc

(2) 命令:

ln -s init.d/startCamera  rc.d/S50startCamera

重啟,即可
現在實現了開機自啟動
如果想關閉的話 直接殺程序就可以了
服務啟動

/etc/init.d/mjpg-streamer enable 是設定開機自動啟動
/etc/init.d/mjpg-streamer disable 是禁止開機自動啟動
/etc/init.d/mjpg-streamer start 是現在啟動
/etc/init.d/mjpg-streamer restart 重啟
/etc/init.d/mjpg-streamer stop 停止
service mjpg-streamer start

設定開機自動啟動服務

/etc/init.d/mjpg-streamer enable

立即啟動服務

/etc/init.d/mjpg-streamer start

很像ser2net,即便拔掉攝像頭再插上也會識別。

配置使用者名稱和密碼

mjpg-streamer 還可以使用使用者名稱和密碼來訪問。
修改 /etc/init.d/mjpg-streamer 中的

[ $enabled -gt 0 -a -c $device ] && sleep 3 && $SSD -S -m -p $PIDF -q -x $PROG -- --input "input_uvc.so --device $device --fps $fps --resolution $resolution" --output "output_http.so --port $port" &為[ $enabled -gt 0 -a -c $device ] && sleep 3 && $SSD -S -m -p $PIDF -q -x $PROG -- --input "input_uvc.so --device $device --fps $fps --resolution $resolution" --output "output_http.so --port $port -c user:pass" &

最後新增的部分就是使用者名稱和密碼,中間用冒號分割。重新啟動mjpg-streamer,保證配置生效。

/etc/init.d/mjpg-streamer restart