setOneShotPreviewCallback no golpea onPreviewFrame () en la devolución de llamada

Estoy creando una actividad de captura de video para una aplicación que estoy creando, y quiero capturar un cuadro de vista previa para usarlo como botón de reproducción. He puesto elSurfaceView arriba enonCreate(...) y conectó la pantalla de vista previa de la cámara en elSurfaceHolder.Callback:

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();
        }
    }
};

que funcionó bien para la aplicación de cámara estática. La vista previa de la cámara se activa y desactiva enonPause() yonResume():

@Override
protected void onResume() {
    super.onResume();
    if(mCamera!=null)
        mCamera.startPreview();
}

@Override
protected void onPause() {
    if(mCamera!=null)
        mCamera.stopPreview();
    super.onPause();
}

y he puesto elMediaRecorder de esta manera:

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();
}

Esa penúltima línea, sin embargo, no está funcionando. MiCamera.PreviewCallbackesonPreviewFrame(...) método se está perdiendo

El propósito de tenerlo es, como digo, obtener un fotograma desde el principio de cuando el video se está grabando para mostrarlo al usuario. ¿Por qué no se está golpeando la devolución de llamada?

Respuestas a la pregunta(1)

Su respuesta a la pregunta