RK3399的Android系統驅動UVC攝像頭

玩轉deeplearning發表於2019-11-29

Android studio版本 : 3.5.2
Android版本 :7.1
PC作業系統 :win10系統
攝像頭: USB攝像頭
參考專案:https://github.com/saki4510t/UVCCamera
硬體平臺:RK3399

一、匯入工程

在這裡插入圖片描述
同步工程。如果同步時間較長就關閉工程,再開啟工程。

二、工程設定

  1. NDK的版本
    在這裡插入圖片描述
    https://developer.android.google.cn/ndk/downloads/older_releases.html
    下載android-ndk-r16b-windows-x86_64.zip
    注意NDK的版本。
  2. Gradle 設定
    在這裡插入圖片描述

三、程式修改

1.android7.0以後已經不需要android:background="#ff000000" 背景設定,將其刪除。修改layout的檔案activity_main.xml。
在這裡插入圖片描述
2.如果程式可以執行,但是無法顯示攝像頭畫面,將UVCCamera-master\UVCCamera\libuvccamera\src\main\jni\Application.mk 中的#NDK_TOOLCHAIN_VERSION := 4.9 註釋開啟;

3.AndroidManifest.xml檔案裡android:theme="@style/AppTheme"改成 android:theme="@style/Theme.AppCompat.Light.NoActionBar"
在這裡插入圖片描述

四、各個demo介紹

1 ) USBCameraTest0
This is most simple project that only show how to start/stop previewing using SurfaceView.
這是最簡單的專案,只顯示如何使用SurfaceView來啟動/停止預覽。
2 ) USBCameraTest
This is most simple project that only show how to start/stop previewing. This is almost same as USBCameraTest0, but use customized TextureView to show camera images instead of using SurfaceView.
這是最簡單的專案,只顯示如何啟動/停止預覽。這與USBCameraTest0幾乎相同,但是使用自定義的TextureView代替SurfaceView來顯示相機影像。
3 ) USBCameraTest2
This is sample project that show how to record video from UVC camera(without audio) as .MP4 file using MediaCodec encoder. This sample requires API>=18 because MediaMuxer is only supported API>=18.
這是一個示例專案,演示如何使用MediaCodec編碼器將UVC相機(無音訊)的視訊記錄為.MP4​​檔案。此示例需要API> = 18,因為MediaMuxer僅支援API> = 18。

4 ) USBCameraTest3
This is sample project that show how to record video(from UVC camera) with audio(from internal mic) as .MP4 file. This also shows several ways to capture still image. This sample may most useful as base project of your customized app.
這是一個示範專案,演示如何將音訊(來自內部麥克風)和視訊(來自UVC相機)錄製為.MP4​​檔案。這也顯示了幾種捕捉靜止影像的方式。此示例可能最適用於您的定製應用程式的基礎專案。

5 ) USBCameraTest4
This sample shows the way to access UVC camera and save video images on background service. This is one of the most complex sample because this requires IPC using AIDL.
本示例顯示了訪問UVC相機並將視訊影像儲存到後臺服務的方式。這是最複雜的示例之一,因為這需要使用AIDL的IPC。

6 ) USBCameraTest5
This is almost same as USBCameraTest3 but save video images using IFrameCallback interface instead of using input Surface from MediaCodec encoder.
In most case, you should not use IFrameCallback to save images because IFrameCallback is much slower than using Surface. But IFrameCallback will be useful if you want to get video frame data and process them by yourself or passing them to other external library as byte buffer.
這與USBCameraTest3幾乎相同,但使用IFrameCallback介面儲存視訊影像,而不是使用來自MediaCodec編碼器的輸入Surface。
在大多數情況下,您不應使用IFrameCallback來儲存影像,因為IFrameCallback比使用Surface要慢很多。但是,如果您想獲取視訊幀資料並自行處理它們或將它們作為位元組緩衝區傳遞給其他外部庫,則IFrameCallback將非常有用。

7 ) USBCameraTest6
This shows how to split video images to multiple Surface. You can see video images side by side view on this app. This sample also show how to use EGL to render image. If you want to show video images after adding visual effect/filter effects, this sample may help you.
這顯示瞭如何將視訊影像分割為多個Surface。你可以在這個應用程式中看到視訊影像並排觀看。這個例子還展示瞭如何使用EGL來渲染影像。如果您想在新增視覺效果/濾鏡效果後顯示視訊影像,則此示例可能會對您有所幫助。

8 ) USBCameraTest7
This shows how to use two camera and show video images from each camera side-by side. This is still experimental and may have some issue.
這顯示瞭如何使用兩個攝像頭並顯示來自每個攝像頭的視訊影像。這仍然是實驗性的,可能有一些問題。

9 ) usbCameraTest8 This shows how to set/get uvc controls. Currently this supports brightness and contrast only.
usbCameraTest8這顯示瞭如何設定/獲取uvc控制元件。目前這隻支援亮度和對比度。

相關文章