Decodificación en aplicaciones móviles: qué es, conceptos básicos y principio de funcionamiento

Autor: IT Sectr Publicado: 2026-05-25 Tiempo de lectura: 10 min

La decodificación es el proceso de convertir un flujo multimedia comprimido en un formato no comprimido adecuado para la salida a la pantalla y los altavoces. En los dispositivos móviles, la decodificación se realiza mediante software a través de la CPU o mediante hardware a través de bloques especializados de GPU y DSP. Según MDN Web Docs (2026), los códecs modernos comprimen el flujo entre 100 y 500 veces, y la decodificación restaura la calidad original sin pérdidas cuando se selecciona el perfil de compresión correcto.

Puntos clave

  • Decodificación — conversión de medios comprimidos a formato PCM no comprimido para su salida en dispositivos
  • Los códecs H.264, H.265, VP9 y AV1 utilizan diferentes algoritmos de compresión y perfiles de calidad
  • La decodificación por hardware se realiza en GPU/DSP y consume de 3 a 5 veces menos energía que la de software
  • La decodificación por software mediante FFmpeg garantiza compatibilidad con cualquier formato a costa de la carga de la CPU
  • La elección del decodificador afecta el tiempo de reproducción, el calentamiento del dispositivo y la autonomía

¿Qué es la decodificación?

La decodificación es el proceso de convertir datos digitales comprimidos de nuevo a su formato original no comprimido. En el contexto multimedia, la decodificación restaura los fotogramas de video a partir de un flujo de bits comprimido creado por un codificador. Sin decodificación, los usuarios no pueden ver video ni escuchar audio, ya que todos los formatos multimedia modernos utilizan compresión para ahorrar ancho de banda y espacio en disco.

Un flujo de video típico en formato H.264 a 5 Mbps ocupa 100 veces menos espacio que un flujo RGB no comprimido con la misma resolución. El algoritmo de decodificación debe restaurar cada fotograma a su resolución y espacio de color originales, siguiendo la especificación del códec en orden inverso al de codificación. Para ello, el decodificador procesa datos intracuadro (fotograma I) e intercuadro (fotogramas P y B).

En los dispositivos móviles, la decodificación puede ocurrir tanto en la CPU como en bloques de hardware dedicados. Los SoC modernos de Apple (serie A), Qualcomm (Snapdragon) y MediaTek (Dimensity) contienen decodificadores integrados para todos los formatos populares. El procesador de video se encarga del trabajo pesado de la transformada inversa de coseno discreta y la compensación de movimiento, liberando la CPU para otras tareas.

¿Cómo funciona la decodificación?

El proceso de decodificación consta de varias etapas secuenciales que invierten los pasos de codificación. Primero, se extraen del flujo de bits los encabezados y parámetros de compresión: perfil, nivel, resolución, espacio de color. Luego, el decodificador procesa secuencialmente los macrobloques comprimidos, aplicándoles transformaciones inversas.

Etapas de la decodificación de un flujo de video

La primera etapa es la extracción del código de entropía. La decodificación de entropía utiliza algoritmos CABAC o CAVLC para restaurar los coeficientes de la transformada de coseno discreta. Esta etapa no depende de la resolución del video: procesa un flujo de bits, no de píxeles, y su complejidad está determinada por la tasa de bits, no por las dimensiones del fotograma.

La segunda etapa es la cuantificación inversa y la DCT inversa. El decodificador multiplica los coeficientes cuantificados por el paso de cuantificación, restaurando los valores aproximados de los coeficientes DCT, y luego aplica la transformada DCT inversa. La DCT inversa restaura los datos espaciales desde el dominio de la frecuencia, formando un macrobloque de píxeles. La transformada se realiza de forma independiente para la crominancia y la luminancia.

La tercera etapa es la compensación de movimiento. Para los fotogramas P y B, el decodificador utiliza vectores de movimiento extraídos del flujo de bits y hace referencia a fotogramas de referencia previamente decodificados. La compensación de movimiento crea un predictor para el macrobloque actual, al que se añade la señal residual después de la DCT inversa. El resultado es un fotograma completamente restaurado listo para su salida.

cpp
// Pseudocódigo básico de decodificación de fotogramas de video
struct DecodedFrame {
    uint8_t* y_plane;
    uint8_t* u_plane;
    uint8_t* v_plane;
    int width, height;
};

class Decoder {
public:
    bool decodeNALUnit(const uint8_t* nalUnit, size_t size) {
        if (!parseNALUHeader(nalUnit, size))
            return false;
        
        int sliceType = parseSliceType(nalUnit);
        entropyDecode(nalUnit);
        inverseQuantize();
        inverseDCT();
        
        if (sliceType != I_SLICE)
            motionCompensation();
        
        return true;
    }
};

