1.openwrt掛載攝像頭
我用db120刷的openwrt版本是20121127dreambox,固件自帶mjpg-streamer及相應的luci-app-webcam。
掛載的攝像頭需要硬件支持mjpg格式。如果只支持yuy2,那么cpu的負載會比較高,因為yuy2需要cpu進行圖像的壓縮處理,而且分辨率也不如mjpg格式高。我買的是羅技最低端的c110,經測試支持mjpg。一般十幾塊錢的應該是不支持的,實驗室測試同學的thinkpad自帶攝像頭也不支持mjpg。查看是否支持mjpg可用AMCap軟件,從選項里面的視頻捕捉接口中可查看是否有mjpg,沒有就是不支持了。
c110到手后,支持插到db120的上面的usb接口,燈亮后就可以直接在 路由器ip:8080 中看到了。經測試路由器transmission掛種15個,同時局域網開mjpg-streamer監控負載在0.2左右。
2.mjpg-streamer密碼設置
我刷的固件中mjpg-streamer有個問題,就是在luci的設置中開啟登錄密碼始終沒用,重啟也無法打開。用scp連上路由器進/etc/config/mjpg-streamer看如下:
config 'mjpg-streamer' 'core' option 'device' '/dev/video0' option 'resolution' '640x480' option 'port' '8080' option 'fps' '5' option 'username' 'test' option 'PassWordLogin' '1' option 'enabled' 'true' option 'password' '123'
device--設備,resolution--分辨率,port--http訪問端口,fps--幀率,username--登錄賬號,passworelogin--是否開啟密碼,enabled--是否開啟mjpg-streamer,password--登錄密碼
根據config文件顯示確實是打開了登錄密碼的,這里找不到原因再進/etc/init.d/mjpg-streamer中查看如下:
1 #!/bin/sh /etc/rc.common 2 # Copyright (C) 2009 OpenWrt.org 3 START=50 4 5 SSD=start-stop-daemon 6 NAME=mjpg_streamer 7 PIDF=/var/run/$NAME.pid 8 PROG=/usr/bin/$NAME 9 10 start() { 11 config_load mjpg-streamer 12 config_get device core device 13 config_get resolution core resolution 14 config_get fps core fps 15 config_get port core port 16 config_get_bool enabled core enabled 17 [ $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 -w /www/camwww" & 18 } 19 20 stop() { 21 $SSD -K -p $PIDF 22 kill -9 $(cat /tmp/run/mjpg_streamer
在start函數中,看到config_get應該和config是一一對應的,所以根據config文件先加上了
config_get_bool PassWordLogin core PassWordLogin
config_get username core username
config_get password core password
執行/etc/init.d/mjpg-streamer restart后發現還是沒有出現登錄密碼。再接着分析第17行代碼,注意到
--output "output_http.so --port $port -w /www/camwww" &
這里是mjpg-streamer的輸出設置,http訪問的端口和文件夾,根據經驗,應該是在這里設置登錄的密碼,google了一番后,發現只需要加上
-c username:password
(ps:感謝@火日攻天的提示,此處應該是-c $username:$password)
就可以使用密碼來登錄,所以修改后的第17行代碼變為
[ $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 -w /www/camwww -c username:password" &
本以為重啟服務后就可以了,結果還是不行,在打開 路由器ip:8080 后,發現還是直接進入了攝像頭的監控畫面,並沒有彈出登陸框。看來問題總是沒那么簡單。經過多次試驗,發現是代碼的順序問題,需要把-c放到-w之前,將17行代碼修改為
[ $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 username:password -w /www/camwww" &
在打開 路由器ip:8080 后,成功的看到了登陸框。當然,事情到這里還沒完,在這個登陸框中輸入test和123始終顯示驗證失敗。按道理有了config_get username core username和config_get password core password這兩行代碼,登錄的賬號和密碼應該是從配置文件中讀取的test和123。
好吧,在我輸入username和password這組賬號和密碼后,成功的進入了攝像頭的監控界面。再次修改17行代碼為
[ $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 test:123 -w /www/camwww" &
打開地址,看到登陸框,輸入username和password驗證失敗,輸入test和123驗證成功,進入監控界面。
結果就是這版固件mjpg-streamer的config文件中設置賬號密碼無效,賬號和密碼要直接寫在init.d的文件中。