Android 系統默認不支持直接調用 USB 攝像頭(UVC 設備),需從底層驅動、HAL 層、JNI 到上層應用全鏈路打通。本文梳理完整技術棧與難點。
CONFIG_USB_VIDEO_CLASS (UVC 驅動)adb shell ls /dev/video* 出現 video0/video1 並隨插拔增減| 層級 | 關鍵技術 | 難度 |
|---|---|---|
| 內核驅動 | V4L2 (Video for Linux 2) 框架、UVC 驅動、設備樹配置 | ⭐⭐⭐⭐⭐ |
| HAL/原生庫 | libuvc、libv4l2、像素格式轉換 (YUV→NV21/RGB) | ⭐⭐⭐⭐ |
| JNI 層 | C/C++ 封裝 V4L2 ioctl (open/read/mmap/close)、線程管理、ByteBuffer 直接內存操作 | ⭐⭐⭐⭐ |
| Java/Kotlin 層 | Camera2 API 兼容封裝、Surface 輸出、權限管理 (USB_DEVICE_ATTACHED) | ⭐⭐⭐ |
camera_device_ops_t,向 Camera Service 註冊為邏輯相機