Respuesta

6

Puede utilizar un MediaRecorder sin llamar a setAudio * en él. Esta es mi primera vez usando MediaRecorder, pero este ejemplo parece funcionar:

public class CamcorderView extends SurfaceView implements 
     SurfaceHolder.Callback { 

    private SurfaceHolder mHolder; 

    private Camera mCamera; 
    private MediaRecorder mRecorder; 

    public CamcorderView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     mHolder = getHolder(); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     mHolder.addCallback(this); 

     mCamera = Camera.open(); 
     mRecorder = new MediaRecorder(); 

    } 

    public void stop() { 
     mRecorder.stop(); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     mCamera.unlock(); 
     mRecorder.setCamera(mCamera); 

     mRecorder.setPreviewDisplay(mHolder.getSurface()); 

     // You may want to change these 
     mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 

     // You'll definitely want to change this 
     mRecorder.setOutputFile("/mnt/sdcard/out"); 

     try { 
      mRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.e("IllegalStateException", e.toString()); 
     } catch (IOException e) { 
      Log.e("IOException", e.toString()); 
     } 
     mRecorder.start(); 

    } 
} 

También puede llamar a:

  • setVideoSize(int, int);
  • setVideoFrameRate(int);
+1

¡Gracias! ¡Realmente funciona! ¿Quizás sabes cómo aplicar esta configuración con CamcorderProfile? Como estoy usando parámetros generados automáticamente como 'camcorderProfile = CamcorderProfile.get (CamcorderProfile.QUALITY_HIGH);', todas las configuraciones se aplican como 'mediaRecorder.setProfile (camcorderProfile); ' – Sergii

+0

puede proporcionar más información porque no funciona correctamente. –

9

Puede preparar MediaRecorder copiando los campos requeridos del perfil incorporado (Perfil de videocámara). Solo deja la configuración de audio y deberías estar listo para continuar. Edite el código a continuación para sus necesidades, el paso 3 es la parte esencial aquí.

private boolean prepareVideoRecorder() { 

    mCamera = getCameraInstance(); 
    mMediaRecorder = new MediaRecorder(); 

    // store the quality profile required 
    CamcorderProfile profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_HIGH); 

    // Step 1: Unlock and set camera to MediaRecorder 
    mCamera.unlock(); 
    mMediaRecorder.setCamera(mCamera); 

    // Step 2: Set sources 
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    // Step 3: Set all values contained in profile except audio settings 
    mMediaRecorder.setOutputFormat(profile.fileFormat); 
    mMediaRecorder.setVideoEncoder(profile.videoCodec); 
    mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); 
    mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); 
    mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); 

    // Step 4: Set output file 
    mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); 

    // Step 5: Set the preview output 
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); 

    // Step 6: Prepare configured MediaRecorder 
    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 
} 
+0

funciona bien ... gracias –

+0

buena solución ...... es muy útil para mí ..... – jack

Cuestiones relacionadas