Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  MPRIS-Sync : Regardez des films ensemble par internet

 -  Juillet 2020 - 

Sommaire

J’ai voulu regarder une série avec ma sœur, parce que c’est quand même bien sympa de s’entendre mutuellement rire pendant les épisodes.

Sauf que problème, on n’habite pas dans la même ville. Comment alors regarder en même temps, facilement, une série ensemble, sans trop de décalage avec possibilité de repasser une scène qui nous a particulièrement amusé ?

Je n’ai pas trouvé de solution libre permettant de diffuser facilement, sans gros décalage, depuis un ordinateur vers un autre ordinateur sur internet. VLC avec sa fonction de diffusion était une solution prometteuse, mais ça ne marchait pas trop bien. Je n’ai pas essayé VNC ou une session X11 déportée, mais de toute façon je ne suis même pas sûr que ça résolvait le problème du son. Il m’a traversé l’esprit d’utiliser Jitsi Meet et sa fonctionnalité de partage d’écran, d’autant que maintenant on peut diffuser le son de son ordi avec, mais ce n’est pas du tout adapté : la fréquence d’envoi des images est bien trop faible.

Et de toute façon toutes ces solutions demandaient un ré encodage et un envoi coûteux. Sauf que quand on est à la campagne avec une connexion rurale, la dernière chose qu’on a envie de faire, c’est envoyer de la vidéo. Et entendre le ventilateur de son ordinateur et sentir celui-ci chauffer, ce n’est pas fun.

MPRIS-Sync à la rescousse

Alors comment faire ? Prendre le problème autrement. Les deux côtés ont les fichiers vidéos à lire, il ne reste plus qu’à synchroniser la lecture. Coup de chance, le protocole MPRIS permet de contrôler très facilement n’importe quel lecteur audio et vidéo sur les distributions GNU/Linux et autres OS prenant en charge D-BUS (qui est un bus / protocole de communication entre applications).

Y a plus qu’à brancher MPRIS à des sockets et on est tout bon… ? Et c’est effectivement ce que fait MPRIS-Sync, un petit script Python de 300 lignes sous licence libre AGPLv3+ avec les commentaires (et aussi sans les commentaires, c’est le même nombre, ah ah), que j’ai écrit pour l’occasion. Moins de 10 Kio. De quoi rendre jaloux un programmeur C ou Rust et rendre vert un programmeur Javascript qui utiliserait des modules tels que is-number, téléchargé 30 000 fois par semaine, qui pèse déjà 20 Kio. Mais je digresse.

Comment ça s’utilise ?

On installe le module Python mpris2 et on est bons pour commencer.

Mise en place

C’est simple : on démarre le lecteur vidéo, on lance MPRIS-Sync et on lui dit de piloter ce lecteur vidéo (ou audio, hein, ça marche aussi).

Un des ordinateurs va se comporter comme un serveur : il faut lancer MPRIS-Sync avec une commande du style :

./mprissync.py --listen 0.0.0.0 8080

et faire les bonnes redirections de ports sur votre routeur. De l’autre côté, il “suffira” de lancer MPRIS-Sync de cette manière :

./mprissync.py --connect X.Y.Z.A 8080

en remplaçant bien sûr X.Y.Z.A par l’adresse IP du “serveur”.

Utilisation

Si la mise en place est un peu fastidieuse, il faut que l’utilisation soit naturelle. On ne peut pas se permettre des choses du genre « Ah bah attends, j’ai changé la position, tape sync dans le terminal ».

Non non. Il n’y a plus qu’à regarder la vidéo normalement avec le lecteur. On pourra mettre en pause, changer la position, stopper et reprendre la lecture de la vidéo, et ça fera pareil de l’autre côté. Quand la vidéo est mise en pause d’un côté, elle sera mise en pause de l’autre côté, sur la même image. Quand la lecture reprend, elle reprend depuis la même image au même moment des deux côtés.

Comment ça fonctionne ?

