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:
- Codificador AMD AMF H264 (acelerado por GPU)
- Codificador NVIDIA NVENC H264 (acelerado por GPU)
- Codificador Intel QSV H264 (acelerado por GPU)
- Codificador OpenH264 (Software)
- Codificador Apple Media H264 (acelerado por hardware para dispositivos Apple)
- Codificador VAAPI H264 (aceleración de hardware en Linux)
- 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¶
- Selección de codificador
- Use codificadores de hardware (AMD, NVIDIA, Intel) cuando estén disponibles para mejor rendimiento
- Recurra a OpenH264 cuando la codificación de hardware no esté disponible
-
Use codificadores específicos de plataforma (Apple Media, VAAPI) al dirigirse a plataformas específicas
-
Selección de control de tasa
- Use CBR para aplicaciones de streaming donde la tasa de bits consistente es importante
- Use VBR para codificación sin conexión donde la calidad es más importante que la consistencia de tasa de bits
- Use CQP para máxima calidad cuando la tasa de bits no es una preocupación
-
Considere usar opciones de look-ahead para mejor calidad cuando la latencia no es crítica
-
Optimización de rendimiento
- Ajuste el tamaño GOP basándose en el tipo de contenido (menor para alto movimiento, mayor para contenido estático)
- Habilite CABAC para mejor eficiencia de compresión cuando la latencia no es crítica
- Use perfil y nivel apropiados para dispositivos objetivo
-
Considere cuadros B para mejor compresión pero tenga en cuenta el impacto en latencia
-
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¶
- Plataformas Qualcomm:
- Mejor rendimiento con configuraciones de tasa de bits nativas
- Óptimo para streaming cuando el intervalo de cuadros I es 2-3 segundos
-
La aceleración de hardware debe habilitarse cuando sea posible
-
Plataformas Exynos:
- El diccionario de propiedades ofrece control más detallado
- Considere usar preajustes de calidad específicos de plataforma
-
Monitoree el estado de aceleración de hardware
-
Plataformas SPRD:
- Mantenga la tasa de bits dentro de las capacidades de la plataforma
- Use intervalo de cuadros I apropiado para el tipo de contenido
-
Considere restricciones de memoria al establecer propiedades
-
OMX General:
- Siempre pruebe en hardware objetivo
- Monitoree métricas de rendimiento del codificador
- Tenga opciones de respaldo listas
- Considere el impacto en el consumo de energía