En el ejemplo anterior se muestra la estructura básica de un decodificador H.264. La función decodeNALUnit recibe una unidad NAL, el bloque básico del flujo comprimido H.264. El decodificador analiza secuencialmente el encabezado, extrae el tipo de slice, aplica decodificación de entropía, cuantificación inversa y DCT inversa. Para los slices P y B, se realiza adicionalmente la compensación de movimiento utilizando fotogramas de referencia del búfer DPB.

Formatos de compresión y códecs

Los códecs de video modernos difieren en algoritmos de compresión, eficiencia y requisitos de recursos computacionales. La elección del formato afecta directamente el tamaño del archivo, la calidad de la imagen y el consumo de energía durante la decodificación en un dispositivo móvil.

CódecAñoCompresiónSoporte de hardware
H.26420031:100Todos los SoC modernos
H.26520131:200Apple A8+, Snapdragon 805+
VP920131:180Snapdragon 820+, Exynos
AV120181:300Apple A17+, Snapdragon 8 Gen 2+

H.264 es el códec de video más extendido, compatible con todos los dispositivos móviles. Su principal ventaja es la universalidad: cualquier smartphone Android y iPhone puede decodificar H.264 por hardware. Sin embargo, con la misma tasa de bits, H.264 pierde calidad frente a códecs más modernos como H.265 y AV1, requiriendo entre un 30 y un 50 % más de tasa de bits para una calidad visual similar.

H.265 proporciona el doble de compresión en comparación con H.264 con la misma calidad. La decodificación H.265 requiere un bloque de hardware más potente: VideoToolbox en iOS admite H.265 a partir del iPhone 6 (A8), y los dispositivos Android a partir de Snapdragon 805. Al elegir H.265 para una aplicación móvil, hay que tener en cuenta que los dispositivos antiguos pueden no tener soporte de hardware y decodificarán este formato por software, lo que aumenta drásticamente el consumo de energía.

AV1 es un códec abierto de Alliance for Open Media que ofrece la mejor compresión entre todos los formatos modernos. AV1 es un 30 % más eficiente que H.265 y un 50 % más eficiente que H.264 con la misma calidad visual. La decodificación AV1 por hardware apareció solo en los SoC a partir de 2023: Apple A17 Pro, Qualcomm Snapdragon 8 Gen 2 y posteriores. Para dispositivos más antiguos, la decodificación AV1 solo es posible por software mediante la biblioteca dav1d, lo que crea una carga significativa en la CPU.

Decodificación por software vs hardware

La elección entre decodificación por software y hardware es una decisión arquitectónica clave al desarrollar un reproductor multimedia móvil. Cada enfoque tiene sus ventajas y limitaciones que deben considerarse al diseñar la aplicación.

Rendimiento y consumo de energía

La decodificación por hardware se realiza en bloques especializados de procesamiento de video que consumen significativamente menos energía que la CPU al realizar la misma tarea. Según Qualcomm, un decodificador H.265 por hardware consume de 5 a 10 veces menos energía que la decodificación por software en una CPU Snapdragon 8 Gen 1 al reproducir video 4K. Esto es crítico para dispositivos móviles, donde cada milivatio afecta la duración de la batería.

La decodificación por software, por otro lado, ofrece la máxima flexibilidad. FFmpeg con la biblioteca libavcodec admite docenas de códecs y contenedores, incluidos formatos raros y obsoletos que carecen de soporte de hardware. El desarrollador puede modificar el proceso de decodificación, añadir posprocesamiento y filtros sobre la marcha, algo imposible cuando se utilizan bloques de hardware cerrados.

Cuándo elegir la decodificación por software

La decodificación por software se justifica en varios escenarios: al reproducir formatos raros (ProRes, DNxHD, Motion JPEG), cuando se requiere un control preciso sobre cada etapa del procesamiento del fotograma, y al decodificar AV1 en dispositivos sin soporte de hardware. libavcodec de FFmpeg puede decodificar prácticamente cualquier formato conocido, lo que lo convierte en el estándar de facto para reproductores multimedia universales.

La limitación de la decodificación por software es la disipación de calor. La decodificación continua de video 4K en la CPU puede calentar el dispositivo a 45–50 grados en 10–15 minutos, lo que provoca estrangulamiento térmico y reducción de la tasa de fotogramas. En dispositivos sin refrigeración activa (tabletas, teléfonos), esto es especialmente notable. El consumo de energía de la CPU durante la decodificación por software puede alcanzar 3–5 W frente a 0,3–0,5 W durante la decodificación por hardware del mismo flujo.

