encoding - que - Codificación MPEG-TS
hls streaming server (1)
Tengo un archivo que necesito convertir a MPEG-TS para que se ajuste a la siguiente especificación:
Transmisión primaria de bits de bits [kbit / s] video: 2575 audio: 2 x 192 subtítulos: - PAT / PMT: - Relleno: -
Componente TS bitrate [kbit / s] video: 2652 audio: 395 subtítulo: 45 PAT / PMT: 45 Relleno: 62 Total: 3200 CBR
Componentes requeridos adicionales: PAT NTP paquetes PMT
Componentes que pueden aparecer: NIT, SDT, EIT, etc.
vcodec="h264"
acodec="mpga"
bitrate="2500"
arate="192"
samplerate=48000
ext="mpg"
mux="ts"
vlc="/usr/bin/vlc"
fmt="mpg"
dst="/home/adam/test/"
for a in *$fmt; do
$vlc -I dummy -vvv "/home/adam/test/" --sout "#transcode{vcodec=$vcodec,venc=x264{profile=main,level=3.0,hrd=cbr,bframes=2},vb=$bitrate,acodec=$acodec,ab=$arate,samplerate=$samplerate,channels=2}:standard{mux=$mux,dst=/"$dst$a.$ext/",ac$
done
Después de codificar con el script anterior, todo parece estar bien (tanto para el códec de bitrate de video y audio es constante) aparte de dos cosas: El bitrate del contenedor también debe permanecer en CBR, pero este no es el caso. Además, falta el componente de relleno (0x1 ffff) - paquete nulo. ¿Es posible que corrija el script para hacer que el paquete nulo y la tasa de bits del contenedor sean constantes (3,2 Mbps CBR)?
La segunda opción es codificar con ffmpeg:
ffmpeg -i video_input.mpg -i audio_input.mp2 -acodec copy -tune zerolatency -x264opts bitrate=2600:vbv-maxrate=2600:vbv-bufsize=166:nal_hrd=cbr -vpre libx264-iptv -vcodec libx264 -f mpegts -muxrate 3200K -y output.ts
pero ¿cómo desarmar / desactivar / eliminar la tabla SDT?
Dado que conoce el concepto de paquetes NULL, es posible que haya estado trabajando con software o hardware comercial en esta área.
Hay una diferencia entre CBR (de video) y la tasa del sistema (o la tasa de multiplexor). Cuando el video está codificado como CBR, digamos a 3.2 Mbps, está bastante bien que fluctúe unos pocos cientos de kbps alrededor de ese margen. Entonces, la tasa de bits pico, podría ser de 3.3 Mbps. Esto está bastante bien. Al agregar otros 100 kbps de audio, la tasa de bits máxima total puede ser 3.4. Por lo general, uno establecería la tasa del sistema por encima de 3,6 Mbps o más en ese caso; donde el equilibrio son paquetes NULL.
La tasa del sistema de 3.5 Mbps NO PUEDE fluctuar en absoluto. Si lo hace, la sincronización basada en PCR no funcionará y, básicamente, las cosas no funcionarán en un entorno en vivo. Así que, básicamente, puedes pensar que 3.5 Mbps (alrededor de 240 paquetes en 100 milisegundos) se pueden considerar como un BUS. cada asiento debe ser llenado para asegurar que el transporte sea continuo. Por lo general, se hace de tal manera que pocos asientos permanecerán vacíos.
Lo triste es que ni VLC ni ninguna otra herramienta en código abierto lo harán por ti.
El truco que solíamos utilizar era que solíamos enviar ese flujo producido VLC sobre IP (donde el envío de flujo TS sin paquetes NULL está bien, y lo recibimos a través del resultado de un Muxer con ASI o tal interfaz, que habría agregado muxer .
Alternativamente, puede usar Manzanita muxer para convertir su flujo de TS no nulo a la transmisión de TS adecuada.
EDITAR:
Según el comentario, si todo lo que necesita hacer es deshabilitar el SDT, hay dos cosas que se deben hacer.
Elimine todos los paquetes del PID que corresponde a la tabla SDT. Si no está demultiplexando y volviendo a multiplexar por completo, una forma rápida de hacerlo podría ser volver a marcar el número PID de 13 bits con un número PID de paquete NULL.
Elimine la referencia del valor SDT PID en la tabla PAT. Esto esencialmente significa que usted produce un paquete de 3 a 4, que es PAT corregido ; y reemplace todas las secuencias de paquetes PAT en la secuencia por estos paquetes corregidos.