Viele Benutzer des KODI Media Centers, das Teil von RetroOrangePi ist, haben wahrscheinlich bemerkt, dass sie einen externen MPV-Player verwenden, der im Gegensatz zum regulären Player Hardware-Dekodierungsunterstützung bietet. Auf diese Weise können Sie 1080P-Inhalte ohne Verzögerungen wiedergeben. Es gibt jedoch ein großes Problem: Die einzige Möglichkeit, den Player zu steuern, besteht über die Tastatur. Darüber hinaus verfügt der Player nicht einmal über eine Mindest-GUI. Welche Dauer des Films Sie sehen und wie viel bis zum Ende übrig bleibt, können Sie leider nicht herausfinden.
Ich gebe zu, dass ich eine sehr faule Person bin und es sehr unpraktisch ist, die Tastatur bei sich zu haben, da KODI selbst vom Telefon aus gesteuert wird. Nachdem ich ein paar Minuten gegoogelt hatte, war ich überrascht zu erfahren, dass es keine vorgefertigten Lösungen für die MPV-Fernsteuerung von einem Smartphone aus gibt. Nun, was zu tun ist - du musst selbst schreiben. Übrigens, wie sich herausstellte, im Zentrum von Witebsk eine preiswerte drahtlose Tastatur für eine Stunde Mittagspause zu kaufen - das ist eine weitere Aufgabe.
MPV unterstützt mehrere Skriptsprachen, eine davon ist Lua. Auf Github habe ich das in Lua geschriebene Projekt
mpv-network-command gefunden, mit dem Sie ein Minimum an MPV-Funktionen mithilfe von Befehlen steuern können, die über UDP gesendet werden. Nachdem ich sichergestellt hatte, dass es funktioniert, schrieb ich während der Mittagspause eine einfache Anwendung, die die primitivsten Funktionen implementierte. Tatsächlich konnten Sie pausieren, die Wiedergabe ab Pause starten und den Player schließen.
Es sah ungefähr so aus.
Um das Video zurückspulen und den Fortschrittsbalken sehen zu können, musste ich das ursprüngliche Skript ändern, indem ich die folgende Funktion hinzufügte:
function send_name() local title =mp.get_property("media-title"); local length = math.floor(mp.get_property("length")); local pos=math.floor(mp.get_property("time-pos")); conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756); end
Das Lustige ist, dass der Code, der die eingehenden Daten von der Seite des Telefons verarbeitet, sich als viel umständlicher herausstellte:
Und das ist immer noch ohne Timer-Code thread { // this thread receives incoming massages from MPV and updates views accordingly to received info try { chnl.socket().bind(InetSocketAddress(756)) chnl.configureBlocking(false) var timerStarted: Boolean = false var timer = Timer() while (true) { var buf = ByteBuffer.allocate(1024) buf.clear() var last_pos = "" if (!timerStarted) { timer = Timer() timer.schedule(myTimerTask(textView5, textView6, textView4, seekBar3), 2000, 1000) //this timer will clear views, if no info received in last 2 seconds timerStarted = true } if (chnl.isOpen) { if (chnl.receive(buf) != null) { if (timerStarted) { timer.cancel() timerStarted = false } var data_length = buf.position() buf.flip() var str = String(buf.array(), 0, data_length, UTF_8) Log.d("received data", str) val arr = str.split("$") if (arr.size >= 3) { media_length = arr[1].toInt() runOnUiThread { if (textView4.text != arr[0]) textView4.text = arr[0] if (last_pos != arr[1]) { last_pos = arr[1] textView6.text = convertSecsToFullTime(last_pos) } if (!blockview) { textView5.text = convertSecsToFullTime(arr[2]) seekBar3.max = arr[1].toInt() seekBar3.progress = arr[2].toInt() } } } } } } } catch (e: Exception) { runOnUiThread { Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show() } Log.d("In MPVremote", e.message.toString()) } }
Das Ergebnis ist folgendes:
Die Quellcodes sowie apk befinden sich auf dem
Github .
Ich warne Sie sofort - es
kann bestimmte Fehler geben.
Der Hauptnachteil besteht darin, dass Sie eine feste IP für das Telefon in Ihrem lokalen Netzwerk benötigen, auf dem OrangePi ausgeführt wird. Es ist notwendig, damit das Skript weiß, wohin es Informationen über die abgespielte Datei senden soll. Der einfachste Weg - Geben Sie in den Einstellungen des DHCP-Servers Ihres Routers an, dass dieselben IP-Geräte mit der MAC-Adresse des Telefons angegeben werden sollen.
Es gibt auch keine Sicherheitselemente - jeder Benutzer in Ihrem Netzwerk kann das Video anhalten oder den Player schließen, wenn er die IP des Media Centers kennt. Richtig, um herauszufinden, was reproduziert wird und ob es überhaupt reproduziert wird - nein.
Übrigens führt die Verwendung des Datenaustauschs über UDP ohne Bestätigung zu einem Nebeneffekt. Da der Empfang eingehender Daten vom Player in einem separaten Stream ausgeführt wird, können Sie den Player anhalten / schließen, auch wenn das Serverskript nicht die richtige IP-Adresse Ihres Telefons angegeben hat. Die Hauptsache ist, dass Sie die IP Ihres Media Centers kennen.
InstallationGehen Sie zu Desktop RetroOrangePi. Zuerst müssen Sie Lua und LuaSocket installieren.
sudo apt-get install lua5.1 luasocket
Wechseln Sie dann in das Verzeichnis /home/pi/.config/mpv/ und erstellen Sie dort das Verzeichnis lua.
Kopieren Sie in lua server.lua.
Öffnen Sie server.lua mit dem gleichen Nano und in der Linie
conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756);
Ersetzen Sie die IP-Adresse durch die Adresse Ihres Telefons.
Speichern Sie OrangePi und starten Sie es neu.
Installieren Sie die Anwendung auf Ihrem Telefon. Die versammelte apk liegt auf Github. Führen Sie es aus und gehen Sie zu Einstellungen. Stellen Sie dort die IP Ihres Media Centers und des Ports 755 ein. Klicken Sie auf Speichern.
Alles kann benutzt werden.