Raspberry Pi 3 et Serveur Plex : le transcodage

Le Raspberry Pi 3 est récent et beaucoup d’entre nous se sont posés des questions quant à sa capacité à faire un bon serveur Plex. Le bousin a beau être plus puissant que son prédécesseur, il reste loin d’un PC classique.

Petite vérification par moi-même de ses capacités (car pas facile de trouver des réponses claires sur le Net) :

Mon montage

Ces derniers temps, je me suis amusé à faire un petit montage sympa qui répond à quelques unes de mes (vos ?) questions. Je vous propose de partager les réponses, et j’étofferai au fur et à mesure.

Pour faire des économies d’électricité, je ne me sers plus de mon PC et de ses centaines de Watts comme serveur là ou un petit truc consommant 5W et un disque réseau peuvent suffire. J’ai donc sur mon réseau :

  • Un player Freebox Revolution connectée à la TV
  • Un mobile sous Android avec l’appli Plex
  • Un Raspberry Pi 2 connecté sur une autre TV
  • Un Raspberry Pi 3 hébergeant un serveur Plex (sous Raspbian)

Le Pi 3 est-il capable de faire du transcodage à la volée ?

Transcodage, conversion, optimisation : tout ça désigne la même chose : ré-encoder le fichier en un autre format compréhensible par le logiciel de lecture. C’est une opération qui nécessite une puissance de calcul conséquente et il est difficile pour des petites machine de réaliser cette conversion aussi vite que le film est lu. Pour un Pi 3, la question se pose légitimement :

Réponse : et bien oui et non. Plex sait manifestement transcoder jusqu’à un certain point. Pour la lire la vidéo ci-dessous (en 576×240) sur Chrome (qui grosso modo ne supporte que le H.264) ou sur l’app Android, notre courageux petit Pi se lance tout de même dans le transcodage :

Transcodage en direct avec Plex

Pour lire le fichier sur la freebox en revanche, pas de problème de conversion, la lecture est directe sans altération :

Plex lecture directe

Dans ces exemples, il n’y a aucun problème car soit la vidéo est déjà encodée au bon format et elle est lue directement (direct play, seconde image), soit elle est petite et ne nécessite pas une puissance plus importante que ce que peut fournir le Pi (première image). Mais il ne faut pas se leurrer, certains fichiers plus gros ne pourront jamais être transcodés en live.

Alors point de salut sans transcodage pour les gros fichiers ?

Les plus exigeants d’entre-vous voudront au minimum des fichiers en full HD (1080p) et en 5.1 (AC3). Problème, ces formats peuvent nécessiter une conversion et là, le Pi montre ses limites. Il ne transcodera pas assez vite la vidéo. La solution, c’est soit avoir un player compatible avec ces formats (direct play), soit la conversion en tâche de fond :

Le Pi peut transcoder en arrière plan grâce à la fonction « Optimiser » qui se trouve sur chaque film. Vous choisissez la qualité et vous cliquez sur « Optimiser ». Quelques temps plus tard, vous pourrez le regarder sur votre mobile par exemple en live et sans saccade. Sauf que vous vous doutez bien que ça prend du temps : un film en full HD et en AC3 de 2h m’a pris 7h à convertir. Vous voyez là pourquoi le temps réel est impossible sur un Pi sur des fichiers full HD.

Optimiser une vidéo avec Plex
Optimisation d’une vidéo avec Plex.

Dans le détail : les niveaux H264

A noter aussi, particulièrement pour le lecteur Android : le format H264 utilise des niveaux qui sont des limitations sur un certain nombre de paramètres qui permettent aux décodeurs de limiter les ressources mémoires et calculatoires nécessaires pour décoder une vidéo. Or, ces limitations du lecteur vont forcer le serveur à transcoder la vidéo. Il faut donc trouver le meilleur compromis entre :

  • avoir un niveau le plus élevé possible jusqu’à ce que le téléphone ne puisse plus supporter la lecture de la vidéo (tant au niveau bande passante que décodage processeur)
  • avoir un niveau trop bas qui provoque un transcodage du serveur Pi

Cela étant dit, ce type de transcodage est passé comme une fleur avec mon film HD (cf. capture en bas d’article).

Sur Android, vous pouvez définir ce niveau dans Paramètres / Avancé / Lecteur /Niveau maximum H264. Par défaut il est à 40 (4.0)

Petite expérience avec un film HD / AC3 :

Le film a pu être lu tel quel (direct play) sur :

  • la Freebox Revolution
  • mon client RaspPlex (Raspberry Pi2)

Et a nécessité un transcodage qui a mis à genoux le Pi sur :

  • mon application Plex Android
  • le site Plex.tv

Plex : serveur pas assez puissant

Après optimisation pour mobile, la vidéo s’est lue sans soucis sur l’app Android (mais pas Plex.tv, je ferai un nouveau test pour lui).

Sur Plex.tv, vous pouvez même choisir votre version. Sur mobile il prend logiquement celle optimisée pour… mobile.

Plex choix de version

Les bons formats

Je conclue que pour être lues partout, il vaut mieux que nos vidéos soient en HD et en H264 (niveau 40) / AAC. Ou au pire, on « optimisera ».

Pour les exigeants fans de HD, il faut que votre player prenne en charge les codecs pour passer en direct play (sans transcodage). Là, c’est à vous de vous renseigner sur les codecs pris en charge.

Screenshot Civil War
La version transcodée pour mobiles tourne maintenant parfaitement en direct play.
Screenshot Zootopia
Attention, même en H264, la lecture peut nécessiter un transcodage (ici toutefois supporté correctement).

Voili voilou. Je reviendrai peaufiner l’article au fur et à mesure. Il faudrait tâtonner un peu pour connaître les limites du Pi en terme de conversion à la volée. ++ 🙂

Edition du 20 mars 2017 : transcodage et puissance processeur 

J’ai aujourd’hui un peu plus de recul sur le bouzin et force est de constater qu’un Raspberry Pi, même 3ème du nom ne peut pas tout. En effet, si l’on souhaite se passer du transcodage, il faut préparer son film en amont. Or, je cherche à la fois un confort lors de la sélection et du visionnage du film, mais aussi lors qu’il faut l’ajouter dans ma bibliothèque. Et là, vérifier que le film est en mp4, que le son est supporté, que le Plex ne prendra pas l’initiative d’incruster des sous-titres ou de changer le débit (et donc pour tout ça de transcoder), c’est fatigant.

Le Pi supporte certes des transcodages légers (les sous-titres, certains contenus audio), mais ce n’est pas suffisant. Vous imaginez bien que les transcodages Full HD sont tout bonnement impossibles en temps réel et nécessite tellement de puissance qu’il faut un processeur de PC pour les assumer (ou « optimiser » le film pendant plusieurs heures).

Pour avoir une idée de ce qui est nécessaire, Plex se fie au score « PassMark », un comparateur de « puissance de calcul ». Le Raspberry n’est pas intégré, mais on peut imaginer qu’il se trouve quelque part aux alentours de 500. Il vous faut minimum du 2000 pour espérer transcoder du Full HD. Mon fixe (un vieux core i7 4770k) a un score de plus de 10 000, un très vieux Core2 Quad (Q9400 @ 2.66GHz) atteint les 3 400. Moralité, il vous faut un PC, même un vieux, mais un PC.

La légende dit qu’il faudrait un score de 4 000 à 5 000 pour transcoder de la 4k. Je confirmerai peut-être un jour. 🙂

Bref, perso, j’ai retourné ma veste du bon côté et ai pris le parti de la facilité en choisissant de revenir sur un bon vieux PC des familles. Inconvénient : il faut l’allumer et l’éteindre. Le plus : ça dépote du yuka. 🙂

Edition du 24 août 2017 : le réseau

Vous allez peut-être trouvé ça un peu bête, mais ça vaut le coup de le mentionner : vérifiez la bande passante de votre réseau.

Si le processeur faiblard de votre serveur n’est pas en cause, sachez que les CPL et les WIFI n’ont pas forcément toujours un débit suffisant pour diffuser une vidéo en Full HD de 25 Mbps. Damned.

Par exemple, chez moi avec mon débit Internet de 3 Mbps, je ne me posais pas vraiment de question sur la rapidité de mon réseau domestique et on diffusait des vidéos en HD (720 lignes) stéréo au mieux (bêtement car elles sont 3 fois plus rapides à télécharger).
Puis nous avons acheté une télé plus grande et reçu la (sainte) fibre. Nous avons donc voulu diffuser via Plex des vidéos Full HD (1080p / 5.1) et : Mouhahaha, marche pas.

Et pourquoi ? Parce que mon CPL comme mon Wifi ont un débit ridicule : 10 à 20 Mbps. Comme une vidéo full HD peut atteindre facilement un débit supérieur à 20 Mbps sur des scènes riches, ça crée un goulot d’étranglement et hop : bufferisation.

Pourquoi un débit si pourri ? C’est peut-être dû à la configuration des pièces, mais plus probablement à l’encombrement de la bande Wifi des 2.4Ghz (et à l’utilisation normes WiFi obsolètes par mes appareils sur cette fréquence).
J’en déduis ça car des appareils plus récents fonctionnant avec le Wifi de la box en 5Ghz tournent à plus de 150 Mbps.

Voilà qui explique pourquoi (paradoxalement) je pouvais voir la TV Orange en Full HD via Internet et pas mes vidéos sur mon réseau local : le player et la box Orange sont connectés en Wifi ac 5 Ghz alors que mon serveur Plex est rattaché au réseau en vieux 2.4Ghz.

CQFD, il fallait le trouver !

Dans mon cas, j’ai deux choix :

  • changer mon matériel pour être complètement compatible avec les dernières normes Wifi,
  • ou passer au filaire.

Avec l’expérience, après avoir abandonné le Pi pour sa faible puissance, je vais abandonner le Wifi et le CPL pour leur lenteur et câbler la maison en ethernet. Parce qu’à un moment, ça va bien hein.
Si vous avez la possibilité et la volonté de le faire, c’est votre meilleure option. Sinon, il vous reste à mettre à niveau complètement votre équipement WiFi, si possible en norme ac 🙂

Voilà, ainsi se termine le tour de mes mystères mystérieux sur Plex. Mon installation sera bientôt parfaite. 🙂

8 réflexions sur « Raspberry Pi 3 et Serveur Plex : le transcodage »

  1. Bonjour,
    tout d’abord merci beaucoup pour ce test,
    j’aurai une question car aujourd’hui j’utilise plex serveur sur mon pc avec des films en 1080p
    par rapport au client chromecast il prend en compte le h264 donc seulement l’audio est transcodé de AC3 en AAC..
    pense tu que le Raspberry Pi 3 suffit pour le transcodage audio + éventuellement des sous-titre ?

    Merci beaucoup.

    Thomas.

    1. Hello Thomas, sincèrement je ne sais pas.
      L’audio n’est pas a priori ce qui est le plus lourd à transcoder, mais je pars du principe que le transcodage (hors sous-titre) réclame tellement de puissance que je ne l’envisage plus sur Pi.
      Mais si tu trouves la réponse, je suis curieux. 🙂

  2. Merci pour ces infos. Pour ton pc tu peux régler l’extinction avec windows et l’allumage (si tu as) dans ton bios. Chose que je fais. Il s’allume tout les matin à 9h et s’éteind à 23h. Sauf le weekend je m’en charge.

    Et je pense rester aussi sur mon bon vieux pc qui consomme mais qui marche à merveille en local ou à distance.

    Mais je vais revenir à la bonne vielle version du câble ethernet.

    Z

  3. Hello, j’ai monté un serveur Plex sur mon RPi3 et ça marche pas mal sur ma TV LG (appli Plex intégrée via WebOS), du moment que je n’ajoute pas de sous-titres. Par contre avec sous-titres, ça lag sévère.

    De ce que je comprends de ton article, ajouter des sous-titres force nécessairement un transcodage ? Donc il faudrait que je trouve des sous-titres directement inscrustés et ça passerait mieux ? (Je ne pense pas que Plex côté client sache ajouter des sous-titres à la volée ? ^^)

    1. Hello,
      yep, l’ajout de sous-titres par incrustation dans la vidéo nécessite de la transcoder.
      Du coup, oui, avec les sous-titres déjà incrustés Plex aura moins de chances de devoir transcoder.
      Plex côté client ne semble pas savoir faire grand chose. Je sais juste que si son hardware supporte le format vidéo il fait du Direct Play et sinon il transcode. Idem pour le son.
      Donc pour les sous-titres, je dirais non.

      ++

  4. bon débrief sur le RPI et ses possibilités! streamer des fichiers de 15gb ça plante… toutefois j’ai une question qui me travaille car je n’arrive pas à faire la manip suivante:

    je souhaite déplacer le dossier transcode (présent sur la carte mémoire qui me lance Debian Stretch et Plex) vers mon disque dur externe au format NTFS (si cela a une importance). Car depuis peu, mon espace de stockage sur la carte SD est insuffisant (suite à une MAJ) et je ne peux plus regarder de films.

    J’ai beau avoir créer un dossier /mnt/library/Plex sur mon disque dur NTFS et avoir indiqué le chemin dans les paramètres avancés du Transcoding lorsque je suis dans les réglages du server Plex mais ça ne marche pas…car je ne sais faire que du copier coller de ce que je trouve sur les forums pour parvenir à mes fins.

    Le but: avoir uniquement une Micro SD de 2gb qui contient l’Os et Plex pour faciliter la sauvegarde d’image, et toutes les tâches de transcoding sur mon disque dur externe (qui a sa propre alimentation)

    Pourrais tu me répondre en m’indiquant les lignes de commandes à rentrer?

    voici le lien que j’ai utilisé pour installer Plex sur mon Rpi 2B

    https://wiki.mchobby.be/index.php?title=RASP-PLEX-MEDIA-SERVER

    Merci!

    Julien

    P.S. La domotique avec le RPI dans mon fourgon c’est pas mal!

    1. Hello,

      à vrai dire, je pense que Google t’aidera plus que moi sur le sujet. Perso, j’ai trouvé ceci qui pourrait peut-être t’aider : https://support.plex.tv/hc/en-us/articles/201105343-Advanced-Hidden-Server-Settings (TranscoderTempDirectory)

      Cela dit, si ça t’intéresse j’ai un petit retour rigolo au sujet de l’espace disponible :

      De mon expérience, si Rasplex est un petit OS qui tient sur une poignée de Gos, son cache peut devenir rapidement obèse. Je ne parle même pas du dossier transcoding, mais des dossiers qui vont stocker les affiches, les musiques et les infos pour chaque média. Ca prend vite plusieurs gigas au point que je te conseillerais plus une carte de 32 Gos (vérifie le support de cette capacité sur ton modèle Pi), voir plus.

      Je sais, je sais, c’est la solution de facilité. Mais vu le prix des cartes SD aujourd’hui c’est un bon investissement pour garder son système le plus simple possible.

Laisser un commentaire

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