#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 для получения кадров изображения непосредственно с камеры.