CameraX 團隊很高興宣布推出 1.5 版!這項最新更新著重於提供專業級功能,並讓相機工作階段的設定比以往更加簡單。
錄影方面,使用者現在可以輕鬆拍攝令人驚豔的慢動作或高影格率影片。更重要的是,新的 Feature Group API 可讓您放心地啟用複雜的組合,例如 10 位元 HDR 和 60 FPS,確保支援的裝置都能提供一致的結果。
在影像擷取方面,您可擷取未經處理的未壓縮 DNG (RAW) 檔案,享有最大彈性。此外,現在即使使用強大的相機擴充功能,也能運用 Ultra HDR 輸出功能。
這些功能以全新的 SessionConfig API 為基礎,可簡化相機設定和重新設定程序。接著,我們來深入瞭解這些令人期待的新功能。
強大的錄影功能:高速錄影和功能組合
CameraX 1.5 大幅擴充了影片功能,可提供更具創意且穩定的錄製體驗。
慢動作和高影格速率影片
我們最受期待的功能之一「慢動作影片」現已推出。現在你可以拍攝高速影片 (例如 120 或 240 每秒影格數),並直接編碼為戲劇性的慢動作影片。你也可以使用相同的高影格率錄製影片,製作出極為流暢的影片。
如果您熟悉 VideoCapture API,就能輕鬆導入這項功能。
1. 檢查是否支援高速:使用新的 Recorder.getHighSpeedVideoCapabilities() 方法查詢裝置是否支援這項功能。
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
val highSpeedCapabilities = Recorder.getHighSpeedVideoCapabilities(cameraInfo)
if (highSpeedCapabilities == null) {
// This camera device does not support high-speed video.
return
}2. 設定及繫結用途:使用傳回的 videoCapabilities (內含支援的影片畫質資訊) 建構 HighSpeedVideoSessionConfig。接著,您必須透過 cameraInfo.getSupportedFrameRateRanges() 查詢支援的影格速率範圍,並設定所需範圍。如要錄製慢動作影片,請叫用 setSlowMotionEnabled(true),否則系統會錄製高影格率影片。最後一個步驟是使用一般 Recorder.prepareRecording().start() 開始錄製影片。
val preview = Preview.Builder().build()
val quality = highSpeedCapabilities
.getSupportedQualities(DynamicRange.SDR).first()
val recorder = Recorder.Builder()
.setQualitySelector(QualitySelector.from(quality)))
.build()
val videoCapture = VideoCapture.withOutput(recorder)
val frameRateRange = cameraInfo.getSupportedFrameRateRanges(
HighSpeedVideoSessionConfig(videoCapture, preview)
).first()
val sessionConfig = HighSpeedVideoSessionConfig(
videoCapture,
preview,
frameRateRange = frameRateRange,
// Set true for slow-motion playback, or false for high-frame-rate
isSlowMotionEnabled = true
)
cameraProvider.bindToLifecycle(
lifecycleOwner, cameraSelector, sessionConfig)
// Start recording slow motion videos.
val recording = recorder.prepareRecording(context, outputOption)
.start(executor, {})相容性和限制
高速錄影功能需要特定的 CameraConstrainedHighSpeedCaptureSession 和 CamcorderProfile 支援。請務必檢查功能,並僅在支援的裝置上啟用高速錄影功能,以免造成不良的使用者體驗。目前,幾乎所有 Pixel 裝置的後置鏡頭,以及其他製造商的特定型號都支援這項功能。
詳情請參閱這篇網誌文章。
結合特徵與信賴度:特徵群組 API
CameraX 1.5 推出功能群組 API,可消除功能相容性的臆測。現在您可以根據 Android 15 的功能組合查詢 API,同時啟用多項功能,確保相機工作階段穩定運作。目前支援的功能包括:HDR (HLG)、60 fps、預覽穩定和 Ultra HDR。舉例來說,你可以在 Pixel 10 和 Galaxy S25 系列裝置上同時啟用 HDR、60 FPS 和預覽穩定功能。我們預計日後會推出更多強化功能,包括 4K 錄影和超廣角變焦。
功能群組 API 可支援兩種重要用途:
用途 1:優先處理最佳品質
如要使用最佳功能組合進行拍攝,可以提供優先順序清單。CameraX 會依序嘗試啟用這些功能,並選取裝置完全支援的第一個組合。
val sessionConfig = SessionConfig(
useCases = listOf(preview, videoCapture),
preferredFeatureGroup = listOf(
GroupableFeature.HDR_HLG10,
GroupableFeature.FPS_60,
GroupableFeature.PREVIEW_STABILIZATION
)
).apply {
// (Optional) Get a callback with the enabled features to update your UI.
setFeatureSelectionListener { selectedFeatures ->
updateUiIndicators(selectedFeatures)
}
}
processCameraProvider.bindToLifecycle(activity, cameraSelector, sessionConfig)在本範例中,CameraX 會依下列順序嘗試啟用功能:
- HDR + 60 FPS + 預覽防震功能
- HDR + 60 FPS
- HDR + 預覽防震功能
- 高動態範圍
- 60 FPS + 預覽防震功能
- 每秒 60 個影格
- 預覽防震功能
- 無
用途 2:建構面向使用者的設定 UI
現在,您可以在應用程式的設定使用者介面中,準確反映支援的功能組合,並停用不支援選項的切換鈕,如下圖所示。
如要判斷是否要將切換鈕設為灰色,請使用下列程式碼檢查功能組合支援。一開始,請查詢每項功能的狀態。啟用功能後,請重新查詢其餘功能,看看是否因相容性限制而必須停用。
fun disableFeatureIfNotSuported(
enabledFeatures: Set<GroupableFeature>,
featureToCheck:GroupableFeature
) {
val sessionConfig = SessionConfig(
useCases = useCases,
requiredFeatureGroup = enabledFeatures + featureToCheck
)
val isSupported = cameraInfo.isFeatureGroupSupported(sessionConfig)
if (!isSupported) {
// disable the toggle for featureToCheck
}
}詳情請參閱功能群組網誌文章 。
更多影片強化功能
- 改善並行相機功能:使用 CameraX 1.5.1 時,您現在可以為非組合模式中的每個 SingleCameraConfig,同時繫結 Preview + ImageCapture + VideoCapture 用途。此外,在組合模式 (與 CompositionSettings 相同的使用案例) 中,您現在可以設定套用至最終組合結果的
CameraEffect。 - 動態靜音:您現在可以使用
PendingRecording.withAudioEnabled(boolean initialMuted)以靜音狀態開始錄製,並允許使用者稍後使用Recording.mute(boolean muted)取消靜音。 - 改善儲存空間不足的處理方式:CameraX 現在會可靠地傳送
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE錯誤,讓應用程式能妥善處理儲存空間不足的情況,並通知使用者。 - 低光源強化:在支援的裝置 (例如 Pixel 10 系列) 上,您可以啟用 CameraControl.enableLowLightBoostAsync,在昏暗環境中自動調亮預覽畫面和影片串流。
拍攝專業級影像
CameraX 1.5 為追求最高品質和彈性的開發人員,帶來 ImageCapture 的重大升級。
使用 DNG (RAW) 擷取功能,盡情揮灑創意
為全面掌控後續處理作業,CameraX 現在支援 DNG (RAW) 拍攝功能,讓您直接從相機感應器存取未經處理和壓縮的圖像資料,進行專業級的編輯和調色作業。這項 API 支援單獨擷取 DNG 檔案,或同時擷取 JPEG 和 DNG 輸出內容。如要瞭解如何同時擷取 JPEG 和 DNG 檔案,請參閱下方的程式碼範例。
val capabilities = ImageCapture.getImageCaptureCapabilities(cameraInfo)
val imageCapture = ImageCapture.Builder().apply {
if (capabilities.supportedOutputFormats
.contains(OUTPUT_FORMAT_RAW_JPEG)) {
// Capture both RAW and JPEG formats.
setOutputFormat(OUTPUT_FORMAT_RAW_JPEG)
}
}.build()
// ... bind imageCapture to lifecycle ...
// Provide separate output options for each format.
val outputOptionRaw = /* ... configure for image/x-adobe-dng ... */
val outputOptionJpeg = /* ... configure for image/jpeg ... */
imageCapture.takePicture(
outputOptionRaw,
outputOptionJpeg,
executor,
object : ImageCapture.OnImageSavedCallback {
override fun onImageSaved(results: OutputFileResults) {
// This callback is invoked twice: once for the RAW file
// and once for the JPEG file.
}
override fun onError(exception: ImageCaptureException) {}
}
)相機擴充功能的 Ultra HDR
這項功能結合了相機擴充功能 (例如夜視模式) 的出色運算攝影技術,以及 Ultra HDR 的鮮明色彩和動態範圍,可說是兩全其美。許多近期的 Android 高階手機都支援這項功能,例如 Pixel 9/10 系列和 Samsung S24/S25 系列。
// Support UltraHDR when Extension is enabled.
val extensionsEnabledCameraSelector = extensionsManager
.getExtensionEnabledCameraSelector(
CameraSelector.DEFAULT_BACK_CAMERA, ExtensionMode.NIGHT)
val imageCapabilities = ImageCapture.getImageCaptureCapabilities(
cameraProvider.getCameraInfo(extensionsEnabledCameraSelector)
val imageCapture = ImageCapture.Builder()
.apply {
if (imageCapabilities.supportedOutputFormats
.contains(OUTPUT_FORMAT_JPEG_ULTRA_HDR) {
setOutputFormat(OUTPUT_FORMAT_JPEG_ULTRA_HDR)
}
}.build()核心 API 和可用性強化功能
全新設定方式:SessionConfig
如上述範例所示,SessionConfig 是 CameraX 1.5 的新概念,可集中設定並簡化 API,主要做法有以下兩種:
- 不必再手動呼叫
unbind():CameraX API 可感知生命週期,活動或其他LifecycleOwner遭到刪除時,系統會隱含「解除繫結」用途。不過,更新用途或切換相機時,您仍須先呼叫unbind()或unbindAll(),再重新繫結。現在使用 CameraX 1.5 時,繫結新的SessionConfig後,CameraX 會自動更新工作階段,不必再呼叫取消繫結。 - 確定性影格速率控制:新的
SessionConfigAPI 推出確定性影格速率管理方式。與先前的setTargetFrameRate(僅為提示) 不同,這個新方法保證在設定成功後,系統會套用指定的影格速率範圍。為確保準確度,您必須使用CameraInfo.getSupportedFrameRateRanges(SessionConfig)查詢支援的影格速率。傳遞完整的SessionConfig後,CameraX 就能根據串流設定準確判斷支援的範圍。
Camera-Compose 現已推出穩定版
我們知道您非常喜歡 Jetpack Compose,因此很高興宣布 camera-compose 程式庫現已推出 1.5.1 穩定版!這個版本修正了與 CameraXViewfinder 相關的重大錯誤,包括使用 moveableContentOf 和 Pager 等 Compose 功能時發生的錯誤,以及預覽畫面延展問題。我們會在日後推出的版本中,持續為 camera-compose 新增更多功能。
ImageAnalysis 和 CameraControl 改進項目
- 手電筒強度調整:透過新的 API 精細控制裝置的手電筒。您可以使用 CameraInfo.getMaxTorchStrengthLevel() 查詢支援的最大強度,然後使用 CameraControl.setTorchStrengthLevel() 設定所需強度。
ImageAnalysis支援 NV21:您現在可以直接從ImageAnalysis要求 NV21 圖片格式,簡化與其他程式庫和 API 的整合。如要啟用這項功能,請叫用ImageAnalysis.Builder.setOutputImageFormat(OUTPUT_IMAGE_FORMAT_NV21)。
立即開始使用
立即將依附元件更新至 CameraX 1.5,體驗令人期待的新功能。期待看到您打造的優質應用程式。
如要使用 CameraX 1.5,請將下列依附元件新增至 libs.versions.toml。(建議使用 1.5.1,其中包含許多重大錯誤修正和攝影機並行改善項目)。
[versions]
camerax = "1.5.1"
[libraries]
..
androidx-camera-core = { module = "androidx.camera:camera-core", version.ref = "camerax" }
androidx-camera-compose = { module = "androidx.camera:camera-compose", version.ref = "camerax" }
androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "camerax" }
androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" }
androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camerax" }
androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "camerax" }然後將這些項目新增至模組 build.gradle.kts 依附元件:
dependencies {
..
implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.camera2)
implementation(libs.androidx.camera.view) // for PreviewView
implementation(libs.androidx.camera.compose) // for compose UI
implementation(libs.androidx.camera.extensions) // For Extensions
}如有任何疑問或想與 CameraX 團隊聯絡,請加入 CameraX 開發人員討論群組,或提交錯誤報告:
繼續閱讀
-
產品新訊
從擴增疊加層到完全沉浸式環境,Android XR 生態系統正在迅速擴展,Samsung Galaxy XR 也已於今天上市。
Stevan Silva, Vinny DaSilva • 3 分鐘可讀完
-
產品新訊
每年 Google I/O 大會都會發布生態系統和產品的最新消息與資源,包括 Android 開發。隨著開發工作轉向 AI 和代理程式輔助工具,我們也擴大產品陣容,無論您決定如何建構 Android 應用程式,都能獲得更完善的支援。
Simona Milanovic • 閱讀時間:2 分鐘
-
產品新訊
在 2026 年 Google I/O 大會上,我們展示了 Android 生態系統的最新進展,說明如何協助您提升應用程式品質,同時盡可能提高開發效率。
Ataul Munim • 3 分鐘可讀完
隨時掌握最新消息
每週透過電子郵件接收最新的 Android 開發洞察資訊。