源自 : http://www.eoeandroid.com/forum.php?mod=viewthread&tid=252676&fromuid=123224
多虧了stackoverflow看到的一篇文章,其中有幾句關鍵的話,然後順藤摸瓜解決了問題。
文章大意:
讨論的前提是你的USB攝像頭是UVC相容的(如今大部分攝像頭相容)
預設Android不提供通路外部攝像頭的API,是以你要考慮寫一個核心到Android應用層通信的中間件。
當你給裝置接入了USB攝像頭,首先要檢查一下幾點:
1)你的裝置是否支援USB-OTG?
2)是否在/dev目錄建立了裝置?如果建立了就那麼一切就很簡單了。shell 執行 ls -l /dev/v*,你将會看到video0或者video1。
3)如果/dev沒有建立裝置,你需要寫一個固件(UVC)跟硬體通信!
(文章位址:http://stackoverflow.com/questio ... android-application)
讀到這裡,再次給我的MK802接上USB攝像頭,然後打開adb shell,執行ls -l /dev/v*,看到了 /dev/video0裝置!
拔掉攝像頭,再執行,video0消失,再連接配接,video0出現,這說明mk802支援我的攝像頭!
到此,已經明确,下一步我需要寫一個android應用層到核心通信的中間件,我對這個也不了解,于是在google狂搜“android usb camera”
終于功夫不負有心,找到了一個android usb攝像頭的應用例子
http://brain.cc.kogakuin.ac.jp/research/usb-e.html
從中找了一個SimpleWebCamra.apk,下載下傳了趕緊裝上,發現不能運作,logcat報一個錯,提示沒有權限通路video0裝置。
這是為什麼?我的系統已經root了呀!難道我的apk也要獲得root權限?又在網上查資料,試了半天,還是不行。
後來忽然靈機一動,android也是linux呀,我能不能把video0裝置設定成沒權限?問了問朋友,執行了一個指令:
chmod 777 /dev/video0
再次運作apk終于跑起來了!(後來經測試,設定成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含義。。)
但是問題又來了,程式進去以後,報錯
VIDIOC_DQBUF error 22, Invalid argument
于是想,必須要活的SimpleWebCamea的源碼了!經過苦苦搜尋,很幸運的找到一個simplewebcam的源碼:
https://bitbucket.org/neuralassembly/simplewebcam/src
下載下傳一看,裡邊包含ndk的c源碼和android源碼,于是按照ndk教程,安裝了cygwin
苦于c代碼看不太懂,錯誤提示VIDIOC_DQBUF 調用參數錯誤,卻無從下手。
于是看了n篇教程,偶然發現說打開攝像頭裝置的open方法的一些參數,然後試着把c代碼中的一些參數去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
改為
fd = open (dev_name, O_RDWR);
再次build,運作,天啊終于出來了,高興死了!

WP_000165.jpg (513.61 KB, 下載下傳次數: 4)
下載下傳附件 儲存到相冊
2013-1-24 18:31 上傳
下邊附上項目的源碼:
SimpleWebCam.zip (273.74 KB, 下載下傳次數: 758)
2013-1-24 18:32 上傳 點選檔案名下載下傳附件
下載下傳積分: e币 -2 元