Полноэкранная запись видео в передней камере с использованием camera2 api - PullRequest
3 голосов
/ 24 марта 2020

Я застрял в этом выпуске на несколько дней.

Я следовал этому официальному образцу камеры Android в Kotlin: android образце камеры

11 февраля 2020 г. я поднял вопрос о github выпуск , но не получил ни одного отзыва.

Моя проблема:

Я использовал образец как есть и только изменен val cameraId = manager.cameraIdList[0] на val cameraId = manager.cameraIdList[1] для фронтальной камеры. ПРИМЕЧАНИЕ: это не происходит в задней камере.

Передняя камера не работает и показывает черную полосу на протестированных устройствах:

  • Эмулятор: пиксель C API 29
  • Устройство: Galaxy Tab S2
  • Режим: Портрет

enter image description here

Я хотел полноэкранный просмотр, поэтому, когда Я не устанавливаю соотношение сторон AutoTextureView в комментариях ниже, видео занимает полный экран, но теперь растянуто.

if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
  //I only have portrait mode
} else {
  //textureView.setAspectRatio(previewSize.height, previewSize.width)
} 

Есть ли способ установить полноэкранный режим без растяжения или с правильным соотношением сторон?

Я прошел через следующие решения в расслабленном состоянии, и ни одно из них не помогло мне:

Камера 2: невозможно записать видео в полноэкранном режиме?

Camera2 API Сделать предварительный просмотр Заполнить весь вид

Android Camera2 API растягивает превью

1 Ответ

1 голос
/ 07 апреля 2020

После работы в течение нескольких дней. Полноэкранный предварительный просмотр и захват изображения Camera2 помогли мне решить проблему.

Настройка onMeasure в AutoFitTextureView как:

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    val width = View.MeasureSpec.getSize(widthMeasureSpec)
    val height = View.MeasureSpec.getSize(heightMeasureSpec)
    if (ratioWidth == 0 || ratioHeight == 0) {
        setMeasuredDimension(width, height)
    } else {
        if (width > ((height * ratioWidth) / ratioHeight)) {
            setMeasuredDimension(width, (width * ratioHeight) / ratioWidth)
        } else {
            setMeasuredDimension((height * ratioWidth) / ratioHeight, height)
        }
    }
}

Выше код делает экран в полном размере, но у него была проблема с предварительным просмотром, потому что он не был в центре

...