Low Cost HD-Video Übertragung + Telemetrie

Status
Nicht offen für weitere Antworten.

Lonestar78

Erfahrener Benutzer
@sledge bitte sei so nett und veröffentliche das script zur compilierung trotzdem noch. Würde mich interessieren.
 

Sledge

lonesome Cowboy
Ok ich habs hinbekommen. Man muss noch in /home/pi/.profile den path zu den gst-plugins exportieren. Also einfach folgende Zeile einfügen
Code:
export GST_PLUGIN_PATH=/usr/lib/gstreamer-1.0/
Mit VLC kann ich mich jetzt verbinden aber der macht gefühlte 4 Sekunden lag. Wie komme ich denn mit dem gstreamer sdk auf den rtsp server?

Ich räume die "zu fuß Anleitung" noch auf und lade sie dann hoch. Es macht schon Sinn die Einzelschritte zu dokumentieren damit man gemeinsam an Verbesserungen arbeiten kann.
 

Sledge

lonesome Cowboy
Ah ja, damit klappts. Aber leider mit einem lag von 2 Sekunden :( Das ist zwar 2 Sekunden schneller als der VLC aber immer noch 1,9 Sekunden langsamer als der direkte Stream.

Die Prozessorlast liegt bei 35% und die Bandbreite des Streams schwankt abhängig davon wie bewegt die Bilder sind zwischen 1 und 8 mbit. (Ermittelt mit iptraf)

Die Serverpipe war:
Code:
./test-launch "(rpicamsrc bitrate=8500000 hflip=true vflip=true preview=false ! video/x-h264,width=1280,height=720,framerate=45/1,profile=high ! h264parse ! rtph264pay name=pay0 pt=96 )"
und die Windowspipe:
Code:
[CODE]D:\gstreamer\1.0\x86_64\bin>gst-launch-1.0.exe rtspsrc location=rtsp://192.168.178.119:8554/test latency=0 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
[/CODE]

Evtl. lässt sich das noch etwas feintunen aber fürs erste ziemlich ernüchternd.
 

Lonestar78

Erfahrener Benutzer
Ernüchterung kann ich verstehen. 2s sind übel. Probier mal ne niedrigere Bitrate 4.5 Mbit oder so. Die latency steigt für hohe Bitraten. Keine Ahnung warum
 

Sledge

lonesome Cowboy
Wie versprochen die Anleitung zum selbst kompilieren aktuellster sourcen!

Installation von Gstreamer 1.4.1, den Plugins good, bad und ugly sowie gst-rtsp-server-1.4.1 und gst-rpicamsrc

Vorraussetzung ist ein frisches Raspbian basierend auf Debian Wheezy
http://downloads.raspberrypi.org/raspbian_latest

Dauer der Prozedur ca. 8-10 Stunden

Los gehts

VORAB BENÖTIGTE PAKETE INSTALLIEREN
Code:
sudo apt-get install bison flex libglib2.0-dev autogen


GSTREAMER 1.4.0 INSTALLIEREN
Code:
su pi
cd /home/pi/
wget [URL]http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.4.1.tar.xz[/URL]
tar xvf gstreamer-1.4.1.tar.xz
cd gstreamer-1.4.1
./configure --prefix=/usr --with-package-name="GStreamer 1.4.1 BLFS" --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"
make
sudo make install


GSTREAMER BASE-PLUGINS INSTALLIEREN
Code:
sudo apt-get install liborc-0.4-dev
wget [URL]http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.1.tar.xz[/URL]
tar xvf gst-plugins-base-1.4.1.tar.xz
cd gst-plugins-base-1.4.1/
./configure --prefix=/usr --with-package-name="GStreamer Base Plugins 1.4.1 BLFS" --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"
make
sudo make install


GSTREAMER PLUGIN-GOOD INSTALLIEREN
Code:
wget [URL]http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.4.1.tar.xz[/URL]
tar xvf gst-plugins-good-1.4.1.tar.xz
cd gst-plugins-good-1.4.1/
./configure --prefix=/usr --with-package-name="GStreamer Good Plugins 1.4.1 BLFS" --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"
make
sudo make install


GSTREAMER PLUGIN-BAD INSTALLIEREN
Code:
wget [URL]http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.4.1.tar.xz[/URL]
tar xvf gst-plugins-bad-1.4.1.tar.xz
cd gst-plugins-bad-1.4.1
./configure --prefix=/usr --with-package-name="GStreamer Bad Plugins 1.4.1 BLFS" --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"
make
sudo make install


GSTREAMER PLUGIN-UGLY INSTALLIEREN
Code:
wget [URL]http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.4.1.tar.xz[/URL]
tar xvf gst-plugins-ugly-1.4.1.tar.xz
cd gst-plugins-ugly-1.4.1
./configure --prefix=/usr --with-package-name="GStreamer Ugly Plugins 1.4.1 BLFS" --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"
make
sudo make install


GST-RTSP SERVER INSTALLIEREN
Code:
wget [URL]http://gstreamer.freedesktop.org/src/gst-rtsp/gst-rtsp-server-1.4.1.tar.xz[/URL]
tar xvf gst-rtsp-server-1.4.1.tar.xz
cd gst-rtsp-server-1.4.1
./configure
make


RPICAMSRC INSTALLIEREN
Code:
echo "export GST_PLUGIN_PATH=/usr/lib/gstreamer-1.0/" >> /home/pi/.profile
git clone [URL]https://github.com/thaytan/gst-rpicamsrc.git[/URL]
cd gst-rpicamsrc/
./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/
make
sudo make install
sudo reboot


Benutzung

Windows Gstreamer SDK herunterladen und installieren (full)
64 Bit: http://gstreamer.freedesktop.org/data/pkg/windows/1.4.1/gstreamer-1.0-x86_64-1.4.1.msi
32 Bit: http://gstreamer.freedesktop.org/data/pkg/windows/1.4.1/


Variante 1 Direkter Stream auf Windows PC

Eingabeaufforderung des Windows rechners öffnen und in den bin Ordner vom Gstreamer navigieren
Bei mir liegt er unter d:\gstreamer\1.0\x86_64\bin
Windows Pipe eingeben:
Code:
gst-launch-1.0 -e -v udpsrc port=9000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Danach mit Putty per ssh zum Pi verbinden und die Linux Pipe eingeben:
Code:
raspivid -n -w 1280 -h 720 -b 6500000 -fps 49 -vf -hf -t 0 -pf high -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay ! udpsink host=sledge-pc port=9000
Auf dem Windows Rechner öffnet sich nun ein Fenster mit dem Videostream. Auf meinem Notebook habe ich so eine Latenz um die 100 ms!



Variante 2 Stream am rtsp Server abholen
Mit Putty per ssh zum Pi verbinden.
rtsp Server starten:
Code:
/home/pi/gst-rtsp-server-1.4.1/examples/test-launch "(rpicamsrc bitrate=8500000 hflip=true vflip=true preview=false ! video/x-h264,width=1280,height=720,framerate=45/1,profile=high ! h264parse ! rtph264pay name=pay0 pt=96 )"
Am windows Rechner Console öffnen und in den gstreamer Ordner navigieren
Stream starten (IP auf die IP des Raspberry ändern!):
Code:
gst-launch-1.0.exe rtspsrc location=rtsp://192.168.178.119:8554/test latency=0 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Auf meinem Notebook habe ich leider eine Latenz von 2 Sekunden

Alternativ Stream per VLC Player starten
VLC öffnen -> Medien -> Netzwerkstream öffnen -> Adresse eingeben: (Wieder auf die Ip des Raspberry achten!)
Code:
rtsp://192.168.178.119:8554/test
Mit VLC habe ich sogar 4 Sekunden Latenz :( Hierfür wird sich aber sicher auch noch irgend eine Lösung finden lassen.

Die Variante mit dem rtsp Server hat den Charme, dass sich auch Gäste mit nahezu beliebigen Geräten in den Stream einklinken können. Darüber hinaus kann man den Server bequem beim Systemstart starten und muss nicht erst auf einen Clienten warten.
 

digital_wadik

Well-known member
Sehr schön. Nur geht es bisschen schneller wen man es wie Lonestar macht und die repository ändert. Und die compelierten pakete direkt vom server holt. Ihrgendwo hinten im thread steht was davon ...
 

Sledge

lonesome Cowboy
Das stimmt aber die aktuellsten Repos haben nur v1.2.3 ich habe eine 5 Tage alte 1.4.1 installiert. Ob das nun etwas an den Latenzen ändert weiß ich nicht. Aber wenn es nie einer versucht... :)
 

digital_wadik

Well-known member
Vlt. liegt es ja auch grade an der 1.4.1 bei ArchLinux habe ich die auch verwendet. Hatte zwar keine latenz probleme jedoch hatte ich fps drops ... naja wer weis. Den rtsp habe ich da nicht hinbekommen. Bei ArchLinux ist alles bisschen anders. Habe heute zum ersten mal damit gearbeitet. Vlt versucht sich ja noch jemand anderes damit fals interesse besteht up ich mal ein image ..
 

Lonestar78

Erfahrener Benutzer
Sledge, danke!
Frage: warum nutzt du configure und nicht autogen.sh, welches in jedem de r Pakete dabei ist? So hab ich das in der anderen Anleitung gelesen.
 

digital_wadik

Well-known member
Habe heute auch den RTSP unter gstreamer 1.4.1 zum laufen bekommen nach @Sledge Anleitung.

Bin mir jetzt ganz sicher das etwas mit der 1.4.1 nicht stimmt. Latenz ist soweit i.o nur die frames sinken wieder(wie bei Archlinux). Wer das ganze mal mit der 1.4.0 noch mal versuchen.

Also nur als kleiner tip bevor sich jemand anderes die mühe umsonst macht. Verwendet die 1.4.0 und nicht die 1.4.1 ;)
 

