Salida MPEG-TS¶
Video Capture SDK .Net Video Edit SDK .Net Media Blocks SDK .Net
El módulo de salida MPEG-TS (Transport Stream) en el SDK de VisioForge proporciona funcionalidad para crear archivos de flujo de transporte MPEG con varias opciones de codificación de video y audio. Esta guía explica cómo configurar y usar la clase MPEGTSOutput efectivamente.
Salida MPEG-TS multiplataforma¶
VideoCaptureCoreX VideoEditCoreX MediaBlocksPipeline
Para crear una nueva salida MPEG-TS, use el siguiente constructor:
// Inicializar con audio AAC (recomendado)
var output = new MPEGTSOutput("output.ts", useAAC: true);
También puede usar audio MP3 en lugar de AAC:
// Inicializar con audio MP3 en lugar de AAC
var output = new MPEGTSOutput("output.ts", useAAC: false);
Opciones de codificación de video¶
La clase MPEGTSOutput soporta múltiples codificadores de video a través de la propiedad Video. Los codificadores disponibles incluyen:
- OpenH264 (Basado en software)
- NVENC H.264 (Aceleración GPU NVIDIA)
- QSV H.264 (Intel Quick Sync)
- AMF H.264 (Aceleración GPU AMD)
- MF HEVC (Windows Media Foundation, solo Windows)
- NVENC HEVC (Aceleración GPU NVIDIA)
- QSV HEVC (Intel Quick Sync)
- AMF H.265 (Aceleración GPU AMD)
Ejemplo de configuración de un codificador de video específico:
// Verificar si el codificador NVIDIA está disponible
if (NVENCH264EncoderSettings.IsAvailable())
{
output.Video = new NVENCH264EncoderSettings();
}
else
{
// Recurrir a OpenH264
output.Video = new OpenH264EncoderSettings();
}
Opciones de codificación de audio¶
Los siguientes codificadores de audio son soportados a través de la propiedad Audio:
- VO-AAC (Multiplataforma)
- AVENC AAC
- MF AAC (Solo Windows)
- MP3EncoderSettings
Ejemplo de configuración de un codificador de audio:
Gestión de archivos¶
Puede obtener o establecer el nombre de archivo de salida después de la inicialización:
// Obtener nombre de archivo actual
string archivoActual = output.GetFilename();
// Cambiar nombre de archivo de salida
output.SetFilename("nueva_salida.ts");
Características avanzadas¶
Procesamiento personalizado¶
MPEGTSOutput soporta procesamiento personalizado de video y audio a través de MediaBlocks:
// Agregar procesamiento de video personalizado
output.CustomVideoProcessor = new SuProcesadorDeVideoPersonalizado();
// Agregar procesamiento de audio personalizado
output.CustomAudioProcessor = new SuProcesadorDeAudioPersonalizado();
Configuración de Sink¶
La salida usa MP4SinkSettings para configuración:
Consideraciones de plataforma¶
- Algunos codificadores (MF AAC, MF HEVC) solo están disponibles en plataformas Windows
- Las aplicaciones multiplataforma deben usar codificadores agnósticos de plataforma como VO-AAC para audio
Mejores prácticas¶
-
Aceleración de hardware: Cuando esté disponible, prefiera codificadores acelerados por hardware (NVENC, QSV, AMF) sobre codificadores de software para mejor rendimiento.
-
Selección de códec de audio: Use AAC para mejor compatibilidad y calidad a menos que tenga requisitos específicos para MP3.
-
Manejo de errores: Siempre verifique la disponibilidad del codificador antes de usar opciones aceleradas por hardware:
if (NVENCH264EncoderSettings.IsAvailable())
{
// Usar codificador NVIDIA
}
else if (QSVH264EncoderSettings.IsAvailable())
{
// Recurrir a Intel Quick Sync
}
else
{
// Recurrir a codificación de software
}
Compatibilidad multiplataforma: Para aplicaciones multiplataforma, asegúrese de usar codificadores disponibles en todas las plataformas objetivo o implemente respaldos apropiados.
Ejemplo de implementación¶
Aquí hay un ejemplo completo que muestra cómo crear y configurar una salida MPEG-TS:
var output = new MPEGTSOutput("output.ts", useAAC: true);
// Configurar codificador de video
if (NVENCH264EncoderSettings.IsAvailable())
{
output.Video = new NVENCH264EncoderSettings();
}
else if (QSVH264EncoderSettings.IsAvailable())
{
output.Video = new QSVH264EncoderSettings();
}
else
{
output.Video = new OpenH264EncoderSettings();
}
// Configurar codificador de audio basado en plataforma
#if NET_WINDOWS
output.Audio = new MFAACEncoderSettings();
#else
output.Audio = new VOAACEncoderSettings();
#endif
// Opcional: Agregar procesamiento personalizado
output.CustomVideoProcessor = new SuProcesadorDeVideoPersonalizado();
output.CustomAudioProcessor = new SuProcesadorDeAudioPersonalizado();
Salida MPEG-TS solo Windows¶
VideoCaptureCore VideoEditCore
La clase MPEGTSOutput proporciona configuración para salida MPEG Transport Stream (MPEG-TS) en el framework de procesamiento de video VisioForge. Esta clase hereda de MFBaseOutput e implementa la interfaz IVideoCaptureBaseOutput, permitiendo su uso específicamente para escenarios de captura de video con formato MPEG-TS.
Jerarquía de clases¶
Configuración de video heredada¶
La clase MPEGTSOutput hereda capacidades de codificación de video de MFBaseOutput, que incluye:
Configuración de codificación de video: A través de la propiedad Video de tipo MFVideoEncoderSettings, soportando:
- Múltiples opciones de códec (H.264/H.265) con soporte de aceleración de hardware
- Control de tasa de bits (CBR/VBR)
- Configuración de calidad
- Configuración de tipo de cuadro y estructura GOP
- Opciones de entrelazado
- Controles de resolución y relación de aspecto
Configuración de audio heredada¶
La configuración de audio se maneja a través de la propiedad Audio heredada de tipo M4AOutput, que incluye:
Codificación de audio AAC con configurables:
- Versión (predeterminado: MPEG-4)
- Tipo de objeto (predeterminado: AAC-LC)
- Tasa de bits (predeterminado: 128 kbps)
- Formato de salida (predeterminado: RAW)
Uso¶
Implementación básica¶
// Crear instancia de VideoCaptureCore
var core = new VideoCaptureCore();
// Establecer nombre de archivo de salida
core.Output_Filename = "output.ts";
// Crear salida MPEG-TS
var mpegtsOutput = new MPEGTSOutput();
// Configurar ajustes de video
mpegtsOutput.Video.Codec = MFVideoEncoder.MS_H264;
mpegtsOutput.Video.AvgBitrate = 2000; // 2 Mbps
mpegtsOutput.Video.RateControl = MFCommonRateControlMode.CBR;
// Configurar ajustes de audio
mpegtsOutput.Audio.Bitrate = 128; // 128 kbps
mpegtsOutput.Audio.Version = AACVersion.MPEG4;
core.Output_Format = mpegtsOutput;
Soporte de serialización¶
La clase proporciona soporte de serialización JSON integrado para guardar y cargar configuraciones:
// Guardar configuración
string jsonConfig = mpegtsOutput.Save();
// Cargar configuración
MPEGTSOutput loadedConfig = MPEGTSOutput.Load(jsonConfig);
Configuración predeterminada¶
La clase MPEGTSOutput se inicializa con estos ajustes predeterminados:
Predeterminados de video (heredados de MFBaseOutput)¶
- Tasa de bits promedio: 2000 kbps
- Códec: Microsoft H.264
- Perfil: Main
- Nivel: 4.2
- Control de tasa: CBR
- Calidad vs Velocidad: 85
- Cuadros de referencia máximos: 2
- Tamaño GOP: 50 cuadros
- Conteo de B-Pictures: 0
- Modo de baja latencia: Deshabilitado
- CABAC: Deshabilitado
- Modo de entrelazado: Progresivo
Predeterminados de audio¶
- Tasa de bits: 128 kbps
- Versión AAC: MPEG-4
- Tipo de objeto AAC: Complejidad baja (LC)
- Formato de salida: RAW
Mejores prácticas¶
- Configuración de tasa de bits:
- Para aplicaciones de streaming, asegúrese de que las tasas de bits combinadas de video y audio estén dentro de su ancho de banda objetivo
-
Considere usar VBR para escenarios de almacenamiento y CBR para streaming
-
Aceleración de hardware:
- Cuando esté disponible, use codificadores acelerados por hardware (QSV, NVENC, AMD) para mejor rendimiento
-
Recurra a MS_H264/MS_H265 cuando la aceleración de hardware no esté disponible
-
Optimización de calidad:
- Para mayor calidad a costa del rendimiento, aumente el valor de
QualityVsSpeed - Habilite CABAC para mejor eficiencia de compresión en escenarios sin baja latencia
- Ajuste
MaxKeyFrameSpacingsegún su caso de uso específico (valores más bajos para mejor búsqueda, valores más altos para mejor compresión)
Notas técnicas¶
- Características de MPEG-TS:
- Adecuado para aplicaciones de streaming y transmisión
- Proporciona resiliencia a errores a través de estructura basada en paquetes
-
Soporta múltiples programas y flujos elementales
-
Consideraciones de rendimiento:
- El modo de baja latencia intercambia calidad por retardo de codificación reducido
- Los B-frames mejoran la compresión pero aumentan la latencia
- La aceleración de hardware puede reducir significativamente el uso de CPU
Redists requeridos¶
Visite nuestra página de GitHub para obtener más ejemplos de código.