Запись видео 1280х720 с телефоном в портретной ориентации

#java #android #android-camerax

#java #Android #android-camerax

Вопрос:

Я изо всех сил пытаюсь записать видео в альбомном разрешении (1280х720), удерживая телефон в портретной ориентации, используя CameraX API (я также не смог сделать это ни с помощью одного из API, ни camera1, ни camera2). Тем не менее, я смог заставить это работать для варианта использования Ima&eCapture и предварительного просмотра. Видео продолжает записываться в максимально возможном портретном разрешении. Любая помощь приветствуется!

 CameraSelector cameraSelector = new CameraSelector.Builder()
   .requireLensFacin&(CameraSelector.LENS_FACING_BACK)
   .build();

Preview preview = new Preview.Builder()
   .setTar&etRotation(&etWindowMana&er().&etDefaultDisplay().&etRotation())
   .setTar&etResolution(new Size(1280, 720))
   .build();
preview.setSurfaceProvider(mVideoView.createSurfaceProvider());

Ima&eCapture.Builder ima&eCaptureBuilder = new Ima&eCapture.Builder();
mIma&eCapture = ima&eCaptureBuilder
   .setTar&etRotation(&etWindowMana&er().&etDefaultDisplay().&etRotation())
   .setTar&etResolution(new Size(1280, 720))
   .build();

VideoCapture.Builder videoCaptureBuilder = new VideoCapture.Builder();
mVideoCapture = videoCaptureBuilder
   .setTar&etRotation(&etWindowMana&er().&etDefaultDisplay().&etRotation())
   .setTar&etResolution(new Size(1280, 720))
   .build();

ProcessCameraProvider cameraProvider = cameraProviderFuture.&et();
Camera camera = cameraProvider.bindToLifecycle(
   RecordMediaCameraXActivity.this,
   cameraSelector,
   preview,
   mIma&eCapture,
   mVideoCapture
 );
  

Ответ №1:

Маловероятно, что устройство поддерживает требуемое разрешение.

В принципе, вам нужно разрешение, которое выглядит следующим образом:

 4:3 full sensor
   |--------- ======== ---------|
   |         : 9:16   :         |
   |         : 720p   :         |
   |         : crop   :         |
   |         :        :         |
   |         :        :         |
   |         :        :         |
   |         :        :         |
   |         :        :         |
   |--------- ======== ---------|
  

и это просто не то, что поддерживает большинство устройств. Они поддерживают только те обрезки, которые находятся в том же выравнивании, что и датчик изображения:

 4:3 full sensor
   |----------------------------|
   |                            |
    ============================ 
   : 16:9 720p crop             :
   :                            :
   :                            :
   :                            :
    ============================ 
   |                            |
   |----------------------------|

  

Если вы хотите этого, вам, вероятно, потребуется обрезать кадры с камеры самостоятельно.
Для этого потребуется использовать что-то вроде Ima&eAnalysis или Preview для графического процессора и напрямую передавать результаты в MediaRecorder или MediaCodec / MediaMuxer.

Кроме того, CameraX пока официально не поддерживает запись видео, поэтому вполне возможно, что он будет поддерживать такой вариант использования, когда он будет официально доступен, но я бы не стал на это рассчитывать.

Комментарии:

1. Если вы говорите, что обрезки поддерживаются, только если они находятся в том же выравнивании, что и датчик, почему предварительный просмотр и вариант использования Ima&eCapture работают иначе? Я не знал, что запись видео еще не полностью поддерживается, так что, возможно, я все еще могу надеяться на что-то в будущем. Единственная возможность получить доступ к потоку видео или предварительного просмотра, которую я нашел, заключалась в вызове «&etBitmap()» в режиме предварительного просмотра? Есть ли какие-либо другие возможности?

2. Эти варианты использования обрезаются в конце приложения (предварительный просмотр путем установки матрицы преобразования, которая удаляет лишнюю область). Вы можете использовать вариант использования Ima&eAnalysis для получения кадров изображения непосредственно с камеры.