Welche Streaming-Lösung für den Picam hat die geringste Verzögerung?

9

Dieser Beitrag zeigt, wie Sie mit VLC streamen. Es funktioniert gut und ist einfach, aber es gibt mir ungefähr eine zweite Verzögerung. Dieser Beitrag verwendet GStreamer und hat eine Verzögerung von 0,3 Sekunden. Ich möchte weniger.

Ist es möglich, den Raspberry Pi-Grafikchip zu verwenden, um die Codierung zu beschleunigen?

Antonvh
quelle
Es ist noch nicht möglich. 0,3 ms Verzögerung ist sehr gut und Sie werden (ab sofort) nicht besser, weil V2L fehlt. Vielleicht hilft das
Piotr Kula
@ppumkin Ich denke, das OP sagte, die Verzögerung sei 0,3 Sekunden, nicht Millisekunden. Meinst du auch V4L?
Syb0rg
Ja 3ms dachte ich. Video4Linux-Treiber? Oder heißt es etwas anderes? Wissen Sie. Der native Treiber.
Piotr Kula
@ppumkin Ahh, dann liegst du falsch. Die V4L2-Treiber waren in NOOBS v1.3.3 enthalten .
Syb0rg

Antworten:

9

Mit Ubuntu 14.10 und Gstreamer erreiche ich eine Latenz von 100 bis 116 ms mit 1280 x 720 bei 60 Hz.

Tanks an @Antonvh, der mich auf den richtigen Weg bringt. Ich reproduziere hier die Lösung für letztere Referenz.

So streamen Sie vom Pi:

raspivid -t 0 -b 2000000  -fps 60 -w 1280 -h 720 -o - \
  | gst-launch-1.0 -e -vvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 \ 
  ! udpsink host=10.42.0.1 port=5001

Um es mit gst-0.10 auf Ihrem Computer zu empfangen und an ein virtuelles v4l2-Gerät zu senden (tatsächlich benötigen Sie v4l2loopback ):

gst-launch -v udpsrc port=5001 ! application/x-rtp, payload=96 ! rtph264depay \ 
! ffdec_h264 ! ffmpegcolorspace ! v4l2sink device=/dev/video1

Anschließend können Sie das Gerät /dev/video1in einer beliebigen Software öffnen, die die v4l2-Erfassung unterstützt.

Für eine gst-1.0-Lösung (v4l2loopback funktioniert nicht mit gst-1.0) lasse ich Sie den Antonvh-Blogbeitrag sehen .

Antoine
quelle
4

Ich habe eine Verzögerung von 200 ms erreicht! Der Trick: Senden Sie weniger Frames vom Pi als Sie auf der Remote-Seite lesen. Dadurch wird sichergestellt, dass der Puffer leer bleibt.

Hier ist ein Bild, das ich vom RPi gemacht habe, das eine Stoppuhr filmt. Es zeigt den Zeitunterschied.

Dies ist das Rezept, das ich benutze. Führen Sie zuerst auf dem Laptop (Mac) Folgendes aus:

nc -l 5001 | mplayer -fps 24 -cache 1024 -

Starten Sie dann auf dem RPI das Streaming:

raspivid -t 999999 -w 1280 -h 720 -fps 20 -o - | nc 192.168.178.22 5001

Stellen Sie sicher, dass:

  • Installieren Sie zuerst mplayer. Nur die Homebrew-Methode hat bei mir funktioniert. Der reguläre Download war fehlerhaft.
  • Ändern Sie die IP-Nummer oben in die Nummer Ihres Laptops.
Antonvh
quelle
Das ist ein kluger Trick! Ich frage mich, ob es auch für den neuen UV4L-Treiber funktioniert
Piotr Kula
Das Problem bei dieser Lösung ist, dass sie von der Wiedergabeseite aus viel Ruckeln verursacht. Ich habe mich gefragt, ob Sie eine Lösung dafür gefunden haben.
9a3eedi
1

Ich verwende dieses Videorezept: http://archpi.dabase.com/#sending-and-receiving-pi-camera-video-over-the-network

Haben Sie https://github.com/thaytan/gst-rpicamsrc ausprobiert ? Das sollte etwas schlanker sein. Tbh, ich kann mir nicht die Mühe machen, es zu versuchen.

0,3s Verzögerung ist verdammt gut.

hendry
quelle
1
Danke für die Links! Ich glaube, ich habe jetzt eine Verzögerung von weniger als 0,3 Sekunden. Ich muss die Lösung noch dokumentieren und genau messen. Werde bald posten. Wenn meine Messungen beweisen, dass es mehr als 0,3 ist, werde ich das andere Rezept ausprobieren.
Antonvh
@Antonvh Wie läuft die Forschung / Messung? Erhalten Sie mit dieser Antwort bessere Ergebnisse?
RPiAwesomeness