今天按照入門教材實作mjpg-streamer的實驗,出現了很多問題,特此記錄。
配置核心加入攝像頭驅動:
Kernel modules --->Video Support --->kmod-video-core
--->kmod-video-uvc
配置核心加入MJPEG視訊流
Multimedia --->mjpg-streamer
重新編譯,燒寫鏡像:openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin
重新開機後既可以看到已經有mjpg-streamer的指令。
配置攝像頭的幀率/分辨率等:
配置資訊在目錄:etc/config/mjpg-streamer
config mjpg-streamer 'core'
option enabled '1'
option input 'uvc'
option output 'http'
option device '/dev/video0'
option resolution '320x240'
option fps '5'
option www '/www/webcam'
option port '8080'
啟動mjpg-streamer: /etc/init.d/mjpg-streamer start
9.8 電腦或手機觀看視訊圖像
在浏覽器輸入以下位址,即可觀看圖像。本人在火狐和搜狗浏覽器測試都 OK。//問号是正常的,不要以為是亂碼
動态視訊:192.168.1.1:8080/?action=stream
靜态圖像:192.168.1.1:8080/?action=snapshot
我在火狐上使用::192.168.1.1:8080/?action=stream
出現錯誤:
The image cannot be displayed, because it contains errors
以為是火狐缺少插件,或者是其他什麼原因,最後網上找了一下,發現mjpg-streamer支援MJPEG和YUV格式,但是YUV需要軟編碼,是以使用YUV時需要增加參數" -y"
我使用的攝像頭是輸出YUYV格式的攝像頭,是以會出現此問題,手動啟動沒有加"-y"會出現很多
UVCIOC_CTRL_ADD - Error: Inappropriate ioctl for device
檢視了一下/etc/init.d/mjpg-streamer這個啟動腳本,發現确實沒有加-y參數,是以要麼修改/etc/init.d/mjpg-streamer這個腳本,增加-y,要麼自動手動運作指令:
mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -y -r 320x240 -f 30" -o "output_http.so -p 8080"
mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 30" -o "output_http.so -p 8080
實際效果肯定沒有30fps,因為RT5350的CPU處理不過來,攝像頭輸出應該也沒那麼多,猜測而已。
mjpeg-streamer指令詳細介紹網上多的是,這裡就不介紹了。