schneller Lifestream?

  • Hi @ all,

    ich hab einen Pi B und das normale Camera Modul V1.3.

    Ich möchte damit jetzt einen Videostream erzeugen, den ich mir im Webbrowser anschauen kann um damit ein RC-Car fernzusteuern. Anforderungen sind hierbei eigentlich 720p bei 60 Hz, was die Kamera ja kann und die (W)LAN Schnittstelle auch packen sollte (1080p über WLAN geht ja auch).

    Ich hab jetzt einige Tutorials ausprobiert, die alle auf dem MJPG-Streamer basieren und mit raspistill im /tmp Verzeichnis einzelne Bilder zwischenspeichern. Damit komme ich aber auch bei 320x240 kaum auf 3 fps... Ist also nicht zu gebrauchen.

    Mach ich irgendetwas falsch oder kennt ihr eine vernünftige Methode/Tutorial? Einen richtigen Webserver brauche ich eigentlich nicht. Soll nur den Stream auf einem Port rausgeben. Will den später in die NetIO App integrieren und die passenden Steuerelemente basteln.

    Bin für gute Ideen und Hilfe dankbar!

    Mfg Bimbo385

  • installiere dir VLC auf dem Rpi
    Eine Bash wie der z. B. oder in der console testen.

    Bash
    #!/bin/bash
    
    
    raspivid -o - -t 0 -h 720 -w 1280 -fps 25 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264

    cpu-Last liegt bei zwischen 10-20% wenn der Takt bei 950mhz liegt

    Empfängerseitig VLC Netzwerkstream öffnen: rtsp://xxx.xxx.xxx.xxx:8554/

    ich nutze den Stream in Zoneminder aber hier muss ich noch ?action=stream anfügen. Bei Tests hat sich gezeigt das so gut wie keine Verzögerung sichtbar ist.

  • Ich hatte auch erst das Problem, nach gefühlten 1000... Anleitungen hab ich die für mich ausreichende Lösung gefunden.

    Delay im Webbrowser = nicht erkennbar

    Pi verbunden via Ethernet (LAN) = läuft
    Pi verbunden via Ethernet (Wlan) = geht auch aber nur so 800x600 sonst ruckelts, aber kein direktes Delay wie bei anderen Lösungen

    Eckdaten:
    RaspberryPi B (1.000 MHz und aktivem 40x40 Lüfter)
    CPU-Last währen mjpeg Stream: ca. 45% bei 720p + 20% ksoftirq/d


    Das Streaming löse ich mit mjpg-streamer, Anleitung + benötigte Dateien gabs hier http://www.cam-in-box.de/?p=184.

    Aus dieser Anleitung hab ich mir aber nur den Streaming Part übernommen, und wie folgt angepasst:

    start_stream.sh


    Als Webserver hab ich mir dann noch Apache + PHP installiert und folgende HTML erzeugt:

    index.html

    HTML
    <!DOCTYPE html>
    <html>
     <head>
       <meta charset="UTF-8">
       <title>PiCam</title>
     </head>
     <body>
               <img src="http://192.168.249.112:9000/?action=stream" height="720px" width="1280px" alt="...">
     </body>
    </html>


    Wenn man den Stream nun auch noch in einem Python 3 Programm haben möchte, stößt man auf ähnliche Schwierigkeiten wie beim Streaming,
    daher hier noch ein Ansatz für Python 3, als Basis diente eine Umsetzung in Python 2.7.

    py3_viewer.py

    Einmal editiert, zuletzt von secpri (28. Juni 2015 um 12:31)


  • Läuft klasse, kleiner Tipp für alle die das hier nachvollziehen; secpri hat den Pfad von mjpg-streamer verändert und der VLC-Player macht ca. eine Sekunde Delay, die man über den Webbrowser nicht hat.

    Nochmal Danke!

    Kein Ding, immer gern, den Delay im VLC bkeommst du weg, wenn du die "Zwischenspeicherung" auf z.B. 10ms stellst :)

  • mjpg-streamer ist kein echter Video-Stream. Das verrät eigentlich schon der Anfang des Programm-Names "MJPG". mjpg-streamer nimmt in schneller Reihenfolge einzelne Bilder auf und streamt die JPEG Dateien... Es ist also kein echtes Video sondern nur eine Schnelle Aufnahme mehrerer Bilder, wodurch es nur so wirkt als sei es ein Video.


    Alternative: FAQ --> Nützliche Links / Linksammlung --> Verzögerungs freies Streamen (lowest streaming latency)


    Zu der mjpg-streamer Anleitung:

    Die "LD_LIBRARY_PATH" Zeile legt fest wohin die Plugins (input*.so und output*.so) installiert wurden und muss nur ein mal angegeben werden. Das nachfolgende ausführen von "/home/pi/cam/mjpg_streamer -i ..." usw kann/sollte in einer neuen Zeile stehen.

    Von der Installation eines ftpd Servers würde ich zudem auch abraten, das hat nichts mit Streamen zu tun und verballert zudem auch nur unnötig CPU+RAM. Wer Daten übertragen will sollte stattdessen WinSCP o.ä. verwenden, was einfach das bereits vorhandene SSH nutzt.

    apache2 ist auch nicht unbedingt eine gute Wahl - ist nur der verbreitetste aber CPU+RAM hungrigste und zudem auch eher langsamere Web-Server. Stattdessen würde ich nginx oder lighttpd auf dem PI bevorzugen.


    Auch finde ich den Schritt dem www-data volle Zugriffe via sudo zu geben, sehr sehr leichtsinnig. Zwar weißt er Anfangs darauf hin dass ers nur im LAN nutzt, sagt bei diesem Schritt aber nichts weiter dazu. Ein Anfänger weiß es aber nicht besser und folgt blind solchen Anleitungen, was aber böse ins Auge gehen kann. Nutzt stattdessen die Forumsuche nach: sudo webscript
    (steht auch in der "Linksammlung")


    Er verwendet zudem ein Script von mir, aber ohne Hinweiß auf die Quelle :-/ Na Hauptsache "© DuoBus"
    (cpu.php aka sysinfo.php)

    ...Naja, generell gäbe es bei seinen Dateien einiges was man anders machen sollte - angefangen bei dem zusammenführen der ganzen 2-Zeiler Dateien in nur eine, oder das zusammenfügen der 5 verschiedenen <form>'s sowie der Tatsache das bei jedem Drücken eines der Buttons die ganze Seite neu geladen wird ... Sowas wäre mir ein Dorn im Auge :X
    Beispiel:
    reboot_pi.php beinhaltet eigentlich nur eine Zeile: <?php exec("sudo /home/pi/rebootpi.sh"); ?>
    und rebootpi.sh eigentlich auch nur eine: sudo reboot
    Da wurde zum einen nicht verstanden was 'sudo' bewirkt - da das Script rebootpi.sh bereits mit sudo ausgeführt wird, ist ein erneutes "sudo" innerhalb des Scripts überflüssig.
    Aber zum anderen könnte man sich dieses Chaos über 10 verschiedene Dateien auch sparen -> entweder den "sudo reboot" Befehl direkt im reboot_pi.php ausführen lassen, oder index.html in index.php umbennen und direkt dort "exec()" verwenden und sich somit auch noch die anderen php Dateien sparen - oder was ich wichtiger fände da auch sicherer: ein einziges bash Script welches über sudo ausgeführt wird und zugleich eine weitaus höhere Sicherheit gewährleisten würde wenn man nur dieses eine Script in /etc/sudoers einträgt...
    Allerdings hab ich auch hierzu gemecker: An der Datei /etc/sudoers sollte man nicht direkt herumspielen da man sonst schnell Gefahr läuft sich auszusperren (wenn man die Syntax verbockt und kein pass für root gesetzt ist). Also wenn dann immer mithilfe des Programs visudo eine Änderung vornehmen!


    Aber oke ich bin jetzt lieber mal still :stumm:

  • Moin schaut euch mal das an, das teste ich gerade auf meinem Multicopter mit FPV und die latenzen liegen zwischen 80 und 120 ms und mit den richtigen Antennen drauf sind einige schon über 1,3 km geflogen damit .

    https://befinitiv.wordpress.com/wifibroadcast-…ive-video-data/

    Vieleicht sucht ihr genau das :thumbs1: ,Ich bin auch noch anfänger in sachen Raspberry PI das hat sofort funktioniert, und besorgt euch eine Weitwinkel Kamera für FPV die normale ist nicht gut zum fliegen :D .

    Gruß Rene

    Einmal editiert, zuletzt von bubu10 (6. Juli 2015 um 08:53)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!