pt
Moulé à la louche depuis 1999
Les trucs qui m'énervent... et je vais pas prendre de pincettes
Internet, informatique, logiciel libre, économie, politique, vie courante et tout le reste...

Héberger des vidéos sur son propre serveur... sans le tuer

Mercredi 03 octobre 2012


YouTube censure à tour de bras:
  • Entre les robots de Google qui censurent idiotement les vidéos (même des chants d'oiseaux).
  • Les industriels de la culture qui envoient des mises en demeure à Google, souvent totalement injustifiées, parfois à leur propre profit.
  • les pays qui censurent certaines vidéos (quand ils ne coupent pas intégralement YouTube).
  • et YouTube lui-même qui commence à censurer selon le bon vouloir des pays.

Il faut sérieusement réfléchir à héberger ses vidéos soi-même. (Mitsukarenai est un expert sur le sujet, alors ma petite diatribe du jour va sûrement le faire sourire.)

Seulement voilà, héberger soi-même des vidéos pose des problèmes épineux:
  • Cela consomme votre bande passante vitesse grand V. Certains hébergeurs vous factureront chèrement les dépassements, d'autres couperont tout simplement votre site.

  • Si votre vidéo devient populaire, vous aurez des problèmes de débit (votre hébergeur peinant à servir la vidéo à tout le monde). Vous n'avez pas les CDN de YouTube pour répartir la vidéo sur différents serveurs dans le monde. Et vous n'avez probablement pas les moyens de vous payer des CDN Akamai.

  • Enfin il faut que vous gériez vous-même la compatibilité entre navigateurs: Utilisation du tag video d'HTML5 ou non, codecs vidéo supportés... avouez, c'est chiant.


J'ai fini par trouver une solution très simple et qui ne tue pas votre serveur. Voici comment procéder:

  1. Encodez vos vidéos en WebM et MP4, et placez-les quand même sur votre serveur.

  2. Ajoutez un fichier .htaccess pour servir les vidéos avec le bon type MIME:
    AddType video/mp4 .mp4
    AddType video/webm .webm
  3. Prenez le lecteur opensource Video.js: Il utilise HTML5/balise video et javascript pour lire la vidéo WebM. C'est très simple:
    <script src="video-js/video.js"></script>
    <script>_V_.options.flash.swf = "video-js/video-js.swf";</script>

    <video id="test_video_1" class="video-js vjs-default-skin" controls preload="none" width="854" height="480"
           poster="http://mondomaine.com.nyud.net/videos/video1_miniature.jpg" data-setup="{}">
        <source src="http://mondomaine.com.nyud.net/videos/video1.webm" type='video/webm' />
        <source src="http://mondomaine.com.nyud.net/videos/video1.mp4" type='video/mp4' />
    </video>
  4. Si le navigateur ne supporte pas WebM ou HTML5, Video.js bascule sur Flash et MP4, ce qui assure une compatibilité avec pratiquement tous les navigateurs.

  5. Comme vous pouvez le voir dans les balises source, ajoutez .nyud.net au nom de domaine dans les URLs de vos vidéos.

C'est tout: Video.js vous assure que le lecteur marchera dans pratiquement tous les navigateurs. Les navigateurs supportant HTML5+WebM l'afficheront directement (Firefox, Opera, Chrome...), les autres (Safari, IE...) se rabattront sur MP4 (soit en HTML5 aussi, soit via Flash).

Vous avez remarqué le ".nyud.net" ? Par le simple fait d'appeler votre vidéo à travers cette URL, le CDN CoralCache ira lire une seule fois la vidéo de votre serveur et la répliquera dans le monde au fur et à mesure qu'elle est consultée. Plus de problème de bande passante: Ce sont leurs serveurs qui fournissent la vidéo, et non le vôtre. Et plus de problème de débit non plus: Avec 300 serveurs répartis dans le monde, même des internautes éloignés pourront lire la vidéo sans coupure. (CoralCache est gratuit depuis 8 ans et sans contrepartie.)

Accessoirement, cela fait la nique aux limites de débit posées artificiellement par les fournisseurs d'accès sur des sites comme YouTube (coucou Free, coucou Orange).

Petit bémol de cette solution: CoralCache renvoie un "Accept-Ranges:none", ce qui empêche d'avoir le curseur pour se positionner dans la vidéo.

Voilà le résultat (j'ai mis la vidéo du trailer du jeu Dustforce - me gusta).


Très simple à mettre en place, compatible (pratiquement) tous navigateurs, vous gardez le contrôle de l'hébergement de la vidéo, ça ne tue pas votre bande passante et ça assure un bon débit n'importe où dans le monde. Chouette, non ? Avec ça, on a plus vraiment besoin de YouTube pour publier ses vidéos... à part un peu d'espace sur son hébergement. Il est reste quand même la facilité de publication sur YouTube et ses petits outils (commentaires, stabilisation de vidéo, plusieurs résolutions de vidéo fournies, etc.) qui peuvent faire préférer ce dernier.

Quant à la liberté d'expression, jusqu'à présent je n'ai jamais vu CoralCache censurer quoi que ce soit. Au pire, le risque est que votre vidéo soit illisible si le domaine nyud.net est bloqué, mais ce n'est pas pire que YouTube. Au moins la vidéo est (virtuellement) "chez vous".


De rien, ça me fait plaisir :-)


EDIT 5 oct.: Et crotte, je viens de m'apercevoir que CoralCache, pour le moment, ne met en cache que les fichiers de moins de 50 Mo. :-/ Flûte. Si le fichier fait 50 Mo ou plus, il y a une redirection transparente vers votre site (avec un ?coral-no-serve dans l'URL). Ils sont en train de travailler à une manière plus efficace de mettre en cache les gros fichiers.

Voir tous les billets