{ Visio / WebConf } – Freezer sa caméra

 

Coucou à toute la petite communauté Dyrkienne, !

Encore un petit article que je ressuscite des mes "articles en projet" pour votre plus grand plaisir.
Je le redis à nouveau, je vais progressivement réduire la cadence de mes publications, pour des raisons personnelles.
En attendant, je vous remercie pour tous les messages de soutien que vous m'envoyez, c'est en grande partie grâce à toute cette bienveillance que je continue à prendre le temps de vous concocter des articles ludiques et parfois instructifs.

Comme beaucoup de personne cette année, je suis régulièrement en télétravail, et qui dit "télétravail", dit forcément appel  "visio".
Sauf que parfois ... il faut admettre que l'on n'aime pas forcément enlever le bout de scotch ou plastique qui se trouve sur la caméra (question de vie privée).
C'est pour lutter contre cette pratique, que j'ai décidé de vous offrir sur un plateau d'argent un petit script que j'ai développé et qui devrait fonctionner sur vos visios (sous condition que celle-ci soit réalisée à l'intérieur d'un navigateur).

Le script

Ce script est à coller / exécuter à l'intérieur de la console de votre navigateur (Touche F12 de votre clavier, onglet "console"), depuis la page où se déroule votre "visio" (Ex : https://meet.google.com/xxx-xxxxx-xxx?authuser=0)

var z = null;
['addStream', 'createOffer'].map(function(name){
RTCPeerConnection.prototype[name + '2'] = RTCPeerConnection.prototype[name + '2'] ? RTCPeerConnection.prototype[name + '2'] : RTCPeerConnection.prototype[name];
RTCPeerConnection.prototype[name] = function (e) {
console.log(e);
const res = this[name + '2'](e),
z = this,
dom = document.getElementsByTagName('html')[0];
let freezeButton = document.getElementById('freezeButton');
if (!freezeButton){
freezeButton = document.createElement('input');
freezeButton.id = 'freezeButton';
freezeButton.setAttribute('type', 'button');
freezeButton.setAttribute('style', 'position:fixed;bottom: 10%;left: 2%;z-index:10000;height: 40px;color: white;background: #440d0d;border: 1px solid white;text-decoration: underline;border-radius: 10px;');
freezeButton.addEventListener('click', (evt) => {
freezeButton.value = 'You\'re Freeze : Stop / Start Camera to UnFreeze';
z.getSenders().map(e=> {
if (e.track.kind == 'video') z.removeTrack(e);
});
});
dom.appendChild(freezeButton);
}
freezeButton.value = 'Freeze ?';
return res;
};
});

 

Dès lors que vous aurez fait le nécessaire, un bouton devrait apparaître en bas à gauche de votre écran "Freeze ?"

Si ce bouton n'est pas là, désactivez et réactivez votre caméra...

Ce bouton vous permettra d'un simple clic de "freezer" à tout moment votre caméra :
Le bouton "Freeze ?" devrait alors disparaître et laisser place à un message expliquant comment arrêter le Freeze : il vous suffit d'arrêter / réactiver la caméra.

 

Fonctionnement du "hack"

Comme dans beaucoup des scripts à injecter dans vos pages que je vous ai partagé, j'utilise ici ce qu'on appelle un "prototype".
Cela me permet d'altérer à un très bas niveau des fonctionnalités utilisées par la page que vous consultez.
Ici j'exploite le prototype de la classe "RTCPeerConnection", celle-ci a pour rôle de gérer les échanges de flux vidéo et audio qui sont utilisés dans votre "visio".

En me positionnant sur la méthode "addStream", je sais que celle-ci sera utilisée pour ajouter un contenu audio ou vidéo, cela me permet de récupérer à la volée l'objet utilisé dans votre appel visio.

Firefox n'exploitant pas "addStream", j'ai ajusté le code pour exploiter également une autre méthode nommée "createOffer" qui est utilisée mettre à disposition un contenu "vidéo" ou "audio" sur l'échange.

Une fois la main sur cet objet, je peux aisément supprimer ou altérer tous les contenus vidéo et audio.

 

Conclusion

J'espère que vous aurez apprécié ce petit script, n'hésitez pas à me partager en commentaire vos expériences / anecdotes amusantes ou tristes lors de vos visios.
Je vous souhaite un très bon début de semaine, et prenez soin de vous !

One comment

Répondre à Anthony Maheut Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.