MBR¶
media.transcode.mbr
El transcodificador de Sapsan cambia los códecs, el bitrate y la resolución y prepara una escalera multibitrate (MBR). Varias calidades de salida pueden utilizar una misma pista de vídeo de origen: se decodifica una sola vez y los fotogramas resultantes se envían a los codificadores de las calidades de salida.
Cada salida se describe mediante una regla: qué pista de origen seleccionar y qué obtener de ella. La selección puede basarse en el idioma o el tipo de contenido para que la configuración siga funcionando cuando cambie la composición de la entrada. Esto resulta importante al conmutar entre las fuentes principal y de reserva, cuyos identificadores de pista y códecs pueden ser distintos.
Cómo construye Sapsan una escalera sincronizada¶
La transcodificación multibitrate crea varias representaciones de un mismo vídeo. Difieren en el tamaño del fotograma y el bitrate, y pueden utilizar distintos códecs, pero deben mostrar la misma imagen en el mismo instante. Sapsan las procesa en un único pipeline de vídeo con una escala de tiempo común.
Una sola decodificación para todas las calidades¶
Cada pista de vídeo de origen tiene un único decodificador para todas sus calidades de salida. El fotograma comprimido de entrada se decodifica una sola vez; la imagen resultante se envía al escalado y la codificación de cada calidad. Por ejemplo, para tres calidades de salida, Sapsan realiza una decodificación de la entrada y tres codificaciones de salida.
Al aumentar el número de calidades, aumenta el trabajo de los codificadores de salida y de las transformaciones de imagen. El coste de decodificar la fuente no se multiplica por el número de calidades. Esto es especialmente importante con vídeo de entrada que exige muchos recursos: el decodificador compartido atiende a toda la escalera.
Marcas de tiempo idénticas para los fotogramas correspondientes¶
Una misma imagen de origen recibe una marca de tiempo de presentación PTS común en todas sus calidades de salida. Coinciden las propias marcas, no solo la frecuencia nominal de fotogramas. El reproductor puede relacionar las imágenes correspondientes de distintas calidades mediante un mismo tiempo de medios.
Por ejemplo, a 25 fotogramas/s, los tiempos de presentación en segundos son los siguientes:
| Imagen | 1080p H.264 | 720p HEVC | 360p AV1 |
|---|---|---|---|
| Primera | 2.000 | 2.000 | 2.000 |
| Siguiente | 2.040 | 2.040 | 2.040 |
| Otra más | 2.080 | 2.080 | 2.080 |
Para las calidades de una misma pista de origen, el servidor utiliza la precisión de la escala de tiempo de la fuente: los PTS originales no se redondean a un número entero de fotograma solo para realizar la codificación. Las distintas velocidades de procesamiento de los codificadores tampoco crean relojes independientes para las calidades.
El DTS establece el orden de decodificación y depende de la reordenación de fotogramas de cada codificador. Al utilizar fotogramas B, el DTS puede diferir del PTS y entre códecs. Para relacionar la misma imagen entre calidades se utiliza el PTS común.
Fotogramas clave sincronizados¶
Con ajustes de GOP coordinados, los fotogramas clave de las distintas calidades coinciden en los mismos instantes de presentación. El reproductor dispone de puntos de conmutación sincronizados: al seleccionar otra calidad, continúa desde la misma posición temporal. El segmentador puede establecer los límites de los segmentos en los fotogramas clave coincidentes.
Para una escalera sincronizada, configure los mismos valores de gop_size y gop_structure en sus salidas de vídeo. Por ejemplo, a 25 fotogramas/s y con gop_size: 50, el intervalo previsto entre fotogramas clave es de dos segundos para todas las calidades. En el ejemplo siguiente, ambas calidades utilizan una misma pista de origen y la misma estructura de GOP.
Combinación de las pistas en un stream de salida común¶
Los codificadores pueden necesitar distintos tiempos para preparar un fotograma, especialmente si utilizan distintos códecs o fotogramas B. Sapsan combina los resultados de los codificadores de vídeo y las pistas de audio según una escala de tiempo de medios común: el intercalador de salida almacena los fotogramas en un búfer y los ordena por DTS. Por tanto, el tiempo que tarda en completarse cada codificación no determina el orden de los fotogramas de todo el stream.
El decodificador compartido, los PTS coincidentes y los fotogramas clave sincronizados proporcionan al reproductor una escalera preparada para la reproducción adaptativa. Puede seleccionar el bitrate adecuado conservando la posición temporal del vídeo. La sincronización original del audio y el vídeo también es importante: ordenar los fotogramas de salida no corrige por sí solo un desfase de audio incorrecto en la señal de entrada.
Configuración¶
La configuración se realiza mediante la API de central. Los ejemplos utilizan la forma de objeto de YAML; por ejemplo, source: {content: audio} se transmite en JSON como "source": {"content": "audio"}. También se admite la notación YAML con etiqueta: source: !content audio.
Supongamos que un stream recibe las siguientes variantes de señal:
| Entrada | Vídeo | Audio |
|---|---|---|
| Principal, MPEG-TS por UDP | v1, HEVC, 1920×1080 |
a1: MPEG Audio en inglés, eng; a2: AC-3 en ruso, rus |
| Reserva, HLS | v3, H.264, 1280×720 |
a4: AAC en ruso, rus |
Las reglas siguientes seleccionan el vídeo y el audio en ruso por sus propiedades. La entrada de reserva no requiere una configuración del transcodificador independiente:
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
- hls: {url: https://backup.example.com/tv1/index.m3u8}
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2800000
params:
video:
gop_size: 50
gop_structure: ibbbp
resize: {fit: {width: 1920, height: 1080}}
- source: {best_quality: video}
codec: {set: h264}
bitrate: 1200000
params:
video:
gop_size: 50
gop_structure: ibbbp
resize: {fit: {width: 1280, height: 720}}
- source: {language: rus}
codec: {set: aac}
bitrate: 128000
A partir del vídeo de cualquiera de estas entradas se generan dos calidades H.264, y la pista de audio en ruso seleccionada se prepara para su entrega en AAC. La pista en inglés de la entrada principal no coincide con la regla de audio. LSI realiza la conmutación entre entradas; las reglas source seleccionan las pistas de la entrada ya activa.
Selección de la pista de origen¶
source |
Cómo se seleccionan las pistas en un stream en directo |
|---|---|
{exact: v1} o {exact: a2} |
Una pista con el ID de entrada indicado. Es el ID lógico de Sapsan, no el PID de MPEG-TS. |
{content: video} o {content: audio} |
Todas las pistas del tipo indicado. Una regla puede crear varias salidas. |
{best_quality: video} o {best_quality: audio} |
Una pista del tipo indicado con el mayor bandwidth declarado. |
{language: rus} |
Todas las pistas de audio cuyo idioma sea exactamente rus, independientemente del códec y del ID. |
{language_codec: [rus, aac]} |
Todas las pistas de audio que tengan a la vez el idioma rus y el códec aac. |
{codecs: [pcma, pcmu]} |
Todas las pistas cuyo códec pertenezca al conjunto no vacío indicado. |
El idioma se obtiene de los metadatos de la fuente. La comparación es exacta: rus y ru son cadenas distintas. Si falta la etiqueta de idioma, la regla de idioma no coincide. Si la entrada tiene varias pistas en ruso, language: rus selecciona cada una; para restringir la selección, combine el idioma con el códec o utilice un ID concreto.
best_quality compara el bitrate declarado, no la resolución ni la calidad visual. Si falta bandwidth, se considera cero; en caso de empate, se selecciona la última pista coincidente de la descripción actual de la entrada. La selección se realiza al configurar el transcodificador. Actualizar únicamente la estimación del bitrate no provoca una conmutación automática entre pistas.
Cada regla se ejecuta de forma independiente. Varias reglas con una misma fuente crean varias calidades de salida. Las reglas language: rus y content: audio procesarán ambas la pista en ruso; esta configuración no significa «ruso y, si no existe, cualquier audio».
Qué cambia al conmutar entre entradas¶
Cuando cambia la composición o algún parámetro significativo de la entrada, Sapsan vuelve a comparar las reglas con la nueva descripción de las pistas y reconfigura el procesamiento. Se tienen en cuenta los cambios de ID y orden de las pistas, códecs y parámetros de decodificación. Para el audio también se tiene en cuenta el idioma.
En el ejemplo anterior, la regla language: rus selecciona a2 de la entrada principal y a4 de la reserva. La regla exact: a2 no selecciona nada en la reserva. La regla language_codec: [rus, ac3] limita intencionadamente el procesamiento al AC-3 en ruso y no coincide con el AAC de reserva.
Los identificadores de las pistas de salida pueden cambiar cuando cambia la entrada. En particular, una pista AAC-LC que ya cumpla los requisitos puede pasar sin volver a codificarse y conservar su ID de entrada; esta optimización se aplica después de seleccionar la fuente. La reconfiguración de decodificadores y codificadores también puede producir una transición en la salida. Las reglas de selección permiten trabajar con fuentes de distintas estructuras, pero por sí solas no garantizan una conmutación sin interrupciones.
Transcodificar todas las pistas de audio¶
Para un canal de televisión multilingüe, puede conservar todos los idiomas disponibles y convertir el audio a AAC:
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2000000
- source: {content: audio}
codec: {set: aac}
bitrate: 128000
Si la entrada principal contiene dos pistas de audio, la regla de audio procesa ambas. Si la reserva solo tiene una, la salida tendrá una. La regla utiliza el conjunto de pistas de audio de origen disponible; no establece un número fijo de salidas.
La selección por idioma utiliza los metadatos de la entrada. En el procesamiento en directo actual, la etiqueta de idioma no se transfiere al audio que se vuelve a codificar; en el paso directo sí se conserva. Téngalo en cuenta al comprobar los nombres de los idiomas en el reproductor.
Transcodificar solo determinados códecs¶
Para fuentes cuyo audio puede llegar en PCMA, PCMU o AAC, puede configurar por separado la conversión de G.711 y el paso directo de AAC:
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2000000
- source: {codecs: [pcma, pcmu]}
codec: {set: aac}
bitrate: 128000
- source: {codecs: [aac]}
codec: same
La regla con el conjunto de códecs selecciona tanto PCMA como PCMU sin depender del identificador de la pista de audio. La otra regla conserva el AAC existente sin transcodificarlo. Si G.711 y AAC están presentes a la vez, se ejecutan ambas reglas. Los códecs ajenos a estos conjuntos, como AC-3, no se seleccionan mediante las reglas de audio de este ejemplo.
Si no hay ninguna pista coincidente¶
En el transcodificador en directo, una regla sin coincidencias no crea ninguna pista de salida. Por ejemplo, la ausencia de rus no provoca la selección del audio en inglés ni la generación de silencio. Las demás reglas que sí coinciden siguen generando sus salidas.
El campo if_missing existe en el modelo de configuración, pero el procesamiento en directo no ejecuta sus modos fail, blank y substitute. No se puede depender de ellos para sustituir una pista ausente al conmutar entre fuentes.
Los ejemplos anteriores incluyen codificación real. Si todas las reglas utilizan únicamente codec: same, se activa el modo de paso directo general; esta configuración no permite filtrar pistas mediante source.
Códecs y parámetros¶
codec: {set: h264}: transcodifica al códec indicado. Los parámetros se detallan en codificación de vídeo. La notacióncodec: sameconserva los fotogramas originales sin transcodificarlos.- Escalera sincronizada: las salidas con distintos códecs procedentes de una misma pista de vídeo mantienen alineadas las marcas de tiempo y los fotogramas clave.
gop_sizeygop_structure: controlan la longitud y la estructura del GOP para obtener segmentos MBR sincronizados.- Audio G.711: la transcodificación a AAC u Opus conservando la escala de tiempo también se describe en codificación de audio.
- Pistas auxiliares: las pistas de subtítulos y las vistas previas JPEG admitidas pueden conservarse mediante paso directo. Compruebe la composición final del stream, además de las reglas de codificación.
Cambio de tamaño¶
resize |
Función |
|---|---|
{scale: {width: 1280, height: 720}} |
Escala exactamente al tamaño indicado. |
{fit: {width: 1280, height: 720}} |
Ajusta la imagen conservando sus proporciones y añade bandas si es necesario. |
{crop: {width: 1280, height: 720}} |
Recorta la imagen al tamaño indicado. |
Verificación¶
Compruebe los metadatos de entrada y la composición final de las pistas en las estadísticas del stream. Después abra la playlist maestra http://server/streaming/v/tv1/index.m3u8 y compruebe las calidades de salida y los idiomas del audio.
Conmute el stream a la reserva y compruébela por separado: qué vídeo se selecciona, cuántas pistas de audio se generan y si se conservan los idiomas necesarios. Para diagnosticar la reconfiguración, consulte los mensajes encode backend selected input tracks y la tabla de correspondencia entre las pistas de entrada y salida encode backend stream mapping en los logs del streamer.