录制一个 1280x720 的视频,并保持 phone 为纵向

Recording a 1280x720 video holding the phone in portrait orientation

我正在努力录制横向分辨率 (1280x720) 的视频,并使用 cameraX API 将我的 phone 保持在纵向(我也无法使用任何APIs,既不是 camera1 也不是 camera2)。不过,我能够让它适用于 ImageCapture 用例和预览。视频不断以最接近的纵向分辨率录制。感谢您的帮助!

CameraSelector cameraSelector = new CameraSelector.Builder()
   .requireLensFacing(CameraSelector.LENS_FACING_BACK)
   .build();

Preview preview = new Preview.Builder()
   .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
   .setTargetResolution(new Size(1280, 720))
   .build();
preview.setSurfaceProvider(mVideoView.createSurfaceProvider());

ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
mImageCapture = imageCaptureBuilder
   .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
   .setTargetResolution(new Size(1280, 720))
   .build();

VideoCapture.Builder videoCaptureBuilder = new VideoCapture.Builder();
mVideoCapture = videoCaptureBuilder
   .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation())
   .setTargetResolution(new Size(1280, 720))
   .build();

ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
Camera camera = cameraProvider.bindToLifecycle(
   RecordMediaCameraXActivity.this,
   cameraSelector,
   preview,
   mImageCapture,
   mVideoCapture
 );

设备不太可能支持您正在寻找的分辨率。

基本上,您需要这样的分辨率:

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

大多数设备都不支持。它们仅支持与图像传感器对齐的裁剪:

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

如果需要,您可能需要自己裁剪相机的帧。 这需要对 GPU 使用 ImageAnalysis 或 Preview 之类的东西,并直接将结果提供给 MediaRecorder 或 MediaCodec/MediaMuxer。

此外,CameraX 还没有正式支持视频录制,所以当它正式可用时,它可能会支持这种用例,但我不会指望这一点。