我正在编写一个支持保存RAW / JPEG并同时录制视频的Android应用。创建public IMvxCommand RefreshCommand
{
get
{
return new MvxCommand(async () => {
// This simulates some refresh work which takes 3 seconds
await Task.Delay(3000);
IsRefreshing = false;
});
}
}
时,我尝试传递4个曲面:预览,CameraCaptureSession
创建的2x ImageSaver
和1x PersistentInputSurface
。通过使用持久性输入表面,我打算避免两次捕获之间的停顿。
创建会话时,失败并显示:
MediaCodec#createPersistentInputSurface
我尝试取出所有其他表面,仅留下W/CameraDevice-JV-0: Stream configuration failed due to: endConfigure:380: Camera 0: Unsupported set of inputs/outputs provided
Session 0: Failed to create capture session; configuration failed
,仍然失败。
PersistentInputSurface
@Override
public void onResume() {
super.onResume();
//Some other setups...
if (persistentRecorderSurface == null) {
persistentRecorderSurface = MediaCodec.createPersistentInputSurface();
}
startBackgroundThread();
startCamera();
if (mPreviewView.isAvailable()) {
configureTransform(mPreviewView.getWidth(), mPreviewView.getHeight());
} else {
mPreviewView.setSurfaceTextureListener(mSurfaceTextureListener);
}
if (mOrientationListener != null && mOrientationListener.canDetectOrientation()) {
mOrientationListener.enable();
}
}
答案 0 :(得分:1)
最好在该错误行之前查看系统日志行,这很有帮助,但很可能是这样:
在创建相机捕获会话之前,您实际上需要将persistentRecorderSurface绑定到MediaRecorder或MediaCodec,并在其上调用prepare()。
否则,持久曲面的另一端实际上没有任何东西,并且相机无法告知需要什么分辨率或其他设置。
还请记住,取决于相机支持的硬件级别和功能,相机可以同时输出的数量是有限的。不幸的是,当前并不需要设备必须支持您的输出组合(预览,记录,JPEG,RAW),因此很可能很多或所有设备仍然会给您带来错误。