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.