He estado jugando con FFMPEG y estoy tratando de lograr una tasa de bits de transmisión lo más constante posible. He revisado la documentación y los ejemplos de FFMPEG, pero cuando mido la tasa de bits resultante con Wireshark todavía no obtengo una tasa de bits constante y veo picos de tasa de bits periódicos que superan el parámetro -maxrate.
Actualmente tomo la transmisión RTSP desde una cámara IP y luego la transcodifico a una transmisión UDP local usando el siguiente comando (o variaciones del mismo):
ffmpeg -rtsp_transport tcp -i "RTSP_IP" -an -c:v libx264 -x264-params "hal-hrd=cbr:force-cfr1" -b:v 100k -minrate 100k -maxrate 100k -bufsize 150k -threads 1 -flush_packets 0 -f mpegts "udp://@10.100.3.30:5004?packet_size=1316&bitrate=100000"
En el ejemplo anterior, me esfuerzo por lograr una velocidad de bits máxima de 100 Kbps, pero todavía veo picos de velocidad de bits cuya amplitud se ve afectada por el parámetro -bufsize. Sin embargo, hacer que el tamaño del bufsize sea demasiado pequeño hace que la calidad de la imagen se reajuste con demasiada frecuencia. El gráfico de Wireshark resultante es:
Tres preguntas:
- ¿Hay algo que estoy haciendo mal aquí? - No importa lo que haga, siempre veo picos que superan el -maxrate
- Tengo entendido que FFMPEG realiza un límite suave en la velocidad de bits. ¿Es esto correcto?
- ¿Cómo puedo lograr un límite estricto en la tasa de bits?
Gracias por cualquier ayuda que pueda brindar sobre el asunto. ¡He estado golpeándome la cabeza con este problema por un tiempo, así que realmente lo apreciaré!