es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar el códec de grabación de la cámara programáticamente en Android.

Estoy utilizando el siguiente código para grabar la cámara en Android. ¿Cómo puedo cambiar el códec predeterminado (el predeterminado es H264) aquí?

private Uri fileUri;
//...
private void recordVideo() {
    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
    // Establecer calidad de video
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // Iniciar la captura de video
    startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
}

// ...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {
        // Reproducir el video utilizando la variable global fileUri
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cambiar el códec predeterminado de H264 en el código proporcionado, es necesario agregar un parámetro adicional al configurar el intento. El parámetro que debemos usar es MediaStore.EXTRA_VIDEO_ENCODER, que nos permite establecer un codificador de video para el video capturado.

    Así es como se verá el código actualizado:

    private Uri fileUri;
    //...
    private void grabarVideo() {
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
        // configurar la calidad del video
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // establecer el archivo de imagen
    
        // establecer el codificador de video en MPEG_4_SP
        intent.putExtra(MediaStore.EXTRA_VIDEO_ENCODER, MediaRecorder.VideoEncoder.MPEG_4_SP);
    
        // iniciar el intento de captura de video
        startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
    }
    
    // ...
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {
            // reproducir el video dado el fileUri global 
        }
    }
    

    En el código actualizado, agregamos un parámetro adicional al Intent usando MediaStore.EXTRA_VIDEO_ENCODER y establecimos su valor en MediaRecorder.VideoEncoder.MPEG_4_SP. Esto cambiará el códec predeterminado de H264 a MPEG-4 SP para el video capturado.

Comments are closed.