Android使用Camera2 替代過時的Camera API

轉載自 Coder包子哥 的博客 Android使用Camera2 替代過時的Camera API

因爲考慮到想要新增新的5.0以上的Camera2 API,發現變得太多,有重構的意思,還好先發現了這篇文章,目前對5.0以下的版本都沒有兼容包和支持,所以建議按照文中最後一條做一下API版本判斷

以下文章出自:
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0428/2811.html#badfb4523

英文原文:
https://forums.developer.amazon.com/articles/2707/using-camera2-to-replace-deprecated-camera-api.html

概要

從5.0開始(API Level 21),可以完全控制安卓設備相機的新api Camera2(android.hardware.Camera2)被引入了進來。在以前的Camera api(android.hardware.Camera)中,對相機的手動控制需要更改系統才能實現,而且api也不友好。不過老的Camera API在5.0上已經過時,在未來的app開發中推薦的是Camera2 API。

L版本之前的Camera API

  • 有限的圖片數據流獲取方式
  • 有限相機狀態信息
  • 沒有手動捕獲控制

Camera2 API

  • Supports 30fps full resolution with burst mode

支持30fps的全高清連拍

  • Supports change on manual camera settings between frame capture

  • 支持幀之間的手動設置

  • Supports RAW image capture

  • 支持RAW格式的圖片拍攝

  • Supports Zero Shutter Lag & Movie Snapshot

  • 支持快門0延遲以及電影速拍

  • Supports setting other manual camera device controls including level of Noise Cancelling

  • 支持相機其他方面的手動控制包括噪音消除的級別

    相機的基本使用被分成了5個主要部分

    1. CameraManager
    2. CameraDevice
    3. CameraCaptureSession
    4. CaptureRequest
    5. CaptureResult

    CameraManager:

    • 提供構建,列出以及鏈接相機設備的接口

    http://developer.android.com/reference/android/hardware/camera2/CameraManager.html

    CameraDevice:

  • 代表和安卓設備相連的單個相機

  • http://developer.android.com/reference/android/hardware/camera2/CameraDevice.html

  • CameraCaptureSession:

  • 提供一套輸出目標的

  • surface(TextureView,MediaRecorder,MediaCodec,ImageReader,RenderScriptAllocation)。

  • http://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession.html

  • CaptureRequest:

  • CaptureResult:

  • 從圖像傳感器獲得的單個圖片拍攝的結果。

    http://developer.android.com/reference/android/hardware/camera2/CaptureResult.html

  • 更詳細的內容,需要通讀Camera2包的概要介紹頁

  • http://developer.android.com/reference/android/hardware/camera2/package-summary.html

  • 還有一個YouTube上的谷歌開發者的介紹視頻,解釋了Camera2 API的改動:DevBytes:Android L開發者預覽之- Camera2 API

  • https://www.youtube.com/watch?v=Xtp3tH27OFs

    你需要記住在安卓設備上,Camera2 API的所有特性並不都總是可用的。取決於設備本身。爲了檢查那些特性可用,可以使用CameraCharacteristics來獲得支持信心。

    • characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

    返回的結果分爲級別的相機功能,按照 全支持> 有限支持> 看心情贈送的順序排列:

  • INFO_SUPPORTED_HARDWARE_LEVEL_FULL

  • 全方位的硬件支持,允許手動控制全高清的攝像。如果返回的是這個,連拍模式以及其他新特性都是可用的。https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL

  • INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED

  • 一個“有限支持”的設備可能有一些或者沒有“全支持”設備的特性。有些特性可能不屬於任何硬件級別,需要單獨查詢。

    https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL

  • INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY

  • 所有的設備都會有的特性。這和過時的Camera API所支持的特新是一樣的。

    https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL

    雖然推薦在未來的app中使用Camera2 API,但是隻有Lollipop的設備商纔可用,也不大可能會出現兼容老設備的包。因此在最小版本(minSdkVersion)升到21之前,你還是需要繼續使用Camera API(android.hardware.Camera)。

    不過你可以用下面的代碼對不同的版本區別對待

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        // your code using Camera API here - is between 1-20
    } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        // your code using Camera2 API here - is api 21 or higher
    }
    • 1
    • 2
    • 3
    • 4
    • 5

    最後,在網上發現幾個使用Camera API2開發的實例程序,總結一下方便後續參考:

    1. Camera2 Basic : https://github.com/googlesamples/android-Camera2Basic
      演示如何使用Camera2 API基本功能的demo。你可以從中學會如何遍歷相機設備的所有特性,顯示預覽照片,以及拍照。

    2. Camera2 Video:https://github.com/googlesamples/android-Camera2Video
      這個demo演示如何使用Camera2 API錄製視頻。

    3. Camera2 master: http://www.eyesourcecode.com/thread-35378-1-1.html
      使用Android L Camera2 API開發的示例應用程序,具備拍照,AWB,Flash,連拍功能

    4. LCamera http://www.eyesourcecode.com/thread-35377-1-1.html
      L Camera是一個開源的實驗性質的Camera應用程序,基於Android L提供的新API android.hardware.camera2,目前只支持在Andorid 5.0 Lollipop版本的Nexus 5和Nexus 6上運行。

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章