Ich bin neu bei StackOverflow. Und ich weiß nicht, wie ich die Frage richtig strukturieren soll.
Ich versuche, einen Media-Streaming-Server für mein Projekt zu erstellen, bei dem eine Raspberry-Kamera zum Nginx-RTMP-Server streamt und mein Computer regelmäßig Teile der Streams erstellt und sie als speichert .h264
.
Dies ist mein ausgeführter ffmpeg-Befehl picamera
(ich verwende Python 2.7 und die Picamera-Bibliothek).
cmdline = ['ffmpeg', '-i','-','-vcodec','copy','-crf','30','-maxrate','2M','-bufsize',' 1M','-an', '-f','flv', Cam_URL]
logger.debug("Starting the streaming process to server")
rtmpstream = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
try:
camera.framerate = 24
camera.resolution = (1280, 720)
camera.brightness = int(config_hash['Brightness'])
camera.rotation = int(config_hash['Rotation'])
camera.iso = int(config_hash['ISO'])
camera.sharpness = int(config_hash['Sharpness'])
camera.start_recording(rtmpstream.stdin, quality = 20,bitrate = 0, format = 'h264')
ffmpeg
auf meiner Maschine:
ffmpeg -i (media server url) -vcodec copy -maxrate 2M -bufsize 1M qwertyuip.h264
Die Bitrate auf dem Pi bleibt vor der Aufnahme konstant bei etwa 2 Mbit/s, aber wenn ich mit der Aufnahme auf meinem PC beginne, steigt die Bitrate auf dem Pi wie verrückt auf 11.000 kbit/s. Das verbraucht meine gesamte Bandbreite.
Können Sie mir bitte helfen, eine nahezu konstante Bitrate aufrechtzuerhalten?
Antwort1
Die Optionen -vcodec copy
und -maxrate 2M
schließen sich gegenseitig aus: Wenn der Stream kopiert (also neu codiert) wird, hat ffmpeg keinen Einfluss auf die Datenrate (abgesehen vom Padding) – die von Ihrer Kamera ausgegebene Datenrate ist also die von ffmpeg durchgegebene Datenrate.
Sie haben zwei Möglichkeiten:
- Kodieren Sie das Video neu (ähnlich wie
-c:v h264 -b:v 2M
), aber ich bezweifle, dass der RasPi genug Power hat, um dies zu tun, während gleichzeitig der Kameraserver läuft - Sorgen Sie dafür, dass Ihr Kameraserver eine vernünftige Ausgaberate erzeugt. So würde ich das Problem angehen, indem ich mir zunächst anschaue, welche Ausgabeoptionen und Einstellungen er zulässt.