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