De nombreux utilisateurs du centre multimédia KODI, qui fait partie de RetroOrangePi, ont probablement remarqué qu'ils utilisent un lecteur MPV externe, qui, contrairement au lecteur standard, prend en charge le décodage matériel. Cela vous permet de lire du contenu 1080P sans décalage, mais il y a un gros problème - la seule façon de contrôler le lecteur est via le clavier. De plus - le lecteur n'a même pas d'interface graphique minimale, donc quelle durée du film que vous regardez et combien il reste - hélas, vous ne pouvez pas le savoir.
J'avoue que je suis une personne très paresseuse, et il est très gênant de porter le clavier avec moi, étant donné que KODI lui-même est contrôlé depuis le téléphone. Après avoir googlé quelques minutes, j'ai été surpris d'apprendre qu'il n'y a pas de solutions toutes faites pour le contrôle à distance du monospace à partir d'un smartphone. Eh bien, que faire - vous devez vous écrire. Soit dit en passant, dans le centre de Vitebsk, acheter un clavier sans fil bon marché pour 1 heure de pause déjeuner - c'est une autre quête.
MPV prend en charge plusieurs langages de script, dont Lua. Sur Github, j'ai trouvé le projet
mpv-network-commandes , écrit en Lua et qui vous permet de contrôler un minimum de fonctions MPV en utilisant des commandes envoyées via UDP. Après m'être assuré que cela fonctionne, pendant la pause déjeuner, j'ai écrit une application simple qui implémentait les fonctionnalités les plus primitives - en fait, elle vous permettait de faire une pause, de démarrer la lecture à partir de la pause et de fermer le lecteur.
Cela ressemblait à quelque chose comme ça.
Afin de pouvoir rembobiner la vidéo, ainsi que de voir la barre de progression, j'ai dû modifier le script d'origine en ajoutant la fonction suivante:
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
Le plus drôle, c'est que le code qui traite les données entrantes depuis le côté du téléphone s'est avéré beaucoup plus lourd:
Et cela est toujours sans code de minuterie 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()) } }
Le résultat est le suivant:
Les codes source, ainsi que apk, sont sur le
github .
Je vous préviens tout de suite - il
peut y
avoir certains bugs.
Le principal inconvénient est que vous avez besoin d'une IP fixe pour le téléphone sur votre réseau local sur lequel OrangePi fonctionne. Il est nécessaire pour que le script sache où lui envoyer des informations sur le fichier en cours de lecture. La manière la plus simple - dans les paramètres du serveur DHCP de votre routeur, spécifiez de donner les mêmes périphériques IP avec l'adresse MAC du téléphone.
Il n'y a pas non plus d'éléments de sécurité - tout utilisateur de votre réseau peut suspendre la vidéo ou fermer le lecteur, connaissant l'IP du centre multimédia. Certes, pour savoir ce qui est reproduit et s'il est reproduit du tout - non.
Soit dit en passant, l'utilisation de l'échange de données via UDP sans aucune confirmation entraîne un effet secondaire - puisque la réception de données entrantes du lecteur tourne dans un flux séparé, vous pouvez mettre en pause / fermer le lecteur même si le script du serveur n'a pas indiqué l'adresse IP correcte de votre téléphone. L'essentiel est que vous connaissiez l'IP de votre centre multimédia.
L'installationAccédez à Desktop RetroOrangePi. Vous devez d'abord installer Lua et LuaSocket.
sudo apt-get install lua5.1 luasocket
Allez ensuite dans le répertoire /home/pi/.config/mpv/ et créez-y le répertoire lua.
Dans lua, copiez server.lua.
Ouvrez server.lua avec le même nano et en ligne
conn_up:sendto(title.."$"..length.."$"..pos, "192.168.100.168", 756);
remplacez l'adresse IP par l'adresse de votre téléphone.
Enregistrez et redémarrez OrangePi.
Installez l'application sur votre téléphone. L'apk assemblé se trouve sur Github. Exécutez-le, allez dans Paramètres. Définissez-y l'IP de votre Media Center et du port 755. Cliquez sur Enregistrer.
Tout peut être utilisé.