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)
- 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
Bitrateen kbit/s (el elemento GStreamer recibe bits/seg internamente)IFrameIntervales unTimeSpan— en Android 25+ funcionan segundos fraccionarios (i-frame-interval-float); versiones anteriores truncan a segundos enterosCodecNameanula la auto-detección cuando sabes qué elementoamcvidenc-*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¶
- 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, Android hardware) 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 — 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 });
}