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.

Cómo decodificar en una resolución más baja a través de un códec multimedia en Android. Por ejemplo, quiero decodificar un video de resolución 1920*1080 en una salida de 1280*720.

Cómo decodificar en una resolución más baja a través del códec multimedia en Android. Por ejemplo, quiero decodificar un video de resolución 19201080 en un formato de salida de 1280720 a través del códec multimedia. He intentado usar KEYMAXWIDTH y KEYMAXHEIGHT pero siempre se decodifica en la resolución original.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para decodificar un video en una resolución más baja a través de Media Codec en Android, es necesario seguir los siguientes pasos:

    1. Crear una instancia de MediaFormat y establecer el formato de salida deseado:
    MediaFormat outputFormat = MediaFormat.createVideoFormat(MIME_TYPE, 1280, 720);
    
    1. Establecer el ancho y alto máximo deseados utilizando KEY_MAX_WIDTH y KEY_MAX_HEIGHT:
    outputFormat.setInteger(MediaFormat.KEY_MAX_WIDTH, 1280);
    outputFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, 720);
    
    1. Crear una instancia de MediaCodec con el formato de entrada y el formato de salida:
    MediaCodec decoder = MediaCodec.createDecoderByType(MIME_TYPE);
    decoder.configure(inputFormat, outputFormat, null, 0);
    
    1. Iniciar el decodificador y procesar los datos de entrada:
    decoder.start();
    
    while (inputBufferIndex >= 0) {
        ByteBuffer inputBuffer = decoder.getInputBuffer(inputBufferIndex);
        // Rellenar inputBuffer con datos
        decoder.queueInputBuffer(inputBufferIndex, 0, sampleSize, timeUs, 0);
        inputBufferIndex = decoder.dequeueInputBuffer(CODEC_TIMEOUT);
    }
    
    
    1. Recuperar los fotogramas de salida y procesarlos:
    MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
    int outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, CODEC_TIMEOUT);
    
    while (outputBufferIndex >= 0) {
        ByteBuffer outputBuffer = decoder.getOutputBuffer(outputBufferIndex);
        // Procesar outputBuffer
        decoder.releaseOutputBuffer(outputBufferIndex, false);
        outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, CODEC_TIMEOUT);
    }
    

    Al establecer KEY_MAX_WIDTH y KEY_MAX_HEIGHT en el formato de salida, le estás indicando a Media Codec que decodifique el video en la resolución deseada. Si esto no funciona para ti, asegúrate de que el formato de entrada sea compatible con el formato de salida deseado. Si es necesario, también puedes experimentar con otras propiedades de Media Format para lograr el resultado deseado.

Comments are closed.