Saltar a contenido

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:

Codificadores H.264

  • OpenH264 (Basado en software)
  • NVENC H.264 (Aceleración GPU NVIDIA)
  • QSV H.264 (Intel Quick Sync)
  • AMF H.264 (Aceleración GPU AMD)

Codificadores H.265/HEVC

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

Codificadores AAC

  • VO-AAC (Multiplataforma)
  • AVENC AAC
  • MF AAC (Solo Windows)

Codificador MP3:

  • MP3EncoderSettings

Ejemplo de configuración de un codificador de audio:

// Para plataformas Windows
output.Audio = new MFAACEncoderSettings();
// Para compatibilidad multiplataforma
output.Audio = new VOAACEncoderSettings();
// Usando MP3 en lugar de AAC
output.Audio = new MP3EncoderSettings();

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:

// Acceder a configuración de sink
output.Sink.Filename = "salida_modificada.ts";

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

  1. Aceleración de hardware: Cuando esté disponible, prefiera codificadores acelerados por hardware (NVENC, QSV, AMF) sobre codificadores de software para mejor rendimiento.

  2. Selección de códec de audio: Use AAC para mejor compatibilidad y calidad a menos que tenga requisitos específicos para MP3.

  3. 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

MFBaseOutput
    └── MPEGTSOutput

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

  1. Configuración de tasa de bits:
  2. 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
  3. Considere usar VBR para escenarios de almacenamiento y CBR para streaming

  4. Aceleración de hardware:

  5. Cuando esté disponible, use codificadores acelerados por hardware (QSV, NVENC, AMD) para mejor rendimiento
  6. Recurra a MS_H264/MS_H265 cuando la aceleración de hardware no esté disponible

  7. Optimización de calidad:

  8. Para mayor calidad a costa del rendimiento, aumente el valor de QualityVsSpeed
  9. Habilite CABAC para mejor eficiencia de compresión en escenarios sin baja latencia
  10. Ajuste MaxKeyFrameSpacing segú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

  1. Características de MPEG-TS:
  2. Adecuado para aplicaciones de streaming y transmisión
  3. Proporciona resiliencia a errores a través de estructura basada en paquetes
  4. Soporta múltiples programas y flujos elementales

  5. Consideraciones de rendimiento:

  6. El modo de baja latencia intercambia calidad por retardo de codificación reducido
  7. Los B-frames mejoran la compresión pero aumentan la latencia
  8. 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.