Frage:
Synchronisieren von Videos auf mehreren Raspis
puk
2013-10-18 10:10:02 UTC
view on stackexchange narkive permalink

Ich möchte einen Feed synchronisieren (dh diese Super-Maly-Kampfszene von Puss and Boots ... nehmen wir an, ich habe ihn auf der Festplatte und in .h264 ) über 3 Raspis (über ein Netzwerk), die jeweils an einen HD-Monitor angeschlossen sind, für insgesamt 3 HD-Monitore. Ich kann dies leicht über mplayer tun, wie hier beschrieben, und über VLC, wie hier beschrieben, aber keiner von beiden läuft auf Raspi auf irgendeine nützliche Weise, da sie die Hardwarebeschleunigung nicht ausnutzen.

Welche Optionen stehen mir zur Verfügung, entweder mit OMXplayer (Raspbian OS), Raspbmc (Raspbmc OS) oder mit XBMC ( XBMC OS)

Jetzt haben die Leute die H / W-Videowiedergabe erfolgreich zu vlc hinzugefügt: http://raspberrypi.stackexchange.com/questions/3399/vlc-hardware-acceleration
@xiaobai Als Sie das sagten, hörte ich nur ein göttliches "aaaaaaaaa"
@xiaobai Für alle, die an die Installation von vlc denken, ist es eine wichtige PITA. Ich bin seit über 10 Tagen und Nächten dabei und das Beste, was ich bekommen habe, ist, das Ding tatsächlich zu installieren, ohne dass es Codecs findet.
Kannst du nicht einfach die kompilierte VLC-Binärdatei verwenden, die dieser Typ angeboten hat? http://intensecode.blogspot.com/2013/10/tutorial-vlc-with-hardware-acceleration.html
@xiaobai Ich habe das versucht und es hat ** immer noch ** nicht funktioniert.
Sechs antworten:
#1
+2
Penghe Geng
2013-10-18 22:31:31 UTC
view on stackexchange narkive permalink

omxplayer ist nicht annähernd so funktionsreich wie mplayer oder vlc . Ich glaube nicht, dass die Synchronisierungsfunktion in der aktuellen Version von omxplayer enthalten ist. Möglicherweise können Sie mit einigen manuellen Methoden ein gewisses Maß an Synchronisation zwischen verschiedenen Stationen erreichen, wie unten beschrieben:

Die aktuelle (Github-) Version von omxplayer kann über gesteuert werden dbus . (Die Standardversion von raspbian wheezy ist eine alte Version ohne diese Funktion, als ich sie das letzte Mal überprüft habe). Ein Ansatz könnte also darin bestehen, ein kleines Programm zu schreiben, das 1) im Netzwerk sitzt und UDP-Befehle von Ihrem Steuergerät empfängt. dann 2) sendet entsprechende dbus-Nachrichten an den omxplayer -Prozess.

Wenn Sie dies nur schnell und schmutzig tun möchten, können Sie Ihren eigenen UDP-Server-Thread in omxplayer hinzufügen und einfach einfügen Steuern Sie Nachrichten (wie KeyConfig :: ACTION_PAUSE ) direkt an OMXControl::getEvent().

Um mehrere Raspis auf diese Weise zu synchronisieren, müssen Sie Der Omxplayer-Quellcode muss geändert werden, damit der Player zu Beginn der Wiedergabe pausiert. Anschließend sendet Ihr Steuergerät einen Pause-Befehl, mit dem alle Omxplayer gleichzeitig zu spielen beginnen. Alle späteren Befehle werden an alle Raspberry Pi gesendet, damit sie synchron bleiben.

Danke, ich werde das untersuchen und wenn ich es zum Laufen bringe, werde ich es hier als Antwort posten
Ich war also tatsächlich damit beschäftigt, nach einer Lösung für dieses Problem zu suchen (UDP-Streaming, VLC für Raspi, Omxplayer-Sync und gleichzeitiges Starten von Omxplayer), und keine hat wirklich funktioniert. Ich werde Ihren Vorschlag hier versuchen, aber könnten Sie bitte einige dieser Probleme ansprechen: Stimmt etwas mit dem "dbus-Ansatz" nicht oder sind die Absätze 2 und 3 Teil derselben Lösung? Sind die Absätze 2,3 und 4 grundsätzlich alle unterschiedliche Lösungen?
Meinen Sie auch diese Version von Omxplayer: https://github.com/popcornmix/omxplayer
@puk nichts falsch mit dem dbus-Ansatz. Sie benötigen lediglich ein weiteres kleines Programm, um die Inter-Pi-UDP-Kommunikation zu verwalten. Die Absätze 2 und 3 sind zwei Lösungen, und Absatz 4 gilt für beide.
Ich bin dagegen, irgendetwas zu benutzen, wenn "Omxplayer" läuft. omxplayer-sync zum Beispiel bleibt sogar auf 720p https://github.com/turingmachine/omxplayer-sync zurück
#2
+2
thewade
2013-10-20 03:30:56 UTC
view on stackexchange narkive permalink

