1
我正在为我正在创建的应用程序创建视频捕获活动,并且我还想捕获预览框架以及用作回放按钮。我已经设置了SurfaceView
起来onCreate(...)
,并迷上了在SurfaceHolder.Callback
相机的预览显示:setOneShotPreviewCallback未在回调中触碰onPreviewFrame()
private Callback mSurfaceViewCallback = new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceCreated = false;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mSurfaceCreated = true;
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
try {
mSurfaceCreated = true;
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
这对于静态相机应用程序正常工作。相机预览在onPause()
和onResume()
开启和关闭:
@Override
protected void onResume() {
super.onResume();
if(mCamera!=null)
mCamera.startPreview();
}
@Override
protected void onPause() {
if(mCamera!=null)
mCamera.stopPreview();
super.onPause();
}
,我已经设置MediaRecorder
像这样:
protected void startRecording() {
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mMediaRecorder.setMaxDuration(10000);
mMediaRecorder.setOutputFile(new File(getFilesDir(), mChallengeUUID + ".mp4").getAbsolutePath());
mMediaRecorder.setPreviewDisplay(mHolder.getSurface());
try {
mMediaRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.setOneShotPreviewCallback(mPreviewCallback);
mMediaRecorder.start();
}
即倒数第二行,但是,不能正常工作。我的Camera.PreviewCallback
的onPreviewFrame(...)
方法正在错过。正如我所说,它的目的是从视频开始录制并显示给用户时获得一帧。为什么回拨不被触发?
这不适合我。如果我在mMediaManager.start之前调用mCamera.reconnect,则启动失败。如果我在开始后调用它,那么setOneShotPreviewCallback将被忽略。 – pstoppani 2014-06-02 16:00:04