Cuándo elegir la decodificación por hardware

La decodificación por hardware es la opción predeterminada para cualquier reproductor multimedia de producción. Proporciona 60 fotogramas por segundo estables para video 4K con un consumo de energía mínimo. VideoToolbox en iOS y MediaCodec en Android proporcionan API nativas para la decodificación por hardware que seleccionan automáticamente el bloque de procesamiento óptimo según el códec y la resolución.

Las API de plataforma gestionan los búferes de fotogramas (surface pool en Android, CVPixelBufferPool en iOS), la sincronización con la pantalla y la optimización de la memoria. El desarrollador solo necesita abrir un decodificador con los parámetros requeridos y recibir los fotogramas listos. La decodificación por hardware admite un proceso de extremo a extremo con baja latencia: desde la recepción del flujo de bits hasta la visualización en pantalla pasan 5–15 ms frente a 30–80 ms en la decodificación por software.

Ejemplos de código de decodificación

Veamos una implementación práctica de la decodificación en ambas plataformas móviles. En iOS, la decodificación por hardware se realiza a través de VideoToolbox, y la de software a través de FFmpeg. En Android, se utiliza MediaCodec para la decodificación por hardware.

Decodificación por hardware en iOS con VideoToolbox

objective-c
@interface VideoDecoder ()
@property (nonatomic) VTDecompressionSessionRef session;
@end

@implementation VideoDecoder

- (void)setupDecoder {
    CMVideoFormatDescriptionRef formatDesc;
    CMVideoCodecType codecType = kCMVideoCodecType_H264;
    
    OSStatus status = CMVideoFormatDescriptionCreate(
        NULL, codecType, 1920, 1080, NULL, &formatDesc
    );
    
    VTDecompressionOutputCallbackRecord callback;
    callback.decompressionOutputCallback = &decodingCallback;
    
    VTDecompressionSessionCreate(NULL, formatDesc, NULL,
        NULL, &callback, &_session);
}

- (void)decodeFrame: (uint8_t*)nalData length:(size_t)size {
    CMBlockBufferRef blockBuffer;
    CMBlockBufferCreateWithMemoryBlock(NULL, nalData,
        size, NULL, NULL, 0, size, 0, &blockBuffer);
    
    CMSampleBufferRef sampleBuffer;
    CMSampleBufferCreate(NULL, blockBuffer, true, NULL,
        NULL, NULL, 1, 0, NULL, 0, NULL, &sampleBuffer);
    
    VTDecompressionSessionDecodeFrame(_session,
        sampleBuffer, 0, NULL, 0);
}

@end

El código muestra la inicialización de un decodificador H.264 por hardware en iOS. VTDecompressionSessionCreate crea una sesión de decodificación, y VTCreate llama a un callback cuando aparece un fotograma listo. La sesión utiliza automáticamente el bloque de hardware si está disponible para el códec especificado. Para obtener fotogramas decodificados en formato CVPixelBuffer, se utiliza un callback que pasa cada fotograma listo con un retardo mínimo.

Decodificación por hardware en Android con MediaCodec

java
MediaCodec decoder = MediaCodec.createDecoderByType("video/avc");
MediaFormat format = MediaFormat.createVideoFormat(
    "video/avc", 1920, 1080
);
format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);

decoder.configure(format, surface, null, 0);
decoder.start();

ByteBuffer[] inputBuffers = decoder.getInputBuffers();
int inputIndex = decoder.dequeueInputBuffer(10000);

if (inputIndex >= 0) {
    ByteBuffer buffer = inputBuffers[inputIndex];
    buffer.clear();
    buffer.put(nalData);
    decoder.queueInputBuffer(inputIndex, 0, nalData.length, pts, 0);
}

En Android, MediaCodec utiliza una Surface para la salida en lugar de un búfer de píxeles, lo que minimiza la copia de datos entre la GPU y la CPU. El decodificador selecciona automáticamente el bloque de hardware (componente OMX) según el tipo de códec. Para H.264, se utiliza OMX.google.h264.decoder, que puede ser tanto de hardware como de software dependiendo de la implementación del fabricante.

Cómo elegir un decodificador para una aplicación móvil

La elección de la estrategia de decodificación depende del público objetivo de la aplicación, los formatos compatibles y los requisitos de rendimiento. La solución óptima suele incluir un enfoque híbrido: decodificación por hardware para formatos principales (H.264, H.265) con una alternativa por software para códecs raros.

Estrategia de selección por prioridades

