La librairie javascript permet d'utiliser une balise
video
existante avec la solution widemotion. Le rôle de cette librairie est de renseigner dynamiquement la
src
de la
video
et d'y attacher un système de tracking nécessaire au bon fonctionnement de la solution.
Pré-requis et configuration
Pour pouvoir utiliser le controller avec IE9 il faut ajouter quelques dépendances supplémentaires. :
- https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
- https://github.com/davidchambers/Base64.js
Nous hébergeons des versions stabilisées et vérifiées de ces dépendances dans un script controller.helpers.min.js
Les dépendances au complet :
<script type="text/javascript" src='https://secure.massmotionmedia.com/common/1.2.3/controller.min.js'></script> <!-- Worldwide --> <script type="text/javascript" src='https://secure.widemotion.cn/common/1.2.3/controller.min.js'></script> <!-- China optimized -->
Important :
Il est impératif d'exploiter l'appel en secure.widemotion.cn pour les diffusions en Chine.
Ne pas exploiter cet appel aurait pour conséquence le ralentissement, voire le blocage de vos contenus vidéo.
La librairie massmotinomedia ne crée pas de player. Elle fonctionne avec une balise vidéo fonctionnelle. Voici les tableaux de support à jour :
Il n'y a pas de configuration générale autre que le niveau de verbosité de la librairie. Il est réglable en utilisant
la fonction
setVerboseLevel
avec unes des valeurs suivantes :
VERBOSE_NONE | valeur par défaut : Aucun affichage volontaire dans la console. |
---|---|
VERBOSE_ERROR | Seules les erreurs empéchants la diffusion de la vidéo sont rapportées dans la console. |
VERBOSE_INFO | Les informations métier permettant de suivre le déroulé fonctionnel sont affichées dans la console. |
Un exemple :
window.addEventListener('load', function(){ widemotion.setVerboseLevel(widemotion.VERBOSE_INFO); });
Usage
C'est relativement simple, il n'y a qu'une seule fonction exposée à l'utilisateur :
widemotion.attach()
. Cette fonction retourne un
Promise
et attends 3 arguments obligatoires.
Argument | description | exemple |
---|---|---|
video_tag | une balise vidéo, ciblée via jQuery |
document.querySelector('#myVideoTag')
|
widemotion_id | l'identifiant du contenu vidéo |
timescapes
|
accounts | un tableau des comptes client dans lesquels on va chercher le contenu vidéo |
['mmm']
|
La fonction retournant une promise, voici les cas usuels d'utilisation :
promise.... | condition | argument |
---|---|---|
.done | L'identifiant de contenu est valide et on a trouvé un média vidéo à lire. L'attribut
src de la balise
video_tag a été renseigné et il n'y a plus qu'à lancer la lecture (ou rien à faire si la balise est en
autoplay
|
Un objet comprenant des informations suivantes :
|
.fail | Impossible de trouver un média vidéo à lire | Le message d'erreur détaillé. A date les causes sont :
|
.always | dans tous les cas | Attention, comme dit dans la documentation jQuery mieux vaut ne pas préjuger de l'argument. Cela dit dans notre cas, l'erreur est identifiable car l'argument est de type texte, sinon en cas de réussite c'est un objet. |
Un exemple :
window.addEventListener('load', function() { widemotion.setVerboseLevel(widemotion.VERBOSE_INFO); // suppose l'existence d'une <video id="v1"></video> dans le dom widemotion.attach(document.querySelector('#v1'), 'timescapes', ['mmm']) .then(function(infos){ console.log("Ce handler s'exécute quand on a trouvé une vidéo à lire."); console.log(infos); document.querySelector('#v1').play(); }) .catch(function(error_msg){ console.log("Ce handler s'exécute lors d'une erreur. Ici : " + error_msg); }) .then(function(infos_or_error){ console.log("Ce handler s'exécute toujours"); console.log(infos_or_error); }); });
Voici par exemple la page envoyée aux responsables de mise en ligne des contenu pour vérifier les vidéos.
Autoplay et bonnes pratiques
Dans l'intérêt de l'internaute et de la qualité du contenu vidéo massmotionmedia recommande :
- De ne pas lire plusieurs vidéos à la fois sauf nécessité artistique, et encore, il se peut qu'une grande vidéo masquée avec des zones mortes soit plus performante...
- A plus forte raison, de ne pas mettre plusieurs vidéo en
autoplay
. - Pour les carousels et autres diaporama : utiliser une seule balise
video
dont on met à jour le contenu. - Pour ne pas charger inutilement des ressources : renseigner le paramètre
preload="metadata"
sur la balise vidéo. Il sera modifié automatiquement par le navigateur en cas d'autoplay. - En cas de boucle vidéo, utiliser le paramètre
loop
plutôt qu'un contrôle JavaScript
/* Exemple de boucle vidéo (avec l'attribut "loop") : <video id="v1" loop data-resource="timescapes"></video> */ window.addEventListener('load', function() { widemotion.setVerboseLevel(widemotion.VERBOSE_INFO); widemotion.attach(document.querySelector('#v1'), 'timescapes', ['mmm']) .then(function(infos){ console.log("Ce handler s'exécute quand on a trouvé une vidéo à lire."); console.log(infos); document.querySelector('#v1').play(); }) .catch(function(error_msg){ console.log("Ce handler s'exécute lors d'une erreur. Ici : " + error_msg); }) .then(function(infos_or_error){ console.log("Ce handler s'exécute toujours"); console.log(infos_or_error); }); });
Voici par exemple une page de démo avec l'attribute "loop" et la vidéo en autoplay (et muted par défaut).
Exemple : Changement/MAJ de vidéo
C'est très simple, il suffit de rappeler la fonction
widemotion.attach()
sur une balise existante et la mise à jour sera faite proprement.
Exemple : Plusieurs players vidéos
Si jamais il est pertinent d'avoir plusieurs balises vidéo il faut appeler un
widemotion.attach()
pour chaque élément.
Notez bien que ce mode d'intégration enclenche des chargements partiels des vidéos en tâche de fond !
Tips : Attention à bien mettre en pause les vidéos invisibles !
Important : pour éviter de charger plusieurs vidéos à la fois, il faut faire un
widemotion.attach()
uniquement lorsque la lecture de la vidéo est initiée. C'est à dire lorsque l'utilisateur clique sur un bouton play
ou que la vidéo apparait sur l'écran de l'utilisateur.
Le code suivant est un exemple de déclenchement de la lecture vidéo au clic. Aucune donnée n'est préchargée. Il faudra évidemment appliquer une couche de CSS afin que l'utilisateur soit au courant qu'il y a une vidéo à lire ou un bouton play sur lequel cliquer pour lancer la vidéo.
/* HTML : <video class="widemotion_video" data-resource="timescapes"></video> */ function onClick(e) { window.removeEventListener(e.target, onClick); widemotion.attach(e.target.id, e.target.getAttribute('data-resource'), ['mmm']); } var videos = document.querySelectorAll('video.widemotion_video'); videos.forEach(function(video) { video.addEventListenr('click', onClick); });
CSS
Si vous utilisez le player natif de votre navigateur et que vous avez besoin de cacher le bouton de téléchargement (le cas échéant), Il faut ajouter les lignes de css ci-dessous dans votre page
video::-internal-media-controls-download-button { display:none; } video::-webkit-media-controls-enclosure { overflow:hidden; } video::-webkit-media-controls-panel { width: calc(100% + 30px); /* Adjust as needed */ }
Accessibilité
Il existe une démonstration d'un player respecant la norme d'accessibilité WCAG 2.1 (AA) Cet exemple utilise tous les éléments utilisés dans cette documentation : Documentation accessibilité
Changelog
1.6.0
(06-05-2024)
- interne - différentes perfomances internes
1.5.1
(2023-02-09)
- performance - possibilité de filtrage du bitrate capping en fonction de la surface d'affichage de la vidéo
1.2.9
(21-12-2021)
- interne - Promise est maintenant remplacé uniquement dans le script et plus en global
1.2.3
(11-09-2018)
- interne - correction de l'assignation des id au moteur
1.2.2
(13-06-2018)
- performance - suppression de la dépendance à jQuery qui devient optionnelle
- performance - chargement des dépendances asynchrone
1.1.0
(23-10-2017)
- analytics - suppression cookie stat (visiteur unique)
1.0.7
- obsolète(22-09-2017)
- bugfix - correction de bugs liés à javascript
1.0.6
- obsolète (04-09-2017)
- interne - mise à jour des informations d'analytics
1.0.5
- obsolète (14-08-2017)
- performance - suppression d'un appel réseau
1.0.4
- obsolète (06-07-2017)
- interne - changement de système d'analytics
1.0.3
- obsolète (19-05-2017)
- performance - chargement de la liste des ID uniquement si on utilise plusieurs comptes simultanément
1.0.2
- obsolète (07-04-2017)
- performance - désactivation du radar Cedexis
1.0.1
- obsolète (23-03-2017)
- feature - ajout possibilité de stats pour player externe
- bugfix - stats débit utilisateur
1.0 (obsolète)
- obsolète Version initiale
Contacts
-
Video engineers
Expert team
video@massmotionmedia.com