Un article de Easyneuf.
9mcc regroupe au travers d'une interface graphique unique simplifiée le contrôle du backend multimédia. Mplayer a été retenu comme moteur multimédia, pour son support d'un grand nombre de CODECS Audio et Vidéo. L'EasyGate dispose ainsi de capacités multimédias accrues avec la possibilité de :
- Lire les vidéos aux formats MPEG, MPEG-2, MPEG-4, H264, WMV3 et WMV9, Real, Quicktime,
- Lire les formats audio MP3, OGG, AAC,
- Supporter pleinement le streaming de ces formats au travers de flux MMS, RTSP, ou HTTP,
- Décoder en temps réel les données ICY permettant d'afficher le titre d'une chanson diffusée par une radio.
Associé à StreamTuner, Mplayer se transforme en jukebox audio et permet l'accès à un grand nombre de webradios.
[modifier] Interface graphique
9mcc est disponible en deux interfaces. Une interface simplifiée qui utilise un mode plein ecran dans le cadre du mode Easy et Ergo et un mode disponible sous forme de plugin sur le fond d'écran en haut a droite.
Chaque bouton dispose d'une fonctionnalité propre à savoir :
- Eject:
- Lancement de l'interface principale de démarrage (choix Consulter des Vidéos, Ecouter des Radios, Mes fichiers). Si un fichier est en cours d'écoute, celle-ci est interrompue. Le choix Vidéo n'est pas encore actif.
- Lecture :
- Lancement de la lecture, au travers de Mplayer, du fichier courant (nom affiché ou déroulant sur le panel de contrôle).
- Arrêt :
- Arrêt de la lecture courante et effacement de la liste de lecture. Fermeture de l'interface en mode Easy/Ergo.
- Changement de plage avant/arrière :
- Dans le cas ou plusieurs fichiers ont été sélectionnés lors de leur ouverture locale (mode Mes fichiers), ces boutons permettent de lancer la lecture du fichier suivant ou précédent dans la liste de pré-sélection, d'une maniere circulaire.
- +/- :
- Augmentation/Diminution du volume sonore principal.
- Haut Parleur :
- Passage en mode Mute, arrêt du son jusqu'à réactivation en cliquant dessus. (non encore implémenté).
[modifier] Fonctionnement
9mcc fonctionne sur une approche multi processus et utilise un langage de commandes interprocessus fonctionnant par des tubes de communications Unix. Ces tubes de communications sont présents dans le répertoire /tmp lors de l'exécution de l'interface.
Le code est scindé en 6 binaires qui sont tous exécutés depuis le code principale mcc. Les exécutables se trouvent dans le répertoire /usr/bin/mcc. (L'extension .bin signifie que le binaire est destiné à être "forké" depuis le code principal mcc)
- file_selector.bin
- Code source: file_selector.c
- file_selector.bin a pour objectif de présenter à l'utilisateur le sélecteur de fichiers de GTK et de transmettre la selection effectuée par celui-ci au démon principal mcc, afin de créer une pseudo playlist.
- gui.bin
- Code source: gui.c
- gui.bin est le code qui gère les événements X Windows et transmet les commandes reçues depuis l'utilisateur vers le démon principal mcc.
- eject.bin
- Code source: eject.c
- eject.bin a pour objectif de présenter une fenêtre de choix de contenus multimédias ( Vidéo, Audio, fichiers locaux ). Une fois ce choix effectué par l'utilisateur au travers d'un clic souris, le code se termine en le transmettant au démon principal mcc.
- launch_mplayer.bin
- launch_streamtuner.bin
- Code source: streamtuner.c
- mcc
- Code source: master.c
- mcc est le demon principal de l'application, c'est lui qui interprète les commandes et les émets vers les processus.
Le schéma suivant reprend l'architecture globale du programme et les relations entre les processus :
Les commandes acceptées par le démon maître (mcc) sont les suivantes :
[modifier] Les commandes émises depuis les interfaces graphiques (eject.bin et gui.bin)
- gui:eject
- Commande en provenance de gui.bin interface principale. Le bouton eject a été pressé. Le master démarre eject.bin qui permettra à l'utilisateur de déterminer le choix du média qu'il souhaite lire.
- gui:close_eject
- Commande en provenance de eject.bin. Le choix du média a été effectué et eject.bin s'est terminé.
- gui:file_selector
- Commande en provenance de eject.bin. Le choix du média est un fichier local. Le master exécute file_selector.bin.
- gui:radio
- Commande en provenance de eject.bin. Le choix du média est radio. Le master exécute launch_streamtuner.bin.
- gui:forward
- Commande en provenance de l'interface graphique principale gui.bin. Le bouton forward a été sélectionné. Le master détermine la position du pointeur courant de contenu multimédia (playback_ptr). Si celui-ci n'est pas à la fin de la playlist, il est incrémenté.
- gui:back
- Commande en provenance de l'interface graphique principale gui.bin. Le bouton backward a été sélectionné. Le master détermine la position du pointeur courant de contenu multimédia (playback_ptr). Si celui-ci n'est pas au début de la playlist, il est décrémenté.
- gui:stop
- Commande en provenance de l'interface graphique principale gui.bin. Le bouton stop a été sélectionné. Arret de la lecture courante demandée par le démon master.
- gui:play
- Commande en provenance de l'interface graphique principale gui.bin. Démarrage de la lecture du contenu multimédia déterminé par le pointeur playback_ptr du démon master.
- gui:pause
- Commande en provenance de l'interface graphique principale gui.bin. Mise en pause de la lecture courante.
- gui:sound_plus
- Commande en provenance de l'interface graphique principale gui.bin. Augmentation du niveau sonore.
- gui:sound_minus
- Commande en provenance de l'interface graphique principale gui.bin. Diminution du niveau sonore.
[modifier] Les commandes émises depuis file_selector.bin
- fsl:exit
- file_selector.bin a fini ces tâches et s'arrète.
- fsl:flname:<entier 1>:<nom de fichier 1>:<entier 2>:< nom de fichier2>:...:
- Commande de transfert de nom de fichiers sélectionnés par l'utilisateur dans le sélecteur de fichiers GTK. Pour chaque nom de fichier l'entier le précédant contient la taille en octets de la chaîne de caractères contenant le nom.
[modifier] Les commandes emises depuis launch_streamtuner.bin
- stt:exit
- Informe le programme principal de la fin normale de streamtuner.
- stt:desc
- Envoi de la part de streamtuner de la description d'un flux actuellement sélectionné par l'utilisateur. Le prochain paquet contiendra l'adresse de ce flux. Récupérer la description permet d'afficher tres rapidement à l'utilisateur le flux qu'il a sélectionné dans l'interface graphique. On évite ainsi des problèmes de timeout liés à l'initialisation de la connexion entre mplayer et le serveur.
- stt:stream
- Envoi de la part de streamtuner, d'une adresse http, rtsp, ou mms qui contient un pointeur direct sur un stream audio ou video.
- stt:playlist
- Envoi de la part de streamtuner, d'une adresse http, rtsp, ou mms qui contient un pointeur sur une playlist de type m3u nécessitant d'être décodée pour accéder au stream émis.
[modifier] Les commandes émises depuis launch_mplayer
- mpl:exit
- Fin de la lecture courante.
- ICY Info: StreamTitle
- Envoie d'un nouveau nom sur le flux ICY.
[modifier] Les commandes envoyées à la gui au travers de /tmp/gui_tube
- master:blink:<bouton>:
- Fait clignoter le bouton sélectionné (eject, stop, fwd, back).
- master:toggle:<bouton>
- Active/désactive le bouton sélectionné (valable pour play et pause).
- master:untoggle_all:
- Réinitialise les boutons à off (valable pour play et pause).
- master:playname:<chaine de caractères> :
- Affecte la valeur chaîne de caractères à l'afficheur LCD 1 (en général titre du média en cours de lecture).
- master:stop_lcd2:
- master:start_lcd2:
- Arrête/Démarre le compteur de temps affiche par lcd2 (en cas d'arrêt, réinitialisation à 0).
- master:sound_level:<entier>:
- Affecte le niveau sonore au niveau de l'entier et demande l'affichage à la gui (entier compris entre 0 et 9).
- Pause, play, quit a mplayer !!!