Si la aplicación está orientada a la máxima compatibilidad, utilice H.264, que se decodifica por hardware garantizadamente en cualquier dispositivo. Para servicios de transmisión de video, H.265 con soporte de hardware en dispositivos posteriores a 2016 está justificado. AV1 es la opción para servicios donde el ahorro de ancho de banda es importante: YouTube, Netflix y otras grandes plataformas están adoptando activamente AV1 para reducir los costos de CDN manteniendo la calidad.

Un parámetro crítico es el tamaño del búfer del decodificador. Los decodificadores de hardware tienen un grupo de búferes fijo (normalmente de 4 a 16 fotogramas). Al reproducir un flujo de alta tasa de bits, los búferes pueden desbordarse, lo que provoca la pérdida de fotogramas. MediaCodec proporciona el método getOutputFrameRate para determinar el rendimiento real del decodificador en un dispositivo específico, mientras que VideoToolbox permite controlar la prioridad en tiempo real mediante kVTDecodeFrame_EnableAsynchronousDecompression.

El estrangulamiento térmico es otro factor. Incluso la decodificación por hardware puede calentar el dispositivo durante la reproducción prolongada de video 4K HDR. Se recomienda monitorear la temperatura a través de ProcessInfo en iOS y BatteryManager en Android, reduciendo la calidad o la resolución del flujo en caso de sobrecalentamiento. Esto es especialmente crítico para juegos y aplicaciones de transmisión con sesiones de visualización prolongadas.

Preguntas frecuentes

¿En qué se diferencia la decodificación de la codificación?

La codificación convierte datos no comprimidos en un formato comprimido, mientras que la decodificación restaura los datos originales a partir del flujo comprimido. Estos procesos son inversos entre sí y utilizan los mismos algoritmos: DCT, cuantificación, compensación de movimiento. Un codificador realiza la transformación directa, un decodificador realiza la inversa.

¿Qué códec es mejor para una aplicación móvil?

Para máxima compatibilidad — H.264, ya que se decodifica por hardware en el 100 % de los dispositivos modernos. Para mejor compresión — H.265 o AV1. La elección depende de la audiencia: si el 80 % de los usuarios tienen dispositivos de 2021+, H.265 proporcionará mejor calidad con menor tasa de bits. AV1 está justificado para dispositivos emblemáticos con soporte de hardware a partir de 2023+.

¿Por qué la decodificación por hardware es más rápida que la de software?

Un decodificador de hardware es un microchip especializado (ASIC) diseñado exclusivamente para la decodificación. A diferencia de la CPU, que realiza la decodificación con instrucciones secuenciales, el bloque de hardware procesa los macrobloques en paralelo. El consumo de energía de un decodificador de hardware es de 5 a 10 veces menor porque el chip funciona a una frecuencia más baja y no tiene etapas de proceso innecesarias.

¿Qué son el perfil y el nivel en H.264?

Un perfil define el conjunto de algoritmos de compresión utilizados por el codificador: Baseline, Main, High. Un nivel establece los parámetros máximos del flujo: resolución, tasa de bits, tamaño del búfer. Para dispositivos móviles, se recomienda el perfil High y el nivel 4.1–5.2 — esto es suficiente para video 1080p–4K con decodificación por hardware.

¿Cómo verificar la compatibilidad de códecs en un dispositivo?

En Android, use MediaCodecList para obtener una lista de códecs disponibles y verificar cuál es de hardware. En iOS, verifique la compatibilidad mediante CMVideoFormatDescription con el códec especificado — si VTDecompressionSessionCreate tiene éxito, el códec es compatible. Para AV1 en Android, verifique la presencia del códec OMX.google.aomc.decoder o su versión de hardware.

Resumen

  • Decodificación — proceso inverso a la codificación: a partir de un flujo de bits comprimido se restaura el fotograma de video original no comprimido
  • La decodificación por hardware se ejecuta en bloques GPU/DSP, consume de 5 a 10 veces menos energía, pero está limitada a los formatos compatibles
  • La decodificación por software mediante FFmpeg/libavcodec garantiza compatibilidad con cualquier códec, pero carga la CPU y provoca calentamiento
  • H.264 — códec universal con soporte de hardware en todos los dispositivos, óptimo para máxima compatibilidad
  • H.265 proporciona el doble de compresión, compatible por hardware en dispositivos posteriores a 2016
  • AV1 — el códec más eficiente con soporte de hardware en dispositivos emblemáticos a partir de 2023+ y por software mediante dav1d en dispositivos antiguos
  • Elija una estrategia híbrida: decodificación por hardware para formatos principales con alternativa por software para códecs raros

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también