Es gibt unzählige Foren und Threads, in denen es darum geht, eine Latenz von 5 Sekunden zu vermeiden, wenn ein Pi zusammen mit einer PI-Cam als Überwachungskamera verwendet wird. Viele Tutorials zeigen, wie Sie mit vlc die Bilder mithilfe des RTP-Protokolls codieren und streamen, was zu einer Verzögerung von ~ 5 Sekunden führt.
Meiner Meinung nach ist der Grund dafür, dass raspivid den Stream in H264 codiert, während VLC ihn erneut decodieren und in RTP umcodieren muss. Die Befehlszeile sieht folgendermaßen aus:
raspivid -w 640 -h 480 -o - -t 0 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Der erste Teil weist raspivid an, Videos zur Standardausgabe zu streamen:
raspivid -w 640 -h 480 -o - -t 0
Das Teil nach dem Rohr weist VLC an, es aufzunehmen und mit h264 zu dekodieren:
cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
Dieses Muxen und Demuxen ist eine ziemliche Menge an Ressourcen!
Ich habe die Quellen von Raspicam bei Github gefunden, und ich denke, dass mit der Methode encoder_buffer_callback (derzeit in Zeile 848) etwas getan werden kann, um die Codierung zu überspringen. Allerdings bin ich nicht gut in c und überhaupt nicht mit Videokodierung vertraut, daher habe ich keine Ahnung, wo ich anfangen soll.
Auf Github sehe ich 330 Gabeln, aber sie scheinen nicht speziell für Raspicam zu sein (eher für das gesamte Userland-Projekt). Ich habe mich beim Versuch, eine Abzweigung zu finden, die die Codierung entfernt oder etwas Einfacheres wie mjpeg implementiert hat, verlaufen.
Könnte jemand mit C- und Video-Codec-Kenntnissen mir und den anderen Millionen Benutzern helfen, die Latenz zu beseitigen? Wahrscheinlich ist die Lösung bereits in einer dieser Gabeln vorhanden, aber ich habe stundenlang ohne Glück danach gesucht.
ps Ich suche keine Browser-Lösung , möchte sie aber letztendlich zu einer Synology streamen, vorzugsweise mit MJPEG-Streaming (jedoch nicht über eine Webseite, sondern über einen Standard-MJPEG-Stream, der in die meisten kommerziellen IP-Cams integriert ist). Der erste Schritt ist, h264 loszuwerden.
quelle
Antworten:
Das ist wahrscheinlich nicht das, was Sie von Antworten erwarten, aber ich empfehle VLC-Streaming überhaupt nicht.
Für ein Schulprojekt habe ich einige Streaming-Optionen ausprobiert (auch auf RPi!):
Mit VLC und MJPEG (und einigen anderen weniger bekannten) hatte ich eine Latenz zwischen 3 und 5 Sekunden.
Mit GStreamer KEINE LATENZ und mit der besten Auflösung (und vielen weiteren Optionen)!
Wenn Sie interessiert sind, können Sie es hier überprüfen .
Und wenn Sie es verwenden, ist hier meine Pipeline:
quelle
Einige Leute haben hart daran gearbeitet, seit ich diese Frage zum ersten Mal gestellt habe, und zu diesem Zeitpunkt gibt es einige Optionen (seltsam, dass noch niemand auf diese Frage geantwortet hat). Ich habe RaspberrIPCam ausprobiert und hatte einige Erfolge, aber es scheint, dass die RTSP-Pakete eine extrem kurze TTL oder so hatten. Wenn der Pi direkt an einen Router neben meinem PC angeschlossen ist, funktioniert er perfekt. Aber sobald ich die Kamera dort installiert hatte, wo ich sie haben wollte, und versuchte, mit zwei Routern dazwischen auf den Stream zuzugreifen, kam kein Image an. Ich habe den Quellcode überprüft und festgestellt, dass die TTL auf Maximum eingestellt ist. Ich habe es nie ganz herausgefunden.
Derzeit würde ich RaspberryIPCamera empfehlen , die eine schöne Benutzeroberfläche hat (siehe Screenshots ) und sogar ein fertiges SD-Karten-Image dafür hat. Ich habe die SD-Karte ausprobiert, aber mit großem Erfolg eine manuelle Installation wie hier beschrieben durchgeführt (mein aktuelles Setup). Anweisungen zum Anschließen an eine Synology DiskStation sind ebenfalls verfügbar und funktionieren auf meinem System einwandfrei. Das Problem mit dem SD-Karten-Image war, dass ich das Dateisystem nicht in vollem Umfang auf die SD-Karte erweitern konnte (ich möchte auch einige andere Dinge darauf ausführen, um einige Relais über die GPIO-Pins zu steuern).
Die obige Lösung verwendet Komponenten des UV4L-Projekts. In der Dokumentation des UV4L-Projekts auf dieser Seite wird außerdem Folgendes erwähnt:
Ich habe es aber noch nicht ausprobiert (da ich mein aktuelles Setup nicht durcheinander bringen möchte).
quelle