Application multimédia : présentation de flux MPEG

Frank Singhoff










I. Présentation

Le travail consiste à réaliser un service de vidéo à la demande simplifié manipulant des flux vidéos compressés au standard MPEG. On vous demande de répondre aux questions 1, 2, 3, et 4. Vous déposerez votre solution dans un sous répertoire à votre nom créé dans le répertoire ~singhoff/TRV_CC2. Vous devrez donner vos réponses aux questions 1, 3 et 4 avant le vendredi 13 février à 20h. Vous n'êtes pas obligé de fournir un rapport : les réponses aux questions 3 et 4 ainsi qu'un éventuel texte décrivant le fonctionnement de la synchronisation demandée dans la question 1 peuvent être données dans un ou plusieurs fichiers texte. Vous travaillerez en binome au plus.

II. Modèle producteur/consommateur

Le programme permettant de visionner des flux MPEG est constitué d'un tampon et de deux threads (cf figure ci-dessus). Le premier thread lit à partir du disque les images MPEG puis les stocke dans un tampon. Le deuxième thread récupère les images du tampon, les décode puis les présente dans une fenêtre X11.

Question 1 : mise en oeuvre du tampon


On vous demande d'abord de compléter le code C++ permettant de gérer le fonctionnement du tampon :
  1. Récupérez le fichier mpeg.csh et utilisez la commande source mpeg.csh dans chaque shell où vous travaillerez sur ce TP.
  2. Récupérez le fichier tar suivant.
  3. Le tampon doit fonctionner de la façon suivante :

  4. Complétez les fichiers buffer.C et buffer.H. Les zones à compléter sont indiquées par des étoiles.
  5. Vous testerez votre solution avec le programme chaine.C. Vous disposez d'un Makefile pour la construction des exécutables.

Question 2 : décodeur de fichiers MPEG


Attention : l'utilisation des signaux temps réel (ex : SIGRTMIN) fonctionne uniquement dans les salles LC217B et LC217A. Vous devez donc tester votre programme sur les machines de ces salles de TP.


On vous demande maintenant d'intégrer votre tampon dans un décodeur MPEG. Pour ce faire, effectuez les opérations suivantes :



Question 3 : plusieurs consommateurs et plusieurs producteurs


On suppose maintenant que le tampon peut être accédé simultanément pas plusieurs consommateurs et plusieurs producteurs. Lorsqu'un producteur a commencé à écrire dans le tampon grâce à la méthode write, les autres producteurs doivent attendre que l'écriture en cours soit terminée. Lorsqu'un consommateur a commencé à lire dans le tampon grâce à la méthode read, les autres consommateurs doivent attendre que la lecture en cours soit terminée. Proposez une nouvelle version des fichiers buffer.C/buffer.H.



Question 4 : architecture de l'application player.C

Le programme player.C est constitué de deux threads : la première thread lit depuis le disque les images MPEG puis les dépose dans un tampon. La deuxième thread récupère les trames depuis le tampon, les décode, puis les présente dans une fenêtre X11.

Une autre solution possible pour réaliser le programme player.C consiste à n'utiliser qu'un thread qui lit, puis présente chaque image, les unes à la suite des autres. En général, on préfère utiliser plusieurs threads et des tampons. A votre avis pourquoi ?