Re: Télécommande PHP OMX Player
Posté : lun. 18 déc. 2017 14:03
Bonne nouvelle ! J'ai trouvé une autre solution qui fonctionne plutôt bien.
En cherchant un peu, je suis tombé sur ce lien.
A la différence de ce que l'on testait, c'est qu'il utilise un programme python et une bibliothèque "subprocess" pour gérer les commandes linux.
Avec cette ligne "stdin=subprocess.PIPE", le stdin de la commande sera directement relié au pipe.
En paramètre de mon programme j'envoi donc le chemin de ma vidéo, ma vidéo se lance puis arrive une boucle infinie.
Dans la boucle infinie je vais vérifier et ce que contient le fichier "Telec" toutes les 1sec puis écrire "." dedans.
En fonction de ce qu'il y a écrit dans mon fichier "Telec" je déclenche la méthode "play_process.stdin.write([commandeOMX])".
J'écris dans mon fichier "Telec" avec des commandes PHP en fonction des boutons appuyé sur ma page.
Par exemple si j'appui sur le bouton pause de ma page PHP :
- On écrit "p" dans le fichier "telec"
- Le programme python va détecter "p" dans le fichier Telec"
- La méthode suivante est déclenchée : play_process.stdin.write(p)
- Ma vidéo se met en pause
- Le programme python écrit "." dans le fichier telec (pour éviter les play/pause en boucle a chaque passage dans ma boucle While).
Le programme python ne se termine donc pas tant que la lettre "q" n'est pas détectée (q correspond à quitter OMX).
Avec cette méthode, je rencontrai alors un autre problème.
Dans ma page PHP, quand j’exécutais mon script avec la commande : exec('sudo /cheminscript/programme.py'). La page PHP attendais la fin de l’exécution du programme python pour exécutée le reste de la page, et vu que mon programme python est une boucle infinie je pouvais attendre longtemps .
J'ai donc simplement changé la commande a exécutée en PHP par : exec('sudo /cheminscript/programme.py > /dev/null 2>&1 &'). Et magie, ça fonctionne !
L'utilisation d'un programme comme cela a peut être des inconvénients (que je ne connais pas pour l'instant ) mais tout fonctionne correctement pour le moment.
Etant au travail, je ne peux malheureusement pas ajouter des screens de mes programmes, je les ajouterai ce soir .
En cherchant un peu, je suis tombé sur ce lien.
A la différence de ce que l'on testait, c'est qu'il utilise un programme python et une bibliothèque "subprocess" pour gérer les commandes linux.
Avec cette ligne "stdin=subprocess.PIPE", le stdin de la commande sera directement relié au pipe.
En paramètre de mon programme j'envoi donc le chemin de ma vidéo, ma vidéo se lance puis arrive une boucle infinie.
Dans la boucle infinie je vais vérifier et ce que contient le fichier "Telec" toutes les 1sec puis écrire "." dedans.
En fonction de ce qu'il y a écrit dans mon fichier "Telec" je déclenche la méthode "play_process.stdin.write([commandeOMX])".
J'écris dans mon fichier "Telec" avec des commandes PHP en fonction des boutons appuyé sur ma page.
Par exemple si j'appui sur le bouton pause de ma page PHP :
- On écrit "p" dans le fichier "telec"
- Le programme python va détecter "p" dans le fichier Telec"
- La méthode suivante est déclenchée : play_process.stdin.write(p)
- Ma vidéo se met en pause
- Le programme python écrit "." dans le fichier telec (pour éviter les play/pause en boucle a chaque passage dans ma boucle While).
Le programme python ne se termine donc pas tant que la lettre "q" n'est pas détectée (q correspond à quitter OMX).
Avec cette méthode, je rencontrai alors un autre problème.
Dans ma page PHP, quand j’exécutais mon script avec la commande : exec('sudo /cheminscript/programme.py'). La page PHP attendais la fin de l’exécution du programme python pour exécutée le reste de la page, et vu que mon programme python est une boucle infinie je pouvais attendre longtemps .
J'ai donc simplement changé la commande a exécutée en PHP par : exec('sudo /cheminscript/programme.py > /dev/null 2>&1 &'). Et magie, ça fonctionne !
L'utilisation d'un programme comme cela a peut être des inconvénients (que je ne connais pas pour l'instant ) mais tout fonctionne correctement pour le moment.
Etant au travail, je ne peux malheureusement pas ajouter des screens de mes programmes, je les ajouterai ce soir .