UVC系列1-Android盒子控制雲臺攝像頭系列
Android作為host端控制雲臺攝像頭整個實現過程中涉及了Android kernel底層UVC部分,Android kernel程式碼的編譯,USB協議,Android JNI方面的知識。
剛開始專案提出這個需求的時候,想到的是通過Android原生的USB API 去控制外接的USB PTZ攝像頭,因為大多數的雲臺攝像頭支援pelco-d或是pelco-p協議,而Android提供的介面可以傳遞byte[]型別的引數過去,設想通過這種方式實現控制。現在回想起來這個方法真是too young to naive。因為Android kernel層是通過UVC(usb video class)協議取控制攝像頭PTZ,需要走這一套邏輯才能實現。
由此思路開始轉到通過Android UVC來控制攝像頭轉動,但是google了大大小小的網站沒有人做過這個東西,側面也在一定程度上說明了需求足夠操蛋。UVC在Android的kernel層,但是怎麼去驗證這個東西呢,就想到了有Ubuntu,而Ubuntu上面有一個工具uvcdyctrl 可以輸入對應的引數控制攝像頭,於是通過這個工具驗證了在linux下控制雲臺轉動的可能性。
緊接著要解決的是如何把這個可能性移植到Android上,從前期的實踐看,是需要檢視kernel層的實現,kernel層的引數是否實現了相對和絕對的控制;如果kernel層實現了,怎麼把這個實現傳遞到app層面,讓app可以輸入引數控制轉動。
現在思路很清晰了,就是打通從kernel到app的通道,實現控制,將app層的控制指令傳遞到kernel,由kernel將控制位元組傳遞到硬體。
接下來的文章是:
1、探索Android UVC協議;
2、研究UVC控制協議;
3、定製Android kernel UVC部分支援相對和絕對引數;
4、編寫Android jni程式碼實現控制PTZ。