Ich habe mit FFMPEG herumgespielt und versuche, eine möglichst konstante Streaming-Bitrate zu erreichen. Ich habe die FFMPEG-Dokumentation und Beispiele durchgesehen, aber wenn ich die resultierende Bitrate mit Wireshark messe, erhalte ich immer noch keine konstante Bitrate und sehe periodische Bitratenspitzen, die den Parameter -maxrate überschreiten.
Derzeit nehme ich den RTSP-Stream von einer IP-Kamera auf und transkodiere ihn dann mit dem folgenden Befehl (oder Variationen davon) in einen lokalen UDP-Stream:
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"
Im obigen Beispiel strebe ich eine maximale Bitrate von 100 Kbit/s an, sehe aber immer noch Bitratenspitzen, deren Amplitude vom Parameter -bufsize beeinflusst wird. Wenn die Puffergröße jedoch zu klein gewählt wird, muss die Bildqualität zu oft angepasst werden. Das resultierende Wireshark-Diagramm sieht folgendermaßen aus:
Drei Fragen:
- Mache ich hier etwas falsch? - Egal was ich mache, ich sehe immer Spitzen, die über der -maxrate liegen
- Meines Wissens führt FFMPEG eine weiche Begrenzung der Bitrate durch. Ist das richtig?
- Wie kann ich eine Obergrenze für die Bitrate erreichen?
Vielen Dank für jede Hilfe, die Sie in dieser Angelegenheit leisten können. Ich zerbreche mir schon seit einiger Zeit den Kopf über dieses Problem, daher wäre ich Ihnen wirklich dankbar!