Es gibt ein Projekt, das ich unter www.raspberrypi.org gesehen habe und das eine Videowand erstellt hat. Die Projektseite befindet sich unter www.piwall.co.uk. Könnte nützlich sein, ich habe es nicht selbst versucht.

#3
+1
puk
2013-12-10 02:48:21 UTC
view on stackexchange narkive permalink

Ich habe Omxplayer um Synchronisierungsfunktionen erweitert. Sie können das Repo hier überprüfen. Beachten Sie, dass dies noch in der Entwicklung ist. Nach meinem besten Wissen ist dies jedoch die einzige Möglichkeit, eine zuverlässige Synchronisation über mehrere Raspis hinweg zu erreichen.

#4
+1
Paco
2014-03-21 23:47:44 UTC
view on stackexchange narkive permalink

Schauen Sie sich https://github.com/turingmachine/omxplayer-sync an, es synchronisiert mehrere Pi mit dem unveränderten Omxplayer, nur einem Python-Programm.

#5
  0
10robinho
2013-10-18 23:31:19 UTC
view on stackexchange narkive permalink

Mit Gstreamer und seiner vollständigen Unterstützung können Sie es problemlos schaffen. Auf Rasbpian gibt es vorkompilierte Pakete, die Sie verwenden können.

Vom Server können Sie Dateien mit RTP streamen. Auf Clients können Sie einfach einen Playbin ausführen und das wars. Alle 3 gleichzeitig.

Danke für die Information. Könnten Sie bitte etwas mehr angeben, zum Beispiel, was genau ist Gstreamer, sind dies "vorkompilierte Pakete" von Gstreamer oder synchronisiertem Omxplayer mit Gstreamer, was ist RTP, was ist Playbin und "Alle 3" was? =)
Ah, willkommen in der schönen Welt. Da die Idee etwas Besonderes ist, sollten Sie spezielle Software wie Gstreamer verwenden. Für den Start würde ich vorschlagen, es auf Ihrem PC zu installieren und zu versuchen, `gst-launch-1.0 playbin uri = file: /// home / user / your / movie.mp4` auszuführen. Verwenden Sie dann Google, um herauszufinden, dass Sie verschiedene Pipelines in der Befehlszeile erstellen können. Pipelines können gestreamt, abgespielt, konvertiert oder [Sie wählen]. Wenn Sie Raspbian auf RPI verwenden, können Sie diesem Link (http://www.raspberrypi.org/phpBB3/viewtopic.php?p=293634#p293634) für Pakete folgen, die gstreamer-1.0 und die Wiedergabe unterstützen, ohne X zu starten.
Und rtp ist nur ein Protokoll, das Sie für das Netzwerk-Streaming von h264-Dateien verwenden müssen. Sie erstellen RTP in der Pipeline (google it). Mit 'alle 3' meinte ich alle 3 Ihrer RPIs im Netzwerk.
Ich habe gstreamer nicht ausprobiert, aber ich habe versucht, von vlc (auf einem Desktop) zu streamen, und es war katastrophal, als würde ich mir die verschlüsselten Kanäle für Erwachsene in den frühen 90ern ansehen. Ich bin auf einen Thread gestoßen, in dem jemand ein ähnliches Problem hatte, und es hatte anscheinend etwas mit den Speicherbeschränkungen der Raspi zu tun. Kannst du vielleicht einen Kommentar abgeben, bevor ich noch 100 Stunden meines Lebens in ein Linux-Unternehmen investiere =) Danke
#6
  0
puk
2013-11-06 02:47:18 UTC
view on stackexchange narkive permalink

Ich habe eine mögliche Lösung gefunden, die jedoch nicht perfekt ist. Ich habe ein Testskript auf Git Hub, das versucht, in meinem Fall 2 Threads zu starten, die jeweils Omxplayer auf zwei verschiedenen Raspis aufrufen. Das Programm wählt eine Zeit in der Zukunft aus, um den Start von Omxplayer zu synchronisieren, d. H. (Genau 12:00:00 oder in 5 Sekunden), dann wartet ein Shell-Skript so gut es geht und dann werden hoffentlich die beiden Raspis gleichzeitig gestartet. Derzeit werden 90% der Versuche mit einem Unterschied von weniger als 100 ms gestartet. Die Audioverzögerung ist jedoch immer noch spürbar. Ich verstehe das so, dass entweder das menschliche Ohr extrem empfindlich ist oder das Starten von omxplayer und das Abspielen des Films zwei verschiedene Dinge sind.

Außerdem gehe ich davon aus, dass die beiden Raspis nach dem Start und bei reibungsloser Wiedergabe das Video mit genau derselben Geschwindigkeit abspielen.

Wenn Sie nur Audio von a abspielen möchten aus einer Hand (dh einem Heimkinosystem) sollte diese Lösung ausreichen.

Warnung:

Wie es ist, hat der Code einen Fehler, bei dem jeder 1 von 100 Mal nur hängt.

Dies ist keine gute Lösung. Selbst wenn es funktioniert, wird die Drift nach 30 Minuten spürbar sein


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...