Saltar a contenido

Codificadores H264

Video Capture SDK .Net Video Edit SDK .Net Media Blocks SDK .Net

VideoCaptureCoreX VideoEditCoreX MediaBlocksPipeline

Este documento proporciona información detallada sobre los codificadores H264 disponibles, sus características, opciones de control de tasa y ejemplos de uso.

Para motores solo Windows consulte la página de salida MP4.

Descripción general

Los siguientes codificadores H264 están disponibles:

  1. Codificador AMD AMF H264 (acelerado por GPU)
  2. Codificador NVIDIA NVENC H264 (acelerado por GPU)
  3. Codificador Intel QSV H264 (acelerado por GPU)
  4. Codificador OpenH264 (Software)
  5. Codificador Apple Media H264 (acelerado por hardware para dispositivos Apple)
  6. Codificador VAAPI H264 (aceleración de hardware en Linux)
  7. Codificador Android Hardware H264 (MediaCodec, selecciona automáticamente el mejor codificador del SoC)

Codificador AMD AMF H264

El Advanced Media Framework (AMF) de AMD proporciona codificación acelerada por hardware en GPUs AMD.

Características principales

  • Codificación acelerada por hardware
  • Múltiples opciones de preajuste (Equilibrado, Velocidad, Calidad)
  • Tamaño GOP configurable
  • Soporte de codificación de entropía CABAC
  • Varios métodos de control de tasa

Opciones de control de tasa

public enum AMFH264EncoderRateControl
{
    Default = -1,     // Predeterminado, depende del uso
    CQP = 0,         // QP constante
    CBR = 1,         // Tasa de bits constante
    VBR = 2,         // VBR restringido por pico
    LCVBR = 3        // VBR restringido por latencia
}

Ejemplo de uso

var settings = new AMFH264EncoderSettings
{
    Bitrate = 5000,              // 5 Mbps
    CABAC = true,
    RateControl = AMFH264EncoderRateControl.CBR,
    Preset = AMFH264EncoderPreset.Quality,
    Profile = AMFH264EncoderProfile.Main,
    Level = AMFH264EncoderLevel.Level4_2,
    GOPSize = 30
};

var encoder = new H264EncoderBlock(settings);

Codificador NVIDIA NVENC H264

El codificador de video basado en hardware de NVIDIA proporciona codificación H264 eficiente en GPUs NVIDIA.

Características principales

  • Codificación acelerada por hardware
  • Soporte de cuadros B
  • Cuantización adaptativa
  • Múltiples cuadros de referencia
  • Predicción ponderada
  • Soporte de look-ahead

Opciones de control de tasa

Heredado de NVENCBaseEncoderSettings con opciones adicionales específicas de H264:

  • Tasa de bits constante (CBR)
  • Tasa de bits variable (VBR)
  • QP constante (CQP)
  • VBR basado en calidad

Ejemplo de uso

var settings = new NVENCH264EncoderSettings
{
    Bitrate = 5000,
    MaxBitrate = 8000,
    RCLookahead = 20,
    BFrames = 2,
    Profile = NVENCH264Profile.High,
    Level = NVENCH264Level.Level4_2,
    TemporalAQ = true
};

var encoder = new H264EncoderBlock(settings);

Codificador Intel Quick Sync Video (QSV) H264

El codificador de video basado en hardware de Intel disponible en procesadores Intel con gráficos integrados.

Características principales

  • Codificación acelerada por hardware
  • Modo de baja latencia
  • Múltiples métodos de control de tasa
  • Soporte de cuadros B
  • Opciones de control de tasa inteligente

Opciones de control de tasa

public enum QSVH264EncRateControl
{
    CBR = 1,         // Tasa de bits constante
    VBR = 2,         // Tasa de bits variable
    CQP = 3,         // Cuantizador constante
    AVBR = 4,        // Tasa de bits variable promedio
    LA_VBR = 8,      // VBR con Look Ahead
    ICQ = 9,         // CQP inteligente
    VCM = 10,        // Modo de videoconferencia
    LA_ICQ = 11,     // ICQ con Look Ahead
    LA_HRD = 13,     // LA compatible con HRD
    QVBR = 14        // VBR definido por calidad
}

Ejemplo de uso

var settings = new QSVH264EncoderSettings
{
    Bitrate = 5000,
    MaxBitrate = 8000,
    RateControl = QSVH264EncRateControl.VBR,
    Profile = QSVH264EncProfile.High,
    Level = QSVH264EncLevel.Level4_2,
    LowLatency = true,
    BFrames = 2
};

var encoder = new H264EncoderBlock(settings);

Codificador OpenH264

El codificador H264 de software de código abierto de Cisco.

Características principales

  • Codificación basada en software
  • Múltiples niveles de complejidad
  • Detección de cambio de escena
  • Cuantización adaptativa
  • Soporte de reducción de ruido

Opciones de control de tasa

public enum OpenH264RCMode
{
    Quality = 0,     // Modo de calidad
    Bitrate = 1,     // Modo de tasa de bits
    Buffer = 2,      // Basado en buffer
    Off = -1         // Control de tasa desactivado
}

Ejemplo de uso

var settings = new OpenH264EncoderSettings
{
    Bitrate = 5000,
    RateControl = OpenH264RCMode.Bitrate,
    Profile = OpenH264Profile.Main,
    Level = OpenH264Level.Level4_2,
    Complexity = OpenH264Complexity.Medium,
    EnableDenoise = true,
    SceneChangeDetection = true
};

var encoder = new H264EncoderBlock(settings);

Codificador Apple Media H264

Codificador acelerado por hardware para plataformas Apple.

