android - MediaRecorder的android camera2 api问题
问题描述
我有一个奇怪的错误,即我的 CameraDevice.createCaptureSession 没有检测到我的 MediaRecorder Surface 的大小并放弃它。如果我禁用媒体记录器,该应用程序将正常工作。
源代码
public void onOpened(CameraDevice camera) {
SurfaceTexture texture = previewView.getSurfaceTexture();
texture.setDefaultBufferSize(size.getWidth(), size.getHeight());
Surface textureSurface = new Surface(texture);
mCameraDevice = camera;
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoSize(size.getWidth(), size.getHeight());
mMediaRecorder.setOrientationHint(SENSOR_ORIENTATION_DEFAULT_DEGREES);
mMediaRecorder.setPreviewDisplay(textureSurface);
int rotation = ((Activity)context).getWindowManager().getDefaultDisplay().getRotation();
switch (mSensorOrientation) {
case SENSOR_ORIENTATION_DEFAULT_DEGREES:
mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));
break;
case SENSOR_ORIENTATION_INVERSE_DEGREES:
mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation));
break;
}
try {
mMediaRecorder.setOutputFile(getVideoFilePath());
mMediaRecorder.prepare();
Surface recorderSurface = mMediaRecorder.getSurface();
List<Surface> list = new ArrayList<>();
list.add(recorderSurface);
final CaptureRequest.Builder captureRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
captureRequest.addTarget(recorderSurface);
mCaptureRequest = captureRequest.build();
mCameraDevice.createCaptureSession(list, captureStateCallback, backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
堆栈跟踪
E/Legacy-CameraDevice-JNI:LegacyCameraDevice_nativeDetectSurfaceDimens:查询表面宽度时出错 没有这样的设备 (-19)。E/AndroidRuntime:致命异常:相机背景进程:me.wesferr.personalorganizer,PID:1987 java.lang.IllegalArgumentException:Surface 在 android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:89) 在 android .hardware.camera2.params.OutputConfiguration.(OutputConfiguration.java:260) 在 android.hardware.camera2.params.OutputConfiguration.(OutputConfiguration.java:145) 在 android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java :520) 在 me.wesferr.personalorganizer.CaptureVideoClass$1.onOpened(CaptureVideoClass.java:133) 在 android.hardware.camera2.impl.CameraDeviceImpl$1。
解决方案
推荐阅读
- django - 当我在 django 网站上提交表单时,为什么我的 apache2 服务器会暂时崩溃?
- html - 在 Dokuwiki 中实现连续的代码块
- java - 这个 Maven 原型列表来自哪里?
- java - 解压缩 Gzip JSON 响应:StreamCorruptedException:无效流标头:7B227061
- amazon-web-services - Windows cmd上的AWS配置问题
- c# - 标题中的特定占位符 ${...} 正在拆分
- xamarin - Core Image 人脸检测提供零个人脸 - xamarin.ios
- html - 为什么所有图像都没有出现在屏幕上,因为我想创建一个图像滑块?简而言之,为什么图像不会走出屏幕?
- mdriven - MDriven | 即使默认设置为 Modlr,Modlr 也会在 XML 编辑器中打开
- batch-file - 为什么 xcopy 使用批处理文件创建另一个新文件夹