Vous connaissez Popcorn Time ? si ça ne vous dit rien, c’est que vous viviez dans une grotte ces derniers mois !
Un peu d’histoire donc…
Je vois trois innovations/raisons qui ont fait son succès :
- le principe peu développé du streaming via BitTorrent
- une interface utilisateur en HTML5 de toute beauté, simple et intuitive
- un catalogue fourni de films et de séries en qualité HD
Ce succès n’a évidemment pas plu aux voleurs acteurs de l’industrie cinématographique d’Hollywood, et devant la pression, les concepteurs ont décidé d’arrêter le projet bien que celui-ci n’ait à priori rien d’illégal.
Popcorn Time étant un logiciel libre, des petits malins se sont emparés du code pour en faire d’autres versions avec plus ou moins de succès. Parmi les plus connues, on peut citer popcorntime et time4popcorn.
Comme l’original, ces logiciels sont régulièrement la cible des autorités judiciaires et peuvent donc fermer à tout moment, mais, tel un phoenix, reviennent à la vie quelques heures plus tard avec un nouveau nom de domaine.
Motivations
Pourquoi faire soi-même son Popcorn Time ?
- les versions « officielles » peuvent disparaître à tout moment
- le contrôle absolu du programme
- création d’un serveur multimédia léger, sur un Raspberry Pi par exemple (c’est mon cas)
- se passer de solutions propriétaires comme le Chromecast de Google ou Airplay d’Apple
- le goût du challenge (vous êtes là pour ça non !?)
A la fin de ce tutoriel, vous aurez en main une application ayant les fonctionnalités suivantes :
- recherche d’un film ou d’un épisode d’une série
- lecture du média cible
- arrêt de la lecture
Cette application web sera contrôlable à distance, grâce à une adresse HTTP, sur tous vos périphériques (téléphone, tablette, ordinateur,…).
Création de l’application
Le seul prérequis de ce tutoriel est de posséder un ordinateur ou un serveur ayant un système Unix (Debian, Ubuntu, OS X,…).
Sur le principe de la rétroingénierie, nous allons reproduire les fonctionnalités utilisées par Popcorn Time de manière plus « basique » :
- un système de streaming de torrent
- une interface web en HTML5
Streaming d’un torrent, Peerflix
Le logiciel Popcorn Time est basé sur Peerflix qui permet de streamer un flux provenant d’un torrent. Grâce à Peerflix, ce flux est donc visible dans n’importe quel lecteur de vidéo (VLC, OMX, MPlayer,…) tout en étant téléchargé.
Peerflix est écrit en langage NodeJS, le Javascript côté serveurs. Si ce n’est pas déjà fait, installez NodeJS via la commande (dans un terminal) :
sudo apt-get install nodejs
Il faut évidemment remplacer la commande « apt-get » par celle correspondant au gestionnaire de paquets de votre distribution.
Puis, installez Peerflix :
sudo npm install -g peerflix
Pour lancer un torrent, il suffit de taper la commande suivante :
peerflix "magnet/torrent link" --vlc
Après une mise en mémoire tampon qui peut prendre quelques secondes, VLC se lance automatiquement et démarre le média spécifié dans le torrent. Si vous êtes sur le Raspberry, il peut être judicieux de lancer OMXPlayer qui est nativement plus optimisé que VLC. Pour cela, tapez la commande :
sudo peerflix "magnet/torrent link" --omx
Interface web, Python et Flask
Nous avons donc une commande qui nous permet de lancer la lecture d’un flux vidéo provenant d’un torrent. Il faut maintenant créer une interface web permettant de faciliter la recherche de vidéos et de lancer automatiquement Peerflix sans passer par le terminal.
Pour réaliser cette interface, nous allons utiliser un micro-framework web Python appelé Flask. Pour l’installer, rien de plus simple :
sudo pip install Flask requests
Si vous ne disposez pas de la commande pip, veuillez suivre les instructions ici.
Le squelette (très simple) de notre application est le suivant :
HomeStream/ -> index.py -> templates/ -> index.html
Pour commencer, créez les dossiers « HomeStream » et « templates » (vides) présents dans ce squelette. Récupérez ensuite les fichiers index.py et index.html, puis les placer dans les bons dossiers.
Une petite explication s’impose !
Fichier index.html
Ce fichier contient le code HTML/CSS/JQuery de notre interface. Il n’y a rien de sorcier, l’utilisateur peut trouver un film ou une série via une balise select et un champ de recherche.
Le média en cours de lecture peut être arrêté en cliquant sur le bouton « stop » présent à droite du menu.
Fichier index.py
Ce fichier Python est le coeur de notre application et contient trois fonctions : index, play, stop.
La fonction index récupère les paramètres donnés par l’utilisateur via l’interface web :
- search : requête de recherche
- provider : type de média recherché (film, série, liste des épisodes)
Elle renvoie la liste des médias trouvés selon les paramètres spécifiés ci-dessus. Cette liste est ensuite affichée dans l’interface web. Cette fonction interroge deux bases de données, utilisées par Popcorn Time, pour satisfaire la requête :
La fonction play récupère un lien vers un torrent (ou un magnet) pour ensuite lancer Peerflix afin de lire le flux vidéo cible.
La fonction stop arrête le streaming et donc la lecture du film en cours.
Lancement
Toujours dans un terminal, placez vous dans le dossier HomeStream, puis tapez la commande suivante :
sudo python index.py
Deux lignes s’affichent dans le terminal, indiquant le bon démarrage de l’application :
* Running on http://0.0.0.0:8001/ * Restarting with reloader
Votre application web est maintenant accessible via l’adresse http://localhost:8001 (si vous êtes en local), ou http://adresse_ip_du_serveur:8001 si vous y accédez à distance.
Sécurité (personnelle)
Je vous rappelle que le téléchargement, le partage et le visionnage d’un média « piraté » est puni par la loi. Si vous ne voulez pas recevoir une petite lettre d’Hadopi, je vous conseille de prendre un Serveur Privé Virtuel (VPN) pour quelques euros par mois 🙂
Vous trouverez facilement des dizaines de spécialistes du VPN en faisant une petite recherche sur Google, je ne m’étendrai donc pas sur le sujet.
Rendu
Quelques captures d’écran de l’application…
Page d’accueil
Recherche d’un film
Recherche d’une série
Liste des épisodes d’une série
Bon visionnage 😉
Anth0kuto
Freelance Full-Stack Développeur, plus d'infos sur byprog.com !
Fervent linuxien depuis plus de 10 ans, je suis passionné par l'univers de l'open source et par la programmation en particulier. Ma mission si vous l'acceptez: vous emporter dans d'autres contrées!
Les derniers articles par Anth0kuto (tout voir)
- Vidéo-surveillance multi-caméras avec le Raspberry Pi (Partie 2) - 15 mai 2016
- Vidéo-surveillance multi-caméras avec le Raspberry Pi (Partie 1) - 14 avril 2016
- Retour vers les années 90 : Doom, Quake et Duke Nukem - 23 février 2015