Vous vous demandez peut-être comment on fait pour que les choses soient synchros malgré les latences inévitables du réseau, et comment ça ne prend pas de plus en plus de décalage dans la figure au cours du temps.

Voilà comment MPRIS-Sync procède :

  • à la connexion, le temps de l’allez-retour est mesuré entre les deux ordinateurs, et leurs dates et heures respectives sont échangés.
  • lorsque l’un des deux lecteurs est mis en pause, l’ordre de mettre en pause de l’autre côté est tout de suite envoyé, avec la position en cours. De l’autre côté, le lecteur est mis en pause et la position est configurée sur la position fournie.
  • lors d’un changement de position ou d’une reprise, le lecteur qui contrôle est tout de suite mis en pause. Ensuite, l’ordre de reprendre la lecture dans le futur à la position donnée est envoyé. Ce mécanisme de pause et de reprise dans le futur, à la position indiquée, permet l’absence de décalage significatif. C’est l’instance où le lecteur a été piloté qui décide quand on reprend. Le temps d’attente choisi dans MPRIS-Sync est le maximum entre une seconde, et le double de l’allez-retour mesuré à la connexion.
  • lorsque la lecture est stoppée d’un côté, elle l’est de l’autre.

Problèmes rencontrés

Utilisation de NTP

Au départ, j’utilisais NTP pour avoir la même date des deux côtés. En fait, ça ne marche pas bien et il y a quand même un décalage, en plus de rendre MPRIS-Sync dépendant d’un service externe. Là, il fonctionne au sein d’un réseau local privé d’internet, même si cette caractéristique n’est probablement pas très intéressante en pratique.

Réseaux un peu agressifs avec les connexions « inactives »

