Télécommande PHP OMX Player

Photographie ultra-rapide, pilotage d'imprimante 3D ou de CNC, fabrication de bière.... Enfin tout ce que le Raspberry peut gérer trouvera sa place dans cette rubrique

Modérateur : Francois

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Télécommande PHP OMX Player

Message par Xorax » dim. 10 déc. 2017 20:14

Bonsoir à tous :D,

J'ai pour projet de créer une interface web répertoriant les séries et films d'un dossier et de pouvoir les lires sur mon raspberry depuis cette interface.
J'ai donc créer un dossier avec plusieurs films, créer ma page php qui m'affiche les différents films.
Si je clique sur un film cela va le lancer sur mon raspberry via omxplayer à l'aide d'un un script python exécuté en php.
Jusqu'ici pas de problèmes.

Je souhaite ensuite via une page php contrôler la vidéo lue sur le raspberry (mettre en pause, baisser/augmenter le volume,...).
Les commandes omxplayer sont des entrées clavier : p pour pause, - baisser volume, + augmenter volume...

Je voulais d'abord simuler des entrée clavier à chaque appui de boutons de ma page php (par exemple avec xdotool), sans succès.
Je me suis un peu renseigné et il faudrait créer un "pipe" et modifier un fichier pour chaque entrées clavier...
Tout ça me semble assez compliqué (je débute) et tout ce qui est fait est assez poussé..

Si l'un de vous aurait une autre solution ou voudrait bien m'expliquer comment configurer et utiliser ce fameux '"pipe" il est le bienvenue.


Merci d'avance.
Bonne soirée.

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Télécommande PHP OMX Player

Message par Barbedouce » lun. 11 déc. 2017 15:44

Bonjour,

Cela me semble intéressant de continuer a simuler le clavier, si tu n'as pas réussi avec PHP, peut-être avec Python est-ce plus facile ?
J'ai vu un PyAutoGui qui peut être bien sympa a prendre en mains, voila le lien pour les lignes de codes "clavier" :
https://pyautogui.readthedocs.io/en/lat ... sheet.html
Il y a dans la doc les explications pour installer et paramétrer le soft.

Un pipe n'est pas nécessairement quelque chose de complexe, il s'agit d'une fonction "flux de redirection" en bash , représenté par le symbole |

Code : Tout sélectionner

cat file.txt | grep 007
Ici, la ligne peut se lire de droite a gauche, en traduction algorithmique ça donnerai : cherche "007" dans le fichier file.txt
"cat file.txt" tout seul afficherai tout le fichier dans un terminal, avec le pipe on reconduit la sortie de cat a la fonction grep.


Si tu veux un coup de main, hésite pas a continuer le sujet, partager ton code, ou montrer tes rapports d'erreurs, la c'est un peu light pour t'aider plus... :)

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: Télécommande PHP OMX Player

Message par Xorax » lun. 11 déc. 2017 22:43

Bonsoir Barebedouce !
Merci pour ta réponse.

En fait j'utilisais déjà des pipe sans savoir que ça avait ce nom :D

J'ai voulu essayer PyAutoGui :
Déjà j'ai eu beaucoup de mal à l'installer, j'ai donc réussis en l'installant directement depuis le pi (en ssh).
J'ai donc créer un petit script python :

#!/usr/bin/env python3
import pyautogui
pyautogui.typewrite('Hello', interval=1)

Lorsque je l'exécute directement dans le terminal du pi (non en ssh) ca fonctionne sans soucis, j'ai bien 'hello' qui s'écrit.
La commande pour l'exécuter : python3 Test.py

En revanche si je veux l'exécuter en ssh (via putty), j'ai le message d'erreur suivant :

Traceback (most recent call last):
File "Test.py", line 3, in <module>
import pyautogui
File "/usr/local/lib/python3.4/dist-packages/pyautogui/__init__.py", line 115, in <module>
from . import _pyautogui_x11 as platformModule
File "/usr/local/lib/python3.4/dist-packages/pyautogui/_pyautogui_x11.py", line 160, in <module>
_display = Display(os.environ['DISPLAY'])
File "/usr/lib/python3.4/os.py", line 633, in __getitem__
raise KeyError(key) from None
KeyError: 'DISPLAY'

j'avoue ne pas trop comprendre, est-ce mon installation qui a mal été faite ?
J'ai essayé d'exécuter le script python via un script bash et exécuter celui ci en ssh, sans succès.
Si cette erreur survient, je pense qu'il sera de même via php.

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Télécommande PHP OMX Player

Message par Barbedouce » mar. 12 déc. 2017 00:12

Je me lance dans l'explication d'un truc que je n'ai jamais fait, ce message te donne des pistes de recherches et pas une solution miracle.

