現在随着音視訊的應用越來越多,直接使用系統原生相機進行拍照裁剪和拍視訊,已經不能滿足需求了。
需要通過Camera API進行自定義相機開發,滿足一些複雜的業務場景,開篇先介紹Camera的基礎知識,為後面Camera開發提供支援。
基礎知識
Android Framework提供Camera API來實作拍照與錄制視訊的功能,目前Android有三類API,
-
Camera
此類是用于控制裝置相機的舊版 API,現已棄用,在Android5.0以下使用
-
Camera2
此軟體包是用于控制裝置相機的主要 API,Android5.0以上使用
-
CameraX
基于Camera 2 API封裝,簡化了開發流程,并增加生命周期控制
相關開發類
-
android.hardware.camera2
控制相機的核心API,使用它可以實作拍照和錄制視訊的功能。
-
Camera
此類是用于控制裝置相機的舊版 API,現已棄用。
-
SurfaceView
此類用于向使用者呈現實時相機預覽。
-
TextureView
也是用于實時相機預覽,Android4.0之後引入
-
MediaRecorder
用于錄制視訊
-
Intent
MediaStore.ACTION_IMAGE_CAPTURE 或 MediaStore.ACTION_VIDEO_CAPTURE 的 Intent 操作類型可用于捕獲圖像或視訊,而無需直接使用 Camera 對象。
術語
-
ISO(感光度)
CMOS(或膠卷)對光線的敏感程度,用ISO100的膠卷,相機2秒可以正确曝光的話,同樣光線條件下用ISO200的膠卷隻需要1秒即可,用ISO400則隻要0.5秒。
常見的标準:ISO100,ISO200,ISO400
-
曝光時間
曝光時間是為了将光投射到相機感光片上,相機快門所要打開至關閉的時間
-
光圈
用來控制光線透過鏡頭,進入相機内感光面光量的裝置
-
焦距
指的是平行的光線穿過鏡片後,所彙集的焦點至鏡片間之距離。
數值越小,代表可以拍攝的角度越廣,數值越大,代表可以拍攝的角度越小
-
景深
拍攝時,當鏡頭聚集于某個被攝體時,這個被攝體就能在相機上結成清晰影像。使被攝體産生較為清晰影像的縱深的範圍叫景深
-
測光
測光模式:中央平均測光(average metering)、中央局部測光、點測光(spot metering)、多點測光、評價測光
-
自動曝光(Auto Exposure)
相機根據光線條件自動來調整曝光時間等來确定曝光量
-
對焦
對焦模式:自動對焦 AE(Auto Focus)、手動對焦 MF(Manual Focus)
自動對焦分為對比度對焦(contrast)、相位對焦(PDAF: Phase Detection Auto Focus)和混合對焦(hybrid)
-
閃光燈(Flashlight)
通過閃光燈打閃照亮物體來達到拍出清晰圖檔的目的
-
ScreenFlash
通過螢幕打閃,照亮周圍物體,拍出高清圖檔
-
高動态範圍圖像(HDR)
HDR全稱是High-Dynamic Range,即高動态範圍圖像技術。在拍照過程中開啟HDR,可以讓原先的暗場景變得更明亮更通透。
-
零延時拍照(ZSD)
為了減少拍照延時,讓拍照&回顯瞬間完成的一種技術
-
連拍(ContinuousShot)
通過節約資料傳輸時間來捕捉攝影時機
-
預覽大小(PreviewSize)
相機預覽圖檔的大小
-
拍照大小(PictureSize)
拍照生成圖檔的大小
-
自動白平衡(Auto white balance)
AWB(Auto white balance),自動白平衡是相機的預設設定,相機中有一結構複雜的矩形圖,它可決定畫面中的白平衡基準點,以此來達到白平衡調校
-
對比度
圖像最亮和最暗之間的區域之間的比率,比值越大,從黑到白的漸變層次就越多,進而色彩表現越豐富
-
飽和度
指色彩的鮮豔程度
-
銳度
是反映圖像平面清晰度和圖像邊緣銳利程度的一個名額
相機功能
Android 支援多種相機功能,您可使用相機應用控制這些功能,如圖檔格式、閃光模式、對焦設定等等。
通過Camera.Parameters可以設定大部分的功能,下面介紹幾個重要功能:
- 區域測光和對焦
- 人臉檢測
- 延時視訊
區域測光和對焦
從 Android 4.0(API 級别 14)開始,通過Camera.Parameters來确定對焦或亮度設定的區域,然後進行拍照或者錄像
人臉檢測
這個和真正的人臉識别是不一樣的 ,這裡僅僅是檢測人臉。
通過照片分析,檢測照片中是否包含人臉,使用人臉識别技術來識别人臉并計算照片設定
延時視訊
延時視訊功能允許使用者将間隔幾秒鐘或幾分鐘拍攝的圖檔串聯起來,建立視訊剪輯。使用MediaRecorder錄制時間流逝片段的圖像。
其他重要功能API:
參考
- CameraX
- Camera
- Detecting camera features with Camera2
- Android相機開發 - 1)基礎概覽篇
- Android之Camera1實作相機開發