MPRIS-Sync fonctionnait très bien à la campagne, mais j’ai eu des gros problèmes en ville (une fois n’est pas coutume. C’était dû au fait que le réseau Numericable coupe n’importe quelle connexion inactive plus d’une minute. Sauf que oui, quand on regarde un épisode de 45 minutes ou un film d’1h30 ou plus, on ne change pas la lecture toutes les minutes… après la mise en place d’un petit keep-alive des familles, tout devrait bien fonctionner.

Implémentations aléatoires d’MRPIS

MPRIS-Sync est censé fonctionner avec n’importe quel lecteur audio ou vidéo. En pratique, j’ai eu des soucis avec Clémentine, VLC et le lecteur de Gnome (alors que j’ai ciblé VLC, initialement). Notamment, sous VLC, il y a fréquemment des gros glitchs visuels ou des saccades à la reprise de la lecture…

MPRIS-Sync fonctionne par contre impeccablement bien avec MPV et Gnome-MPV, que je recommande plus que très fortement, du coup.

Limitations et pistes d’amélioration

Le projet est tout jeune, il répond déjà à mes attentes donc je n’ai pas spécialement d’intérêt purement égotiste à le faire évoluer plus que ça, mais je pense que travailler dessus peut être très intéressant, vu la taille minuscule du projet pour quelqu’un voulant se faire la main sur Python, les sockets, D-BUS, MPRIS et qui sait, sur le code des différents lecteurs pour corriger les petits problèmes avec leurs implémentations respectives du protocole MPRIS ?

Voici donc une liste longue comme le bras de limitations et de pistes d’améliorations possibles.

Prise en charge limitée à GNU/Linux

MPRIS-Sync se base sur MPRIS, d’où son nom, mais je ne crois pas que ce protocole existe hors des bureaux libres, en particulier sous Windows, macOS, Android et iOS, même pour les lecteurs qui existent à la fois sous Linux et ces OS et qui implémentent MPRIS. Sur Android, je suis à peu près sûr qu’il existe un protocole similaire : KDE Connect permet de contrôler la lecture sur un téléphone Android depuis un ordinateur. Pour les autres systèmes, je ne sais pas et il faudra peut-être, dans le pire des cas, faire une implémentation spécifique par lecteur. Il n’y a que sur les OS répandus et biens finis qu’on ne trouve un tel confort avec la présence d’interfaces comme MPRIS, malheureusement il y a un peu de travail côté finitions pour des OS un peu obscures tels que Windows (trollolo… en plus ça doit bien exister, il y a les touches du clavier pour piloter la lecture en cours, quand même… à moins que chacun surveille ces touches dans son coin ?).

Changement de piste / de vidéo

Ce n’est pas du tout géré. Pour le moment, il faut que l’une des deux personnes mette manuellement en pause et rétablisse la lecture pour s’assurer que la lecture est synchro après un changement de piste. Les deux personnes doivent s’assurer que les morceaux s’enchaînent bien dans le même ordre.

À part ma fainéantise et l’existence d’autres activités intéressante comme les randos ou les baignades aux lacs, je ne vois pas de raisons que ça ne puisse pas être implémenté, toutes les données nécessaires sont fournies par MPRIS.

Fermeture du lecteur ou interruption de MPRIS-Sync = tout est à refaire

Si quelqu’un ferme son lecteur ou MPRIS-Sync, il faut tout remettre en place. Il faudrait :

  • gérer les reconnexions au lecteur et à l’autre instance de MPRIS-sync.
  • peut-être permettre de sélectionner un autre lecteur quand le lecteur a été fermé.

Pour le moment, si MPRIS-Sync perd la connexion à l’autre instance ou au lecteur vidéo, il se quitte.

Pas très intuitif

Pour utiliser MPRIS-Sync, il faut lancer des lignes de commandes, et ouvrir des ports. Ce n’est pas super cool.

Ce serait top d’avoir une belle interface graphique pour piloter MPRIS-Sync, et peut-être aussi implémenter un contournement du NAT avec des astuces du style des connexions inversés. Sinon, mettre en place un petit serveur permettant la mise en relation de deux instances MPRIS-Sync (en gardant la fonctionnalité optionnelle).

Pas plus de deux utilisateurs / utilisatrices

On est d’accord, regarder des films en groupe ça doit être bien chouette aussi. Ce serait une extension intéressante à réaliser et très utile.

Partage des fichiers qui vont être lus ?

Pour l’instant, les gens doivent s’assurer qu’ils ont les mêmes fichiers. On pourrait imaginer une fonctionnalité de partage de fichiers sans effort intégrée à MPRIS-Sync.

Conclusion

Ce journal est plus long que le code dont il parle (mais sa rédaction a pris beaucoup moins de temps, il ne faut quand même pas abuser).

J’attends vos retours, vos suggestions, vos idées et vos améliorations avec impatience.

Lien du projet : https://framagit.org/raphj/mpris-sync

Commentaires : voir le flux Atom ouvrir dans le navigateur

par raphj

LinuxFr.org : les journaux

LinuxFr.org : Journaux

firefox, nouvelle fenêtre dans une session isolée

 -  15 avril - 

Les fenêtres de navigation privées de firefox partagent leurs cookies de session or je souhaitais avoir des fenêtres de navigation isolées, (qui ne (...)


Pretendo tente de déprogrammer l'obsolescence des consoles Nintendo

 -  9 avril - 

Ah Nal,Gros N vient de faire un gros doigt aux utilisateurs de ses consoles 3DS et Wii U en annonçant la fermeture des services en ligne pour (...)


[Trolldi] Vulgarisation sur l'IA pour décideur pressé

 -  5 avril - 

Cher 'Nal,Je fais un article-marque-page sur un post tout frais de Ploum où il est question d'un fantasme vieux comme le Talmud avec le Golem. (...)


Super Marian and Robin: les roms en collant

 -  3 avril - 

Bonjour Nal,Je t'écris pour te proposer de tester mon nouveau jeu: Super Marian and Robin.Il s'agit d'un jeu de plateformes pour un ou deux (...)


Le roi est mort, vive le roi ! Les alternatives de Redis sont là

 -  3 avril - 

Bonjour Nal !Après le changement de licence de Redis, ce qui devait arriver arriva, et des alternatives libres apparaissent.Tout d'abord, on a (...)