Características principales

  • Aceleración de hardware en dispositivos Apple
  • Soporte de codificación en tiempo real
  • Opciones de reordenamiento de cuadros
  • Codificación basada en calidad

Ejemplo de uso

var settings = new AppleMediaH264EncoderSettings
{
    Bitrate = 5000,
    AllowFrameReordering = true,
    Quality = 0.8,
    Realtime = true
};

var encoder = new H264EncoderBlock(settings);

Codificador VAAPI H264

Codificador de API de aceleración de video para sistemas Linux.

Características principales

  • Aceleración de hardware en Linux
  • Soporte de múltiples perfiles
  • Cuantización trellis
  • Soporte de cuadros B
  • Varios métodos de control de tasa

Opciones de control de tasa

public enum VAAPIH264RateControl
{
    CQP = 1,                 // QP constante
    CBR = 2,                 // Tasa de bits constante
    VBR = 4,                 // Tasa de bits variable
    VBRConstrained = 5,      // VBR restringido
    ICQ = 7,                 // CQP inteligente
    QVBR = 8                 // VBR definido por calidad
}

Ejemplo de uso

var settings = new VAAPIH264EncoderSettings
{
    Bitrate = 5000,
    RateControl = VAAPIH264RateControl.CBR,
    Profile = VAAPIH264EncoderProfile.Main,
    MaxBFrames = 2,
    Trellis = true,
    CABAC = true
};

var encoder = new H264EncoderBlock(settings);

Codificador Android Hardware H264

En Android (API 21+), usa AndroidH264EncoderSettings. Envuelve la API MediaCodec de Android mediante la familia de elementos amcvidenc-* de GStreamer, auto-detectando el mejor codificador de hardware en el dispositivo (Qualcomm, Exynos, MediaTek, etc.) — una sola clase de settings cubre todos los SoC de Android.

Uso de ejemplo

// Build es solo Android (este tipo está condicionado por el preprocesador __ANDROID__).
var settings = new AndroidH264EncoderSettings
{
    Bitrate = 8_000,                           // kbit/s (así 8000 = 8 Mbps)
    IFrameInterval = TimeSpan.FromSeconds(2),  // Cadencia de keyframes
    ParseStream = true,                        // Deja en true a menos que envíes frames crudos a SRT
};

// Opcional: fija un elemento codificador específico, evitando la auto-detección.
// settings.CodecName = "amcvidenc-c2qtiavcencoder";  // ruta Codec2 de Qualcomm, por ejemplo

var encoder = new H264EncoderBlock(settings);

Características clave

  • Una sola clase de settings para todos los SoC Android — nada por-vendor
  • Bitrate en kbit/s (el elemento GStreamer recibe bits/seg internamente)
  • IFrameInterval es un TimeSpan — en Android 25+ funcionan segundos fraccionarios (i-frame-interval-float); versiones anteriores truncan a segundos enteros
  • CodecName anula la auto-detección cuando sabes qué elemento amcvidenc-* quieres

Diccionario de propiedades

Solo CustomH264EncoderSettings y AndroidH264EncoderSettings exponen un diccionario Properties para reenviar propiedades brutas del elemento GStreamer que no tienen wrappers C# de primera clase. Las implementaciones estándar (OpenH264, NVENCH264, QSVH264, AMFH264, AppleMediaH264, VAAPIH264) no lo hacen — sus parámetros están expuestos como propiedades C# tipadas en la clase de settings.

// Solo en settings Custom o Android
var settings = new CustomH264EncoderSettings("x264enc");
settings.Properties["bitrate-mode"] = "constant";
settings.Properties["complexity"] = "max";

Mejores prácticas

  1. Selección de codificador
  2. Use codificadores de hardware (AMD, NVIDIA, Intel) cuando estén disponibles para mejor rendimiento
  3. Recurra a OpenH264 cuando la codificación de hardware no esté disponible
  4. Use codificadores específicos de plataforma (Apple Media, VAAPI, Android hardware) al dirigirse a plataformas específicas

  5. Selección de control de tasa

  6. Use CBR para aplicaciones de streaming donde la tasa de bits consistente es importante
  7. Use VBR para codificación sin conexión donde la calidad es más importante que la consistencia de tasa de bits
  8. Use CQP para máxima calidad cuando la tasa de bits no es una preocupación
  9. Considere usar opciones de look-ahead para mejor calidad cuando la latencia no es crítica

  10. Optimización de rendimiento

  11. Ajuste el tamaño GOP basándose en el tipo de contenido (menor para alto movimiento, mayor para contenido estático)
  12. Habilite CABAC para mejor eficiencia de compresión cuando la latencia no es crítica
  13. Use perfil y nivel apropiados para dispositivos objetivo
  14. Considere cuadros B para mejor compresión pero tenga en cuenta el impacto en latencia

  15. Detección de plataforma — use el IsAvailable() estático en cada clase de settings para escoger un codificador concreto en tiempo de ejecución:

if (NVENCH264EncoderSettings.IsAvailable())
{
    encoder = new H264EncoderBlock(new NVENCH264EncoderSettings { Bitrate = 6_000 });
}
else if (QSVH264EncoderSettings.IsAvailable())
{
    encoder = new H264EncoderBlock(new QSVH264EncoderSettings { Bitrate = 6_000 });
}
else if (AMFH264EncoderSettings.IsAvailable())
{
    encoder = new H264EncoderBlock(new AMFH264EncoderSettings { Bitrate = 6_000 });
}
else
{
    // Fallback por software
    encoder = new H264EncoderBlock(new OpenH264EncoderSettings { Bitrate = 6_000 });
}