2011-08-12 6 views
17

Camera.PreviewCallback実装を使用する場合、カメラの初期化とプレビュー(Camera.startPrevew())の開始後にonPreviewFrameが問題なく呼び出されます。問題は、MediaRecorder onPreviewFrameを使用してビデオ録画を行うと、それ以上呼び出されないということです。Camera onPreviewFrameが呼び出されていない

私は、MediaRecorderを使用してビデオを録画するときにCamera.PreviewCallbackを停止するが、なぜそれを再起動できないことを理解していますか?

私はカメラプレビューコールバック(setPreviewCallback(コールバック))をリセットしてstartPreviewを再起動しようとしましたが、プレビューがある間にonPreviewFrameの呼び出しはありません。

答えて

4

public void surfaceCreated(SurfaceHolder holder) { 
     // if (mediaRecorder == null) { 
     try { 
      camera = Camera.open(); 
      camera.setPreviewCallback(new PreviewCallback() { 
       public void onPreviewFrame(byte[] _data, Camera _camera) { 
       } 
      } 
     } 
} 
1

の下にあなたがビデオや写真が撮影された後、再びstartPreview()を呼び出す必要があるようにあなたは、)インターフェース(previewCallBacksの新しいインスタンス化の中でそれを呼び出す必要があります。

12

surfaceCreatedだけでなく、surfaceChangedメソッドでsetPreviewCallbackを呼び出す必要があります。

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
if (mHolder.getSurface() == null){ 
    return; 
} 

try { 
    mCamera.stopPreview(); 
} catch (Exception e){ 
    // ignore: tried to stop a non-existent preview 
} 

try { 
    mCamera.setPreviewCallback(this); 
    mCamera.setPreviewDisplay(mHolder); 
    mCamera.startPreview(); 

} catch (Exception e){ 
    Log.d(TAG, "Error starting camera preview: " + e.getMessage()); 
} 
} 
+0

ありがとう、これは私のために働いた! – Austin

7

私にも同様の問題がありました。私が発見した何

setOneShotPreviewCallback not hitting onPreviewFrame() in callback

を参照してMediaRecorderを準備するためにCamera#unlock()を呼び出した後、プレビューコールバックを設定する前にCamera#reconnect()をコールする必要があったということでした。これは、Camera.unlock()がカメラをプロセスから切り離して、MediaRecorderに接続できるようにするためです。私の調査で

http://developer.android.com/reference/android/hardware/Camera.html#unlock()

私はまた、あなたがワンショット法以外の方法を使用して、任意のプレビューコールバックを設定した場合、あなたにもCamera#reconnect()を呼び出した後、これらの全てをリセットする必要があることを発見。したがって、簡単に:

mCamera.unlock(); 
//set up MediaRecorder 
mCamera.reconnect(); 
mCamera.setPreviewCallback(mCallback); 
//or whatever callback method you want to use 
//and even if you've set this callback already 

私は助けてくれることを望みます!

+0

これは私の問題を解決しました。私は 'reconnect()'の代わりに 'lock()'を呼び出していました。 –

関連する問題