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. Varios codificadores basados en OMX (específicos de plataforma)

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);

Guía de codificadores OpenMAX (OMX) H264

OpenMAX (OMX) es una API multiplataforma libre de regalías que proporciona portabilidad integral de códecs de medios en streaming y aplicaciones al permitir que los componentes multimedia acelerados se desarrollen, integren y accedan programáticamente a través de múltiples sistemas operativos y plataformas de silicio.

Codificador OMX Google H264

Esta es una implementación básica dirigida principalmente a plataformas Android.

var settings = new OMXGoogleH264EncoderSettings();
// Configurar a través del diccionario Properties
settings.Properties["some_key"] = "value";
settings.ParseStream = true; // Habilitar análisis de flujo (deshabilitar para SRT)

Características clave:

  • Implementación genérica
  • Adecuado para la mayoría de dispositivos Android
  • Configurable a través de diccionario de propiedades
  • Exposición mínima de parámetros directos para máxima compatibilidad

Codificador OMX Qualcomm H264

Optimizado para plataformas Qualcomm Snapdragon, este codificador aprovecha las capacidades de aceleración de hardware.

var settings = new OMXQualcommH264EncoderSettings
{
    Bitrate = 6_000,         // 6 Mbps
    IFrameInterval = 2,      // Keyframe cada 2 segundos
    ParseStream = true       // Habilitar análisis de flujo
};

Características clave:

  • Control directo de tasa de bits
  • Gestión de intervalo de cuadros I
  • Aceleración de hardware en plataformas Qualcomm
  • Propiedades adicionales disponibles a través de diccionario

Codificador OMX Exynos H264

Diseñado específicamente para plataformas Samsung Exynos:

var settings = new OMXExynosH264EncoderSettings();
// Configurar opciones específicas de plataforma
settings.Properties["quality_level"] = "high";
settings.Properties["hardware_acceleration"] = "true";

Características:

  • Optimización de hardware Samsung
  • Configuración flexible a través de propiedades
  • Soporte de aceleración de hardware
  • Optimizaciones específicas de plataforma

Codificador OMX SPRD H264

Diseñado para plataformas Spreadtrum (UNISOC):

var settings = new OMXSPRDH264EncoderSettings
{
    Bitrate = 6_000,         // Tasa de bits objetivo
    IFrameInterval = 2,      // Tamaño GOP en segundos
    ParseStream = true       // Bandera de análisis de flujo
};

Características:

  • Aceleración de hardware para chips SPRD
  • Control directo de tasa de bits
  • Gestión de intervalo de keyframes
  • Propiedades adicionales específicas de plataforma

Propiedades comunes y uso

Todos los codificadores OMX comparten algunas características comunes:

// Implementación de interfaz común
public interface IH264EncoderSettings
{
    bool ParseStream { get; set; }
    KeyFrameDetectedDelegate KeyFrameDetected { get; set; }
    H264EncoderType GetEncoderType();
    MediaBlock CreateBlock();
}

Uso del diccionario de propiedades:

// Forma genérica de establecer opciones específicas de plataforma
settings.Properties["hardware_acceleration"] = "true";
settings.Properties["quality_preset"] = "balanced";
settings.Properties["thread_count"] = "4";

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) 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:

if (OMXSPRDH264EncoderSettings.IsAvailable())
{
    // Usar codificador SPRD
}
else if (OMXQualcommH264EncoderSettings.IsAvailable())
{
    // Recurrir a Qualcomm
}
else
{
    // Recurrir a implementación Google
}

Consideraciones específicas de plataforma

  1. Plataformas Qualcomm:
  2. Mejor rendimiento con configuraciones de tasa de bits nativas
  3. Óptimo para streaming cuando el intervalo de cuadros I es 2-3 segundos
  4. La aceleración de hardware debe habilitarse cuando sea posible

  5. Plataformas Exynos:

  6. El diccionario de propiedades ofrece control más detallado
  7. Considere usar preajustes de calidad específicos de plataforma
  8. Monitoree el estado de aceleración de hardware

  9. Plataformas SPRD:

  10. Mantenga la tasa de bits dentro de las capacidades de la plataforma
  11. Use intervalo de cuadros I apropiado para el tipo de contenido
  12. Considere restricciones de memoria al establecer propiedades

  13. OMX General:

  14. Siempre pruebe en hardware objetivo
  15. Monitoree métricas de rendimiento del codificador
  16. Tenga opciones de respaldo listas
  17. Considere el impacto en el consumo de energía