Stream in C# am Raspberry

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich arbeite derzeit an einem Projekt in dem unter anderem ein Stream der Raspberry Camera direkt in einem C#-Programm angezeigt werden soll. Dieses Programm läuft auf dem selben Raspberry Pi (ja ein C#-Programm - ist Teil des Projekts) auf der grafischen Oberfäche (der Raspberry Pi wird über HDMI an einen TV angeschlossen).
    Im Endeffekt soll also der Raspberry einen Stream der Kamera erzeugen und diesen an einen Player weiterleiten der in einem C#-Programm eingebunden werden kann. Als Player verwende ich MPlayer, damit funktioniert auch schon die Einbindung in ein C#-Programm.
    Das Problem ist aber derzeit eine extreme Verzögerung von ca. 1 Minute, außerdem wird alles in extremer Zeitlupe abgespielt. Diese Verzögerung tritt aber auch schon beim Streamen direkt in MPlayer auf (hat also nichts mit C# zu tun).
    Der Befehl den ich verwende ist folgender:

    Code
    raspivid -n -fps 25 -w 620 -h 480 -t 0 -o - | mplayer -fps 25 -nosound -cache 1024 -nofs -noquiet -identify -slave -nomouseinput -sub-fuzziness 1  -vo direct3d, -ao dsound -

    Zuerst einmal eine grundsätzliche Frage: Ist mein Vorhaben auf dem Raspberry Pi überhaupt realisierbar (mit einer maximalen Verzögerung von 0,5-1 Sekunde) oder braucht MPlayer zum abspielen des Videos einfach zu viele Ressourcen?
    Liegt das Problem an den Parametern die ich verwende bzw. fehlen welche?
    Hat jemand eine andere Idee den Raspberry Camera Stream in ein C#-Programm zu bekommen?

    Über Hilfe & Tipps würde ich mich sehr freuen! :helpnew:

    Grüße,
    Sem17

  • Zum Einen kanns am Memory Split liegen... Mit [font="Courier"]raspi-config[/font] kannst du ja mal verschiedene (hohe) Werte testen, ob diese erfolgversprechend sind (Reboot nach dem Ändern nicht vergessen).

    Über eine kurze Google-Recherche bin ich auf diese *Click* Seite gestoßen, die eine weitere Methode zum Streamen beschreibt. Vielleicht wäre das was für dich...

  • Zuerst einmal vielen Dank für die Antwort. :)

    Ich habe nun mit verschiedenen Werten beim Memory Split herumgespielt, jedoch habe ich keinerlei Veränderungen feststellen können. Die Verzögerung ist z.B. bei [font="Courier"]64 [/font]und [font="Courier"]256 [/font]exakt gleich lange (habe derzeit ~45 Sekunden).

    Die andere Methode zum Streamen habe ich natürlich auch schon vorher getestet, jedoch habe ich das ganze jetzt noch einmal probiert - leider ohne Erfolg.
    Da ich ja auf dem Raspberry lokal den Stream wieder geben will habe ich die IP-Adresse auf [font="Courier"]localhost [/font]geändert, sprich zwei Konsolenfenster auf der grafischen Oberfläche geöffnet und zuerst diesen Befehl ausgeführt...

    Code
    nc -l -p 5001 | mplayer -fps 25 -cache 1024 -


    ...und dann diesen:

    Code
    raspivid -t 0 -fps 25 -w 620 -h 480 -o - | nc localhost 5001


    Die Verzögerung ist aber leider noch immer vorhanden bzw. sogar noch mehr..


    Hier einmal der Log vom MPlayer, wenn ich den Befehl, den ich im ersten Beitrag geschrieben habe ausführe. Vielleicht kann da jemand etwas herauslesen:

    Als Notlösung (falls die Variante mit dem MPlayer einfach nicht möglich ist) habe ich gerade folgendes getestet:

    Code
    raspivid -p 600,300,620,480 -fps 25 -w 620 -h 480 -t 0 -o


    Es wird also einfach das Video als Preview mit einer bestimmten Größe an einer bestimmten Position ausgegeben - da ist dann auch keine Verzögerung vorhanden. Die Größe und die Position würde ich dann so anpassen das es gut in mein C#-Programm passt. Zwar nicht die schönste Lösung, aber auf jeden Fall besser als 1 Minute Verzögerung..

Jetzt mitmachen!

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