gpt4 book ai didi

android - Camera2 API 视频分辨率

转载 作者:行者123 更新时间:2023-11-29 16:42:57 35 4
gpt4 key购买 nike

我正在使用 Camera2 录制视频。要获取可用分辨率的列表,我们有 2 个选项:

List<android.util.Size> resolutions = Arrays.asList(map.getOutputSizes(MediaRecorder.class));

和:

// CAMCORDER_PROFILES is an int array listing all the profiles ids
for(int profileId : CAMCORDER_PROFILES) {

if(CamcorderProfile.hasProfile(profileId)) {

CamcorderProfile profile = CamcorderProfile.get(profileId);
// Here we can get a resolution with profile.videoFrameWidth & profile.videoFrameHeight
}
}

起初我只使用选项 2。在我尝试使用 Samsung Galaxy A3 2016 之前它工作正常。在此设备上,如果我尝试使用 1920*1080 分辨率,它会失败并出现此错误:

E/CameraDevice-0-LE: Surface with size (w=1920, h=1080) and format 0x1 is not valid, size not in valid set: [960x720, 880x720, 720x720, 720x480, 640x480, 352x288, 320x240, 176x144]

为了解决这个问题,我现在得到一个配置文件,其分辨率是 map.getOutputSizes(MediaRecorder.class) 的结果。我可以工作,但我可以使用的最佳配置文件是 640x480,这不足以满足我的需求。

有没有办法在 A3 上使用 Camera2 的 1920*1080 分辨率?还是该分辨率仅适用于三星 SDK???

编辑:这是我开始录制视频时所做的:

private void startRecordingVideo() {

if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewResolution) {
return;
}

try {

closeCaptureSession();
setUpMediaRecorder();

SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;

texture.setDefaultBufferSize( (int) mPreviewResolution.getWidth(), (int) mPreviewResolution.getHeight());

List<Surface> surfaces = new ArrayList<>();

// Set up Surface for the camera preview
Surface previewSurface = new Surface(texture);
surfaces.add(previewSurface);
mPreviewRequestBuilder.addTarget(previewSurface);

// Set up Surface for the MediaRecorder
Surface recorderSurface = mMediaRecorder.getSurface();
surfaces.add(recorderSurface);
mPreviewRequestBuilder.addTarget(recorderSurface);

// Start a capture session:
mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {

@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {

mCaptureSession = cameraCaptureSession;
updatePreview();

// Start recording
mMediaRecorder.start();
}

@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Log.e(this, "Unable to start recording video");
}

}, mBackgroundHandler);
}
catch (CameraAccessException | IOException e) {
e.printStackTrace();
}
}

最佳答案

A3 有一个 Legacy 相机。这意味着 camera2 API 是旧相机 API 的包装器。很多时候,这个包装器引入的麻烦比它解决的任何问题都多。我建议直接通过旧相机 API 使用此设备和其他旧设备。

关于android - Camera2 API 视频分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813681/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com