截图:http: //imgur.com/r7EpSpx
关于 SurfaceView 和相机的操作,我有一个非常具体的问题。我使用 SurfaceView 作为 IntentService 中相机的预览表面(以允许后台操作)。
经过大量的试验和错误,我几乎可以让代码按预期工作。但是,当我使用 MediaRecorder 录制视频时,每当我恢复我的活动(因此重新创建 SurfaceView)时,视频都会极度失真/失真,看起来像是彩虹色,中间有一个大的黑色矩形。此外,视频效果似乎是“平铺”排列。如果仔细观察,摄像头仍在工作,视频录制正常,但 SurfaceView 预览已损坏。
通常,我会在 SurfaceView 回调的surfaceCreated 方法中重新实例化Camera 对象,但是每当我使用Camera.stopPreview() 或其他几个Camera 函数时,它都会导致我的MediaRecorder.stop() 无限期挂起(这是另一个单独的问题)。因此,当重新创建表面时,我必须在我的 IntentService 中使用相同的 Camera 对象。
除了这种奇怪的视频失真,甚至是 MediaRecorder 生成的视频,一切都正常工作。只有预览受到影响。我无法确定这是代码问题、软件问题、TouchWiz 问题还是硬件问题。它发生在所有方向配置中。将代码移动到 surfaceChanged 会产生同样的结果。提前感谢您对此的任何帮助或见解!
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (isRecording) //Only run this code if MediaRecorder is recording
try {
recordingCamera.setPreviewDisplay(rHolder); //This works, but causes the aforementioned distortion
//recordingCamera.startPreview(); //Removes distortion, but causes MediaRecorder.stop() to freeze app indefinitely
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//recordingCamera.stopPreview(); //Removes distortion, but causes MediaRecorder.stop() to freeze app indefinitely
}
在 Galaxy Note II 上运行 | 安卓 4.1.2 (TouchWiz)