Sledge

lonesome Cowboy
@Lonestar, Quellpakete habe ich immer mit der heiligen Linux Dreifaltigkeit configure, make und make install installiert, ist wohl die Macht der Gewohnheit :)

Bezüglich der hohen Latenz beim rtsp Server beschleicht mich das Gefühl, dass die rpicamsrc daran schuld ist. Evtl. passt die nicht zur 1.4.1.

Lonestar, Du hast doch erwähnt, dass man auch raspivid per pipe an den rtsp übergeben kann dann keinen rpicamsrc wrapper braucht. Hast Du zufällig einen Link dazu, dann versuche ich das später noch mal.

Ich habe den rtsp Server aus den Examples auch out of the box laufen lassen. Evtl. kann man da noch einige Einstellungen treffen und Cache oder ähnliches abschalten. Muss ich mir noch mal in Ruhe ansehen. Hattest Du bei Deinem Image noch etwas am Server verändert oder nur den Namen verbogen?
 

Lonestar78

Erfahrener Benutzer
Probiert doch mal rpicsmsrc in der normalen Pipeline. Also ohne raspivid. Das geht auch und sollt zeigen wo das Problem ist
 

Lonestar78

Erfahrener Benutzer
Hallo Zusammen,

habe wie angekündigt die App überarbeitet.
Changelog:
- Es gibt jetzt ein User Settings Menü: Eingach die App nach Start irgendwo anklicken und dann den Schraubenschlüssel oben rechts in der Action Bar klicken. Konfigurierbar: Netzwerk, die Gstreamer Pipeline und das HUD
- Das OMG/USB-Ethernet-Gedöns ist jetzt optional. Heisst: Die App sollte jetzt auch ohne Rootrechte tun, wenn man über das WLAN des Androids geht.
- HUD komplett anpassbar (Anzeige ja/nein: Timer ab Start, RSSI, User Settings, GStreamer Output)
- RSSI Abfrage für Ubiquiti jetzt über SNMP (Voraussetzung: SNMP enabled und Community = public)
- Die GStreamer-Pipelines sind in der Auswahl entweder die RTSP-Pipeline (dann aber mit fester Ziel-Adresse), die UDP Pipeline, eine TestPipeline (default) und eine Custom-Pipeline (die darf man komplett selbst schreiben, Nach Installation entspricht die der RTSP Pipeline).

