Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/02/2018, à 13:06

anoxie

[Résolu, enfin presque] Repérer la lecture de vidéo dans un navigateur

Bonjour,

Je m'amuse un peu à créer un genre d'écran de veille intelligent, enfin c'est surtout un truc pour m'afficher des infos sur les écrans (slideshow, heure, météo, éphémérides,...) quand le PC est inactif, ou quand je lis une vidéo avec totem sur un écran il me donne les info sur l'autre. J'utilise xautolock pour lancer un script qui vérifie si il y a un média en lecture, lance des instance de chromium avec les pages d'information que j'ai créer et que j'héberge en local et qui capte les mouvements de la souris avec xinput pour sortir de veille.

J'ai réussi à faire jusqu'ici un truc qui fonctionne a peu près, mais j'aimerai le rendre plus flexible pour la partie détection de la lecture de média en ligne (pas de problème pour totem) actuellement je récupère avec wmctrl les fenêtres avec un titre susceptible de lire des vidéos par exemple YouTube, Dailymotion, Vimeo, etc. Seulement ça m'ennui pour plusieurs raisons :

  • les lecteurs embarqués sur une page web ne sont pas prise en compte

  • je dois référencer explicitement tout les sites de streaming, même genre ceux ou je n'irais lire une vidéo qu'une seule fois... sinon l'écran de veille se déclenche au bout de 3mn...

  • un site peu empêcher la mise en veille même sans lire de média exemple il suffit que j'ai une page youtube ouverte pour empêcher l'écran de veille

J'ai cherché un peu autour des idées suivantes sans trouver mon bonheur :

- monitorer la bande passante  pour voir si un processus chrome en consomme beaucoup, seulement j'ai écarté cette idée puisque je me suis dit qu'une fois la mise en cache terminé la conso de bande passante doit diminuer, et l'écran de veille peu alors se déclencher donc trop indépendant de la lecture du média, de plus comment déterminer à partir de quel niveau de consommation de bande passante il faut empêcher l'écran de veille, et comment distinguer la lecture d'un média du chargement d'un fichier ?

- monitorer la consommation de mémoire avec ps ou top, mais je n'arrive pas à déterminer de manière clair et non équivoque quel processus correspond à quel onglet ou extension, si je crois le pid que je récupère avec wmctrl pour Youtube par exemple avec celui dans ps j'arrive effectivement le retrouver mais je vais aussi avoir tout un tas de processus qui vont consommer tout autant de mémoire, sans pour autant que je ne sache à quoi ces processus correspondent.

Après je suis début en linux et en scripts, du coup j'imagine qu'il doit bien y avoir d'autres méthodes auxquelles je n'ai pas pensé.

Merci déjà de m'avoir lu wink

Dernière modification par anoxie (Le 13/02/2018, à 13:29)

Hors ligne

#2 Le 10/02/2018, à 14:35

classdroogies

Re : [Résolu, enfin presque] Repérer la lecture de vidéo dans un navigateur

Salut,

Quelques pistes ici

Hors ligne

#3 Le 10/02/2018, à 16:36

anoxie

Re : [Résolu, enfin presque] Repérer la lecture de vidéo dans un navigateur

Salut,

Génial, merci, je n'avais pas pensé à utiliser le son pour ça.

En plus j'ai jeté un œil, au fichier status il est possible de faire un grep sur owner_pid, du coup si chromium est ouvert et en train de jouer du son, je suis bon. Seul problème, si je joue de la musique sur un onglet en arrière plan genre sur yoube, il empêchera aussi la mise en veille...

Faut que je réfléchisse à ça, mais je crois bien que là je suis dans une situation ou je pourrais pas tout avoir...

Hors ligne

#4 Le 13/02/2018, à 13:27

anoxie

Re : [Résolu, enfin presque] Repérer la lecture de vidéo dans un navigateur

Alors si d'aventure d'autre serait concerné par une recherche du même type je me permet de résumé la solution que j'ai adopté finalement.

Malheureusement ce n'est pas parfait, mais je vais m'en contenter. Puisqu'il n'est pas possible de savoir si une vidéo est en cours de lecture en premier plan dans un navigateur, nous en sommes réduit à tenter de le deviner de manière indirect pour ce faire j'ai procédé de la manière suivante :

1. je récupère le pid du processus de la fenêtre active avec xprop :

xdotool getwindowpid $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2)

2. je récupère le pid de chromium avec :

wmctrl -lp | grep "Chromium" | cut -d " " -f 4 | head -n 1

3.Je vérifie que chromium utilise une "sortie audio" pulse audio, pas sur de la terminologie (sink) :

pacmd list-sink-inputs | grep "Chromium"

4. je vérifie qu'il y a bien quelque chose en lecture au niveau des sorties audio, puisque si l'on met une lecture en pause, la commande précédente pourrait être positive, mais sans lecture avec state = pause

pacmd list-sink-inputs | grep "RUNING"

Puis on mélange le tout dans des tests conditionnelles à notre convenance, et pouf, on peut savoir si un média est en lecture dans chromium, et si la fenêtre chromium est active, ce qui est généralement le cas quand on vient de lancer la lecture d'une vidéo embarqué sur une page que l'on regarde, du coup il est possible de jouer de la musique avec chromium en arrière plan sans que celà n'empêche la mise en veille de moment que la fenêtre active n'est pas une fenêtre de chromium, toutes les fenêtres de chromium ont le même pid, du coup il n'est pas possible de savoir quel onglet joue un média ni si celui-ci est au premier plan... Ce n'est pas parfait, mais ça correspond assez bien à mes besoins. Au final, il n'y a plus que le cas ou chromium joue un son en arrière plan et ou une fenêtre de chromium est active qui ne déclenche pas la veille en cas d'inactivité.

Merci classdroogies pour l'idée de monitorer le son. smile

Dernière modification par anoxie (Le 13/02/2018, à 17:21)

Hors ligne