Lorsque tu lances OMX player par ligne de commandes, tu le lances dans un terminal ( admettons tty1 ).
Si tu tapes tes raccourcis OMX dans un autre terminal (tty2), cela ne va rien faire, et c'est ce que tu fais quand lances ton script par ssh (outre le fait qu'il peut y avoir des droits mal gérés, etc... ).
Il faut réussir a faire une commande qui saisisse ton texte après la commande qui lance OMX player, je pense.

Donc dans ton script python qui lance OMX, tu rajoutes le code qui fait écrire "p" pour pause au bout de une minute, et après SI ça marche, tu peux changer la condition de 1min par une condition qui t'arrangera ( commandable par ssh ou autre ).

Mais puisque ton Rpi fera serveur, et que le PHP communique au Python, en utilisation "télécommande par téléphone", ton application n'utilisera pas ssh.

La manière la plus brutale pour le matériel sans trop avoir réfléchit : Le script vérifie toutes les 3 secondes qu'un fichier texte contient bien "0". Si oui, alors ne rien faire. S'il contient 1 : faire pause et écrire 0 dans le fichier, s'il contient 2, faire l'action 2 et remettre 0 dans le fichier...
Ça serait plutôt mauvais pour les performances du pi, mais ça te permet de voir qu'il y a toujours une solution... Après il faut optimiser. :-p

J'ai un peu l'impression de réfléchir a l'aveugle, j’espère t'aider un peu quand même ! :lol:

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: Télécommande PHP OMX Player

Message par Xorax » mar. 12 déc. 2017 22:58

Bonsoir à toi !

