Camera2 + MediaRecorder: как обрезать записанное видео для соответствия предварительному просмотру (книжная ориентация WJAVA

Программисты JAVA общаются здесь
Anonymous
Camera2 + MediaRecorder: как обрезать записанное видео для соответствия предварительному просмотру (книжная ориентация W

Сообщение Anonymous »

здесь введите описание изображенияЯ создаю приложение для Android с использованием Camera2 API + MediaRecorder, где устройство заблокировано в портретном режиме (режим киоска).
Проблема
Предварительный просмотр камеры выглядит правильно (портрет, 9:16), но записанное видео по-прежнему сохраняется как полный выходной сигнал датчика (16:9) пейзаж).
Я также делюсь изображением, посмотрите, как я обрезаю видео. когда я загружаю видео через adb, оно выглядит как зелено-фиолетовая линия, но при записи с сенсором 16:9 оно записывает хорошо.
Я хочу запись WYSIWYG — это означает:

👉 Записанное видео должно выглядеть точно так же, как пользователь видит при предварительном просмотре (портрет, обрезанный по центру).

Что я пробовал
  • Использование setOrientationHint(90)
  • Установка фиксированного разрешения (например, 1080x1920)
  • Применение матрицы преобразования TextView
  • Попытка масштабирования предварительного просмотра в соответствии с аспектом соотношение
Но ни один из них на самом деле не обрезает записанное видео — они влияют только на предварительный просмотр или поворот.

Требование
  • Записывать видео в портретной ориентации (9:16)
  • Обрезать по центру сенсора камеры (пейзаж 16:9 → портрет 9:16)
  • Вывод должен точно соответствовать предварительному просмотру (лишняя область не записывается)
Информация об устройстве
Это работает на устройстве на базе Rockchip (RK3568/RK3399) в режиме киоска.
Насколько я понимаю, камера Rockchip HAL по-прежнему выдает полные кадры сенсора и не поддерживает обрезку напрямую через Camera2.

Вопросы
  • Как правильно обрезать видео во время записи с помощью Camera2 + MediaRecorder?
  • Можно ли:
    • Обрезать на уровне поверхности (например, через OpenGL / SurfaceTexture)?
    • Или это нужно делать после записи с помощью MediaCodec / FFmpeg?
  • Существуют ли какие-либо API-интерфейсы Rockchip или функции уровня HAL, которые позволяют обрезать перед кодированием?
  • Если требуется постобработка, каков наиболее эффективный способ сделать это без проблем с производительностью при повторном кодировании?
Ожидается Вывод
Предварительный просмотр (портрет, правильный):

Код: Выделить всё

|     |
|     |
|     |
|     |
Но записанное видео на данный момент выглядит так:

Код: Выделить всё

-----------------
|               |
|               |
|               |
-----------------
👉 Мне нужен результат:

Код: Выделить всё

|     |
|     |
|     |
|     |
(обрезано по центру из ландшафтной рамки)

Дополнительный контекст
  • Минимальный SDK: 24+
  • Использование Java
  • Нет CameraX (требуется только Camera2)
  • Производительность в реальном времени важна
Что я ищу
  • Лучший подход (в режиме реального времени или постобработка)
  • Пример кода или архитектуры
  • Любое работающее решение на встроенных устройствах, таких как Rockchip
Если кто-нибудь реализовал настоящую запись WYSIWYG, особенно на оборудовании Rockchip, буду очень признателен за рекомендации.>

Вернуться в «JAVA»