L'article n'est pas terminé, je travaille encore dessus.
Je tiens à préciser que ma "solution" nécessite un VPS en plus de votre hébergement mutualisé
Avant de lancement de la plateforme evolution, je cherchais un hébergement simple et pas cher, j'en ai rapidement trouvé un chez OVH qui remplissait ces conditions.
Cependant, il y a une chose à laquelle, je n'avais pas pensé, les vidéos et plus particulièrement leurs miniatures ( ou thumbnail ).
Pas de problème, il y a plein de librairies PHP qui vont me permettre de générer des miniatures facilement... C'est vrai, il y en a plein sauf qu'elles ont toutes besoin de FFMPEG. Et évidemment, ce n'est pas inclus avec les hébergements mutualisés d'OVH.
J'aurais pu changer d'hébergement mais comme je l'ai payé pour une année, je ne voulais pas que ce soit en vain.
J'ai tenté de contourner le problème en utilisant le paramètre preload="metadata" sur mon attribut HTML , qui, théoriquement ne devait télécharger que la première image de la vidéo afin d'en donner un aperçu. Ca, c'est ce que les spécifications suggèrent mais il semblerait que certains navigateurs, notamment Google Chrome en fassent un peu plus que prévu.
C'est à dire, précharger une bonne partie des vidéos, et lorsqu'on en a plusieurs sur une page, ça devient vite une catastrophe en terme de performance.
Une API ? J'ai pas vraiment cherché si il y en avait qui remplissait cette tâche et je ne serais surpris qu'elles existent, cependant, il était hors de question pour moi de payer mensuellement ou à l'action pour ça. Evitons la dette technique, je suppose que ce concept s'applique pour ce genre de cas ?
La seule solution c'est donc de générer des miniatures, qui pourront être ajouté à l'attribut video par le biais du paramètre poster comme ceci : et bien sûr, sans oublier de passer le preload à "none" qui demande aux navigateurs de ne pas précharger les vidéos.
Un début de solution :
Il s'avère que j'ai déjà un VPS pour le chat de la plateforme et je me suis dit que je pourrais l'exploiter pour générer ces fameuses miniatures. C'est là que j'arrive avec une solution digne d'un bricoleur du dimanche mais qui pour le moment fonctionne correctement. Evidemment, je ne vous recommande pas de faire la même chose, il s'agit d'une solution temporaire et peu fiable sur le long terme.
Commençons par installer FFMPEG sur votre serveur VPS :
Mettez à jour votre système comme ceci : sudo apt update
Installez FFMPEG comme ceci : sudo apt install ffmpeg
Une fois l'installation effectuée, passons à l'étape suivante.
Générer une miniature :
J'utilise une librairie appelée SSH2 qui me permet de me connecter à mon serveur VPS. Dans un premier temps, je créé un répertoire qui va stocker mes miniatures. Donc connectez-vous sur votre VPS, et choisissez arbitrairement où vous aimeriez que celles-ci soient rangées.
Pour ma part j'ai créé un dossier /videos et à l'intérieur de celui un autre appelée /thumbnails
Ce qui donne comme chemin /videos/thumbnails
Passons à la logique, dans mon cas, j'utilise du code PHP pour arriver à mes fins.
Partons du principe que le fichier est uploadé sur votre hébergement mutualisé. Tout d'abord vous devrez récupérer son chemin absolu et le mettre dans une variable, dans mon cas, ça ressemble à ça :
<br /> $videoPath = '60d8c5d16ab7e.mp4';<br /> $absoluteVideoPath = 'https://evolution.gg/uploads/videos/' . $videoPath;<br />
Ensuite créez un nouvel objet SSH2 comme ceci :
<br /> $ssh = new SSH2( $this->host, $this->port );<br /> $ssh->login( 'username', 'password' );<br />
Ensuite exécutez cette commande :
<br /> $ssh-->exec('cd videos/thumbnails; ffmpeg -i ' . $absoluteVideoPath . ' -ss 00:00:01.000 -vframes 1 ' . $thumbnailName);<br />
Par étape ça donne ça :
Je vais dans le répertoire thumbnails que j'ai créé au préalable :
<br /> cd videos/thumbnails<br />
J'exécute FFMPEG, je lui donne en premier paramètre l'adresse de la vidéo, le second paramètre précise où je désire récupérer une image / frame, le troisième extrait l'image et le dernier le nom que je souhaite lui donner. En l'occurence je lui donne le même nom que la vidéo.
<br /> ffmpeg -i ' . $absoluteVideoPath . ' -ss 00:00:01.000 -vframes 1 ' . $thumbnailName<br />
Après cetté étape je me retrouve avec un fichier 0d8c5d16ab7e.jpeg dans le dossier /videos/thumbnails/
Maintenant vous pouvez vous déconnecter comme ceci :
<br /> $ssh-&gt;disconnect();<br />
Télécharger l'image générée depuis votre VPS :
L'image est prête, il ne reste plus qu'à la récupérer sur votre hébergement mutualisé depuis votre VPS. Comme pour la première étape, je vais également utiliser la librairie SSH2 sauf
que cette fois je vais utiliser son objet SFTP qui permet d'envoyer et de télécharger des fichiers.
La première étape est similaire, on se connecte au VPS comme ceci :
<br /> $sftp = new SFTP( $this-&gt;host, $this-&gt;port );<br /> $sftp-&gt;login( 'username', 'password' );<br />
Ensuite on utilise une méthode appelée get qui porte bien son nom, on lui donne le chemin du fichier qu'on souhaite récupérer sur le VPS et en second paramètre le chemin où on aimerait qu'elle se trouve sur l'hébergement mutualisé.
<br /> $sftp-&gt;get( 'videos/thumbnails' . '/' . $thumbnailName, $thumbnailOutput );<br />
La miniature se trouve désormais sur votre hébergement mutualisé et bien sûr, on oublie pas de clore la connexion comme ceci :
<br /> $sftp-&gt;disconnect();<br />
À noter que j'ai pris soin d'entourer cette portion de code de try{} catch{} car vous n'êtes pas à l'abri que la connexion avec votre VPS échoue ou que FFMPEG fasse des siennes.
Rien à voir mais j'ai fait un outil récemment : Connaître mon IP.
Publications populaires dans Développement
Développement
12 abonnés
Tout ce qui touche au développement
PHP