Новости о продуктах
Представляем CameraX 1.5: мощная видеозапись и профессиональная фотосъемка.
7 минут чтения

Команда CameraX с радостью объявляет о выпуске версии 1.5! Это последнее обновление направлено на предоставление вам возможностей профессионального уровня, а также на упрощение настройки сеанса съемки.
Теперь пользователи могут без труда записывать потрясающие замедленные или высокочастотные видеоролики. Что еще важнее, новый API групп функций позволяет уверенно включать сложные комбинации, такие как 10-битный HDR и 60 кадров в секунду , обеспечивая стабильные результаты на поддерживаемых устройствах.
Что касается захвата изображений , вы получаете максимальную гибкость благодаря поддержке захвата необработанных, несжатых файлов DNG (RAW). Кроме того, теперь вы можете использовать вывод Ultra HDR даже при применении мощных расширений камеры.
В основе этих функций лежит новый API SessionConfig , который упрощает настройку и перенастройку камер. Теперь давайте рассмотрим подробнее эти новые интересные функции.
Мощная видеозапись: сочетание высокой скорости и функциональности.
CameraX 1.5 значительно расширяет возможности видеосъемки, обеспечивая более креативный и качественный процесс записи.
Видео в замедленном режиме и с высокой частотой кадров
Одна из самых ожидаемых функций — замедленная видеосъемка — теперь доступна. Теперь вы можете снимать видео с высокой скоростью (например, 120 или 240 кадров в секунду) и напрямую кодировать его в эффектное замедленное видео. В качестве альтернативы вы можете записывать с той же высокой частотой кадров, чтобы получить исключительно плавное видео.
Реализация этого не представляет сложности, если вы знакомы с API VideoCapture .
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 групп функций , который исключает необходимость гадать о совместимости функций. Основанный на API запросов комбинаций функций Android 15, теперь вы можете уверенно включать несколько функций одновременно, гарантируя стабильную работу камеры. В настоящее время группа функций поддерживает: HDR (HLG), 60 кадров в секунду, стабилизацию изображения перед началом съемки и Ultra HDR . Например, вы можете одновременно включить HDR, 60 кадров в секунду и стабилизацию изображения перед началом съемки на устройствах серий Pixel 10 и Galaxy S25. В будущем планируется добавить поддержку записи видео в формате 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 кадров в секунду + стабилизация изображения в режиме предварительного просмотра
- HDR + 60 кадров в секунду
- HDR + Предварительный просмотр Стабилизация
- HDR
- 60 кадров в секунду + стабилизация предварительного просмотра
- 60 кадров в секунду
- Предварительная стабилизация
- Никто
Вариант использования 2: Создание пользовательского интерфейса настроек
Теперь вы можете точно отображать, какие комбинации функций поддерживаются в пользовательском интерфейсе настроек вашего приложения, отключая переключатели для неподдерживаемых параметров, как показано на рисунке ниже.

Чтобы определить, следует ли сделать переключатель неактивным (затемненным), используйте следующие коды для проверки поддержки комбинаций функций. Сначала запросите статус каждой отдельной функции. После включения функции повторно запросите статус остальных функций с включенными функциями, чтобы проверить, следует ли теперь сделать их переключатели неактивными (затемненными) из-за ограничений совместимости.
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 в режиме, отличном от режима композиции . Кроме того, в режиме композиции (те же сценарии, что и с 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(): API CameraX учитывают жизненный цикл. Он неявно «отменяет» привязку ваших сценариев использования при уничтожении активности или другогоLifecycleOwner. Но обновление сценариев использования или переключение камер по-прежнему требует вызоваunbind()илиunbindAll()перед повторной привязкой. Теперь, в CameraX 1.5, при привязке новогоSessionConfig, CameraX автоматически обновляет сессию, устраняя необходимость в вызовах unbind(). - Детерминированное управление частотой кадров: новый API
SessionConfigпредлагает детерминированный способ управления частотой кадров. В отличие от предыдущего методаsetTargetFrameRate, который давал лишь подсказку, этот новый метод гарантирует применение указанного диапазона частоты кадров после успешной настройки. Для обеспечения точности необходимо запросить поддерживаемые частоты кадров с помощьюCameraInfo.getSupportedFrameRateRanges(SessionConfig). Передав полныйSessionConfig, CameraX сможет точно определить поддерживаемые диапазоны на основе конфигураций потока.
Функция Camera-Compose теперь стабильна.
Мы знаем, как вам нравится Jetpack Compose, и рады сообщить, что библиотека camera-compose теперь стабильна в версии 1.5.1 ! Этот релиз включает в себя критически важные исправления ошибок, связанных с использованием CameraXViewfinder с такими функциями Compose, как moveableContentOf и Pager , а также устранение проблемы с растягиванием предварительного просмотра. В будущих релизах мы продолжим добавлять новые функции в camera-compose .
Улучшения в анализе изображений и управлении камерой.
- Регулировка мощности фонарика: Получите точный контроль над мощностью фонарика устройства с помощью новых API. Вы можете запросить максимально поддерживаемую мощность с помощью CameraInfo.getMaxTorchStrengthLevel() , а затем установить желаемый уровень с помощью CameraControl.setTorchStrengthLevel() .
- Поддержка NV21 в
ImageAnalysis: Теперь вы можете запрашивать формат изображений NV21 непосредственно изImageAnalysis, что упрощает интеграцию с другими библиотеками и 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 Studio Panda 4 теперь стабильна и готова к использованию в продакшене. В этом релизе появились режим планирования, прогнозирование следующего изменения и многое другое, что делает создание высококачественных Android-приложений проще, чем когда-либо.
Matt Dyor • 5 мин чтения

Новости о продуктах
Если вы — разработчик Android-приложений, стремящийся внедрить в них инновационные функции искусственного интеллекта, то недавно мы выпустили новые мощные обновления.
Thomas Ezan • 3 мин чтения

Новости о продуктах
Android 17 достиг четвертой бета-версии, последней запланированной бета-версии этого цикла релизов, что является критически важным этапом для обеспечения совместимости приложений и стабильности платформы.
Daniel Galpin • 4 мин чтения
Будьте в курсе событий
Получайте еженедельно самые свежие новости о разработке Android прямо на свою электронную почту.