Für den fleissigen Thread-Leser sollte das alles recht selbsterklärend sein.
Bilder:

So startet die App mit Testscreen. Oben rechts das Symbol für die Settings:
Screenshot_2014-09-07-13-24-33.png

Diverse Settings, besonders die GStreamer Konfig:
Screenshot_2014-09-07-13-25-37.png

Screenshot_2014-09-07-13-25-43.png

Screenshot_2014-09-07-13-25-54.png

Screenshot_2014-09-07-15-39-04.png


So siehts dann aus, wenn alle HUD Optionen an sind:
Screenshot_2014-09-07-13-26-38.png

Dateien:


Auch zu finden unter UPDATE 1. Post
 

Anhänge

Zuletzt bearbeitet:

Sledge

lonesome Cowboy
Mensch Lonestar, ein Knaller nach dem anderen! Vielen lieben Dank!

Das App läuft auf meinem htc one. Die direkte udp Verbindung funktioniert, reißt aber immer wieder ab und zeigt Fragmente. Das liegt aber an meinem Netzwerk, ich kann auch keine HD Filme über wlan streamen. Hoffentlich klappt das mit den Ubiquitis besser :) Zur Not muss ich mir auch so einen usb-otg Netzwerk Adapter kaufen obwohl ich den zusätzlichen Kabelaufwand eigentlich vermeiden möchte.

Eine Sache klappt bei mir aber noch nicht so richtig. Ich kann mich nicht auf den rtsp Server verbinden. Das App meldet immer "Error received from element rtspsrc1: Could not open resource for reading and writing"
Siehe Screenshot:

Screenshot_2014-09-07-23-57-13.png

Hast Du eine Ahnung woran das liegen kann?

Btw.: Die rtsp Verbindung über Windows klappt jetzt mit 150ms Verzögerung. Es lag tatsächlich so wie du vermutet hast an der Bitrate.
 

Sir.Frenz

Neuer Benutzer
Hi,

die App klingt jetzt schon richtig gut.
Leider will sie auf meinem gerooteten Samsung Galaxy S3 mit 4.1.2 nicht installiert werden.
"Fehler beim Parsen des Pakets", tritt dieser Fehler bei anderen auch auf, oder liegt das an meiner "alten" Android Version?

Allerdings klappt das Installieren auf meinem Asus Nexus 7 (Android 4.3) auch nicht, wegen Parsingfehler. :confused:
Was mache ich falsch?
 

digaus

Erfahrener Benutzer
Hi,

die App klingt jetzt schon richtig gut.
Leider will sie auf meinem gerooteten Samsung Galaxy S3 mit 4.1.2 nicht installiert werden.
"Fehler beim Parsen des Pakets", tritt dieser Fehler bei anderen auch auf, oder liegt das an meiner "alten" Android Version?

Allerdings klappt das Installieren auf meinem Asus Nexus 7 (Android 4.3) auch nicht, wegen Parsingfehler. :confused:
Was mache ich falsch?
Brauchst Android 4.4.2 :)
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten