Enna/libplayer – Problèmes typiques

Hello,

je reçois de temps en temps des emails de personnes qui ont des problèmes avec Enna. Comme par exemple le fait qu’ils ont des avertissements qui s’affichent tel que [mplayer] Warn: [hack] slave command ‘stop’, les snapshots des vidéos qui ne sont pas créés ou alors d’autres choses. Cette article a donc pour but de donner quelques précisions sur le fonctionnement général de Enna/libplayer et pourquoi certains messages apparaissent et comment utiliser libplayer correctement.

Les “backends”

Enna est une interface graphique et donc le décodage et la sortie audio/video sont confiés à un backend. Il existe actuellement deux backends dont l’un est lié aux EFLs en utilisant Emotion (donc GStreamer) et le second backend étant bien entendu libplayer. Une question légitime peut être de se demander pourquoi ne pas utiliser uniquement Emotion? L’avantage principale est son intégration avec les EFLs, il est donc facile de manipuler la fenêtre vidéo, de lui appliquer des effets, etc,.. Mais cette solution à aussi un désavantage, Evas étant un “canvas RGB” le sortie vidéo ne peut plus être accélérée à l’aide de Xv, XvMC, VIDIX (en VESA) et bientôt VDPAU (par exemple). Ainsi d’un point de vue performance c’est un désavantage et c’est là qu’intervient libplayer.
Je ne vais pas y revenir en détail, un article précédent explique déjà comment libplayer affiche la vidéo à travers Enna.

libplayer/MPlayer

Le titre de cet article aurait plutôt dû s’appeler “Enna/libplayer/MPlayer” mais vous conviendrez que c’est pas très esthétique. Le wrapper de MPlayer étant le plus avancé dans libplayer la raison est suffisante pour ne pas aborder les autres possibilités de libplayer tel que xine, VLC et GStreamer (en tout cas pour l’instant).

Ainsi lorsque vous utilisez Enna/libplayer vous avez besoin de MPlayer. Dans le cas contraire vous aurez droit à un joli message d’erreur en rouge vous avertissant que MPlayer est manquant, ou que vous n’avez pas compilé libplayer avec le support de MPlayer.

Les problèmes typiques

problem_solved

Problème I.

Vous avez tout compilé et installé mais lorsque vous exécutez Enna un message d’erreur apparait:

[player] Error: no wrapper registered

Le wrapper MPlayer n’a pas été compilé dans libplayer. La raison principale est que vous avez effectué un simple `./configure` en compilant libplayer. Vous n’avez pas prêté attention aux informations retournées par le script configure qui a choisi de ne pas compiler le wrapper MPlayer. Le script ignore ce wrapper s’il ne trouve pas le binaire ‘mplayer’ sur votre système. Il est possible de forcer le wrapper avec `./configure --enable-mplayer` ou alors en installant MPlayer avant de compiler libplayer.

Problème II.

Vous êtes sûr d’avoir compilé et installé libplayer correctement mais lorsque vous exécutez Enna et tentez de lire un fichier audio/video rien ne se passe. Dans les messages vous pouvez voir:

[Enna] [module.c:nnn] Warn: Unable to load module libplayer

C’est un problème classique qui arrive lorsque tout est installé mais la bibliothèque libplayer n’a pas été référencée pour ld.so (run-time linker). Il suffit alors de faire `sudo ldconfig` pour que les liens soient remis à jour. Je pense que c’est le problème le plus répandu et le plus simple de cette liste. Même que de nombreux développeurs se font avoir.

D’une fois que la librairie est référencée, il est inutile de re-exécuter cette commande, à moins d’avoir changé de --prefix.

Problème III.

Tout fonctionne mais lorsque vous lisez des fichiers audio/video des avertissements apparaissent dans la console:

[mplayer] Warn: [hack] slave command 'stop'

Ce message apparait uniquement avec les versions relativement anciennes de MPlayer. Il faut savoir que la dernière version largement “packagée” à ce jour par les distributions Linux est mplayer-rc2 (version packagée par Ubuntu dans Intrepid Ibex par exemple). Cette version date de presque un an et demi et aucune nouvelle RC n’a été publiée par le team MPlayer. Néanmoins quelques fonctionnalités nécessaires au bon fonctionnement de libplayer n’existaient pas encore. Un article précédent aborde justement la commande ‘stop’. La solution est donc de compiler une version récente de MPlayer.

Problème IV.

Vous pouvez écouter de la musique et regarder des vidéos, mais les snapshots ne s’affichent pas (les snapshots étant les images de fond capturées dans la video depuis le module video d’Enna).

Il peut y avoir plusieurs raisons à ce problème. Tout d’abord assurez-vous d’avoir la propriété use_snapshots=1 dans votre fichier ~/.enna/enna.cfg. Si le problème persiste, vérifiez qu’il n’y a pas de message d’avertissement venant de libplayer comme quoi l’image du snapshot n’a pas pu être copiée. Si c’est le cas vous devez compiler une version plus récente d’MPlayer car les snapshots PNG ne sont possibles que depuis quelques mois.

Depuis peu c’est le module metadata/libplayer qui s’occupe des snapshots et donc le backend n’est pas concerné. Par défaut ce module devrait être compilé, dans le cas contraire vérifiez s’il est bien notifié comme actif dans les messages retournés par le script configure (généré par autogen.sh) de Enna.

Problème V.

Lorsque vous fermez Enna (ou suite à une erreur), des instances de MPlayer sont toujours visibles dans la liste des processus.

Lorsque vous quittez Enna, vous devez voir des messages qui informent que les modules sont désactivés comme par exemple [Enna] [module.c:nn] Info: disable module : backend_libplayer. Dans le cas contraire cela veut dire qu’Enna n’a pas été fermé correctement et donc libplayer n’a pas été “uninitialisé”. Les processus enfants de libplayer restent alors en vie et il est donc nécessaire de les tuer manuellement (notez bien que se ne sont pas des processus zombies comme certains peuvent le penser, ils sont bien vivants mais sont en mode ‘-idle -slave‘ et attendent donc des ordres sur leur stdin).

Il y a deux conditions classiques où ce problème apparaît. Par exemple Enna c’est fait tuer tout bêtement, typiquement suite à une erreur de segmentation. Le second cas très courant est que vous avez fermé Enna en cliquant sur la croix de la fenêtre. Ce bug avait été corrigé mais est réapparut depuis quelques temps. La solution est donc de quitter Enna avec la touche d’échappement (Esc).

Problème VI.

Vous voyez tout le temps deux instances de MPlayer dans la liste des processus et même parfois plus.

Ce n’est pas un bug car il y a plusieurs “player” qui sont créés au chargement d’Enna. Tout d’abord il y a le backend qui créer une instance pour pouvoir lire les fichiers audio/video. Ensuite il y a le module metadata/libplayer qui créer également une instance. Le but étant d’avoir des modules indépendants. Vous pouvez très bien utiliser le backend libplayer sans compiler le module metadata/libplayer et inversement.

De temps en temps vous pouvez voir un troisième processus enfant mplayer. Celui-ci apparait que brièvement lorsque des meta-données sont recherchées ou lorsque des snapshots sont créés. Il faut comprendre que pour analyser des metadata, libplayer doit utiliser l’argument ‘-identify‘ d’MPlayer. Ceci ne peut se faire qu’au lancement de MPlayer pour un MRL précis. Les MPlayer lancés en mode ‘-idle -slave‘ ne peuvent en aucun cas identifier toutes les données.

Problème VII.

Vous avez un message d’erreur concernant X11, mais libplayer est correctement installé:

[mplayer] Err: auto-detection for videoout is not enabled
               without X11 support

Il y a deux possibilités.. Vous voulez utiliser Enna uniquement en Framebuffer et vous avez compilé libplayer sans le support de X11. Dans ce cas vous devez explicitement indiquer le video_out dans votre fichier ~/.enna/enna.cfg pour libplayer. L’auto-détection ne fonctionne pas sans le support de X11 pour une raison technique que je ne vais pas aborder ici. Si vous désirez garder l’auto-détection en Framebuffer, compilez libplayer également avec le support de X11.

Vous avez lancé Enna depuis X11, alors vous n’avez pas compilé libplayer avec le support de X11. Soit parce que vous avez explicitement indiqué ‘--disable-x11‘ au configure, soit parce que le configure n’a pas trouvé les en-têtes adéquates pour X11 et à donc décidé de désactiver son support. Pensez donc à installer la libX11-dev (ou équivalent). libplayer dépend de Xlib pour gérer les fenêtres X11.

Quelques remarques

Avant de poser des questions, lisez bien les messages d’erreurs retournés par Enna et libplayer. Les textes affichés dans la console ne sont pas là pour la remplir bêtement en la décorant avec des couleurs, mais ils sont là pour suivre ce qui se passe dans Enna. Les couleurs sont très importantes car elles reflètent l’importance de l’information. De manière simplifiée, les messages bleus sont insignifiants, les verts sont informatifs, les jaunes demandent à ce qu’on leurs prête plus d’attention mais ils n’indiquent pas de dysfonctionnement.
Par contre si vous voyez des messages rouges (Error) ou même pire, des messages sur fond rouge (Critical), alors il y a un problème sérieux.

Je vous conseil vivement de ne pas changer le niveau de verbosité par défaut de Enna et de libplayer. Enna est configuré en mode “info” et n’affichera pas les messages bleus. libplayer est configuré en mode “warning” et n’affichera pas les messages bleus et verts.

Si vous rencontrez un problème que je n’ai pas décrit plus haut et que vous nous contactez, veillez à nous transmettre le log complet retourné par Enna avec au moins les verbosités par défaut (ou alors avec plus de verbosité).

A bientôt,

Mathieu SCHROETER

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s