Merci encore de ton aide, ça m'est super utile et intéressant !
J'ai donc tester un script simple qui lance OMX player et 5 secondes plus tard simule la touche 'q'.
Le problème c'est que lorsque OMX player se lance, celui ci-attend une commande (entrée clavier) avant toute autre action.
Donc tant que je n'ai pas quitter OMX player, mon script python va se mettre en pause puisque la commande n'est pas terminée.
Quand je le quitte rebelotte, j'ai la même erreur qu'hier (surement normal il n'y a plus de vidéo).

Je me suis donc demandé si je ne fesais pas fausse route et j'ai donc jeté (à nouveau) un oeil à ce lien.
Je comprend un peu mieux mais je n'y arrive toujours pas. Je ne comprend pas tout à fait son script :

#!/bin/sh
setterm -term xterm -cursor off -clear -blank 0 -powersave off -powerdown 0 >/dev/tty1
omxplayer -p -o hdmi $1 < /var/www/omxPipe > /dev/null 2>&1 &
sleep 1
echo -n . > /var/www/omxPipe

Il lance son OMX player avec comme paramètre le chemin de sa vidéo, en entrée son pipe qui doit contenir l'entrée clavier envoyée par son php ?
Je ne comprend pas la première ligne pourtant elle doit avoir son importance. Et que contient réellement son pipe ? Juste une instruction du type 'echo [touche clavier]' ? Son script est il appellé tout les x temps (ce qui serai étonnant sinon il y aurait plusieurs fois omx player de lancé) ?

Je pense comprendre le principe (en tout cas ne pas être loin :lol: ) mais pas vraiment la traduction en code.

J'ai également regardé ce git. Ca semble être exactement ce que je veux faire mais en très complet et donc assez complexe à comprendre.

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Télécommande PHP OMX Player

Message par Barbedouce » mer. 13 déc. 2017 00:03

Xorax a écrit :[...]
#!/bin/sh
setterm -term xterm -cursor off -clear -blank 0 -powersave off -powerdown 0 >/dev/tty1
omxplayer -p -o hdmi $1 < /var/www/omxPipe > /dev/null 2>&1 &
sleep 1
echo -n . > /var/www/omxPipe
[...]
On analyse ça ensemble :
La première ligne fait rester sur le terminal 1 (tty1).
La seconde ligne est le cœur du script :
En bash, on utilise $0 pour récupérer le nom du script, et les $1 et $2 suivants sont faits pour les arguments.
Exemple : Si je lance

Code : Tout sélectionner

./script.sh /db/film.avi 
$0 = script.sh ; $1 = /db/film.avi ; $2 = s'il y a un deuxième argument, etc... ;
Donc le $1 contient certainement le lien vers le film.
Il utilise le chevron < pour y injecter le contenu de /var/www/omxPipe
Et il utilise > /dev/null 2>&1 & pour renvoyer les réponses et erreurs vers un vide (/dev/null), il ne souhaite pas avoir un fichier d'erreur... plus d'infos ici : http://www.lanterne-rouge.info/article- ... 33357.html
Après il s’arrête une seconde je suppose pour éviter des petits bugs, et il écrit une entrée (echo -n) et un point a la ligne d'en dessous sur le fameux omxPipe.
Pour moi, il manque du code pour qu'il soit complet : le code de la "télécommande", ce script est a peu près la même idée que je te donnais dans mon précédent post.

D’après ce que tu me dis, le "sleep 1" n'est pas interprété jusqu’à ce que la commande d'omxplayer soit finie ( par exemple, film terminé ).
Donc il faut réussir a savoir s'il prend "en permanence" l’entrée du /var/www/omxPipe grâce au chevron "<" ? C'est fort possible.
Par exemple, tu lances un film avec cette commande ou ce script, et pendant la lecture, tu ouvres ton fichier omxPipe, tu écris un raccourcis omx dedans, tu sauvegardes ton fichier, et la il devrait le prendre directement. Si c'est pas ça, alors je sèche.
Pour le git, je crois que son installation se résume a un "git clone #adresse du git#" dans ton répertoire /var/www et a lancer setup.php via navigateur, peut-être est-ce la solution de facilité ( si tu as déjà du PHP qui tourne, tu n'es plus a ça près : tu as déjà apache, etc...) .

On avance ? :mrgreen:

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: Télécommande PHP OMX Player

Message par Xorax » mer. 13 déc. 2017 14:52

Merci pour le décryptage !

Je vais donc ce soir, essayer d’exécuter un petit script du genre :
#!/bin/sh
setterm -term xterm -cursor off -clear -blank 0 -powersave off -powerdown 0 >/dev/tty1
omxplayer -p -o hdmi [chemin_de_ma_video] < [chemin_de_mon_fichier_pipe]

Normalement ma vidéo devrai donc se lancer (mon fichier pipe doit surement être vide au départ). Je me demandais de quel type était ce fichier ? Est ce qu'il n'a justement simplement pas de type ?
Si ma vidéo se lance je vais ensuite essayer depuis une autre console d'écrire la lettre 'q' dans le fichier pipe, la vidéo devrai logiquement se fermer.

Le git c'est un peu la solution de facilité en effet :lol:. Si vraiment je n'y arrive pas je ferais comme ça...

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Télécommande PHP OMX Player

Message par Barbedouce » mer. 13 déc. 2017 18:05

Sous linux, l'extension des fichiers n'est la qu'a titre indicatif pour l'utilisateur : tu peux appeler une image .txt, ça changera pas l'image, si tu l'ouvres avec un visionneur d'image !
Donc oui, tu peux laisser le fichier sans extension, ou même mettre une extension perso genre : "telecommande.pipe".
Ton message montre que tu as compris le principe. ;)
Peut-être que le " > /dev/null 2>&1 & " est intéressant a conserver pour ne pas pourrir la console dont tu te sert et éviter des bugs, je ne sais pas fait tes tests.
C'est en forgeant qu'on forgeronne !

Xorax
Messages : 9
Enregistré le : dim. 12 nov. 2017 18:42

Re: Télécommande PHP OMX Player

Message par Xorax » ven. 15 déc. 2017 19:13

Barbedouce a écrit :Sous linux, l'extension des fichiers n'est la qu'a titre indicatif pour l'utilisateur : tu peux appeler une image .txt, ça changera pas l'image, si tu l'ouvres avec un visionneur d'image !
Ahah je suis démasqué en tant que débutant de linux :lol:

Bon (avec un peu de retard par rapport à ce que j'avais annoncé), je viens d'essayer.
J'ai donc créer un dossier "OMX" sous le répertoire /home/pi.
Dans ce dossier un script appelé "script.sh" contenant :

!/bin/sh
omxplayer -p -o hdmi /home/pi/Partage/Series/Mr.Robot/S3/Episode_2.avi < /home/pi/OMX/telec > /home/pi/OMX/error 2>&1 &
sleep 1
echo -n . > /home/pi/OMX/telec

Un second fichier "telec" vide et un troisième fichier vide "error".
Je lance mon script, mon épisode se lance.
je saisis la commande suivante : "echo q > /home/pi/OMX/telec", donc mon épisode était censé s'arrêter et...... rien ne se passe :?

J'ai essayé d'exécuter mon script avec la lettre q dans le fichier 'telec', une fois le script exécuté si j'affiche le fichier "telec" il contient '.', ce qui voudrait dire que OMX n'attend pas forcément une entrée clavier pour "continuer" ? De plus en ajoutant la ligne "setterm -term xterm -cursor off -clear -blank 0 -powersave off -powerdown 0 >/dev/tty1 " il y a toujours une petite erreur qui traine...

Je vais essayer de peaufiner un peu, notamment en regardant le projet git mais là j'avoue que je commence à désespérer :lol:.

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Télécommande PHP OMX Player

Message par Barbedouce » dim. 17 déc. 2017 14:08

Mh, je peux pas vraiment t'aider plus sans avoir un pi sous la main, et la justement, j'en ai pas...
Continues de raconter la suite, sait-on jamais.

Lorsque tu lances ton script avec la lettre Q dans "telec", le fichier se joue, ou il s’arrête ?

Répondre

Retourner vers « Les applications spécialisées du Raspberry Pi »