La boîte à Tutoriels de Christopher PECAUD

Top

Utilisation de la bibliothèque de fonctions AudioVideoPlayBack avec Delphi.Net

Laisser un commentaire

Sommaire

I.Introduction
II.Installation et préliminaires
III.Diffusion d'un fichier multimédia
IV.Contrôle de la diffusion
V.Paramètres d'affichage d'une vidéo
VI.Gestion des paramètres de diffusion
VII.Conclusion

I Introduction

Au cours de ce tutoriel, je vais vous montrer comment réaliser un MediaPlayer, avec la version DirectX Managée 9.0c. Il est clair que AUDIOVIDEOPLAYBACK n'offre pas les mêmes possibilités que DirectShow pour la plateforme Win32. En effet ici vous pourrez juste concevoir un simple Player. Cette version est complètement dépourvue de gestion de filtres. Cela devient donc extrêmement facile de réaliser ce genre d'application. Pour pouvoir lire les médias les plus répandus, il vous faudra juste installer les bons codecs sur votre ordinateur. J'ai réalisé ce petit tutoriel par l'intermédiaire de Turbo Delphi.Net.

II Installation et préliminaires

Je vous conseille d'installer pour ce tutoriel la dernière version de DirectX 9.0c qui date d'août 2007. Elle est téléchargeable sur le site de Microsoft à l'adresse suivante :

L'installation ne posant pas de problèmes particuliers, nous allons passer directement à la conception du projet.

Tout d'abord, vous allez créer une application Application Windows Form, que vous sauvegarderez comme bon vous semble.

Nous allons maintenant détaillée les principales étapes de la création de l'interface. Vous allez ensuite ajouter la référence de l'espace de nom AudioVideoPlayback à votre application, en cliquant sur le bouton droit de la souris sur le noeud Références de l'arbre, un menu contextuel apparaît :

image montrant le menu contextuel permettant l'ajout d'une référence à une solution

Une fois la commande « Ajouter une référence... » sélectionnée une nouvelle fenêtre apparaît :

image montrant la'assistant d'ajout d'une référence à un projet

Dans l'onglet « Assemblages .Net » sélectionnez « Microsoft.DirectX.AudioVideoPlayback » comme nom d'assemblage puis validez. Le nom de l'assemblage doit maintenant figurer dans la liste des références de votre projet.

image montrant la vue d'une d'une référence ajoutée à un projet

Vous allez ensuite créer votre fiche principale qui doit ressembler grosso modo à ceci :

image montrant l'apparence de l'interface graphique de l'application

Vous aurez donc besoin des composants suivants :

  • Une barre de menu comportant les éléments Fichier, Contrôle, Vidéo.
  • Un panel qui permettra l'affichage des vidéos.
  • Une TrackBar permettant de gérer le volume.
  • Une TrackBar permettant de visualiser la progression de la diffusion d'un clip.
  • Deux labels, un pour le volume (Text := 'Volume') et l'autre pour le tracking (Text := 'Tracking')
  • Une StatusBar permettant de mettre en évidence une action en cours d'exécution.
  • Et bien sûr une boîte d'ouverture de fichiers.

Voilà maintenant, vous allez pouvoir passer à l'écriture du code proprement dit.

III Diffusion d'un fichier multimédia

1.Gestion d'une vidéo

La diffusion d'un clip vidéo en utilisant le code managé, se fait extrêmement simplement puisque DirectX gère directement la conception des graphes. Donc nous n'avons pas à nous soucier du choix de tel ou tel filtre pour composer un graphe suivant tel ou tel format de fichier choisi. Bien sûr il faut tout de même avoir installé les filtres adéquat sur votre machine. Donc la lecture se fait par le code suivant :


var iVideo : Video
if (OpenFileDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK) 
then
	Try
   		ivideo := video.Create(OpenFileDialog1.FileName);
   		iVideo.Owner := Panel1;
   		iVideo.Play;
   		iVideo.Pause;
  	Except
    	MessageBox.Show('Impossible d''ouvrir le fichier. 
	                 	Veuillez choisir un nouveau fichier', 
	                	'Avertissement', MessageBoxButtons.OK);
  	End

End

La diffusion d'un clip vidéo se fait par l'intermédiaire d'un objet de type Video. Il est créé en prenant comme argument le nom du fichier que l'on a sélectionné dans la boîte de dialogue d'ouverture de fichiers. La diffusion du clip se fera par l'intermédiaire du contrôle Tpanel que l'on a déposé sur la fiche. La lecture du fichier vidéo se fait par l'intermédiaire de la fonction Play. On invoque ensuite la fonction Pause. Ce procédé nous permet de stoppé la lecture sur la première image de la vidéo.

Ce code a été placé à l'intérieur d'un bloc Try ... Except ... End

Ce procédé permet de gérer assez simplement les exceptions. Si par exemple vous choisissez un fichier qui n'est pas pas un fichier vidéo, un message d'erreur apparaît à l'écran. Avec ce procédé le message d'erreur est remplacé par un message personnalisé, qui invite l'utilisateur à sélectionner un nouveau fichier.

2. Gestion d'un fichier Audio

La lecture d'un fichier Audio se fait de façon similaire, on va d'abord créer un objet de type Audio :

var iSon   : Audio;

Ensuite on va écrire le code suivant :


Try
  	iSon := Audio.Create(OpenFileDialog1.FileName);
Except
 	MessageBox.Show('Impossible d''ouvrir le fichier. 
	               	Veuillez choisir un nouveau fichier',
	               	'Avertissement', MessageBoxButtons.OK);
End
				

Pour créer l'objet permettant de diffuser le fichier audio, on va appeler le constructeur de la ide Audio en lui passant comme paramètre le nom du fichier sélectionné.

Aucune autre ligne de code n'est nécessaire pour lire un fichier son. Bien sûr je vous laisse le soin de personnaliser votre interface comme bon vous semble, soit en « cachant » le contrôle Tpanel, soit en diffusant une vidéo en boucle dans le Tpanel par exemple. Nous allons maintenant voir comment contrôler la diffusion de la vidéo.

IV Contrôle de la diffusion

1.Jouer le fichier

Pour jouer un fichier audio ou vidéo, comme on l'a vu précédemment, il suffit d'appeler la fonction Play de la ide Video ou Audio.

Pour un son on aura le code suivant :


iSon.play;

Pour une vidéo on écrira ceci :


iVideo.play;

c'est aussi simple que cela. Maintenant il est possible d'agir si le fichier est en train d'être joué. Ceci sera réalisé par l'intermédiaire de la propriété Playing de la ide Video ou Audio.

Nous pouvons par exemple en profiter pour personnaliser la le texte de la barre d 'état de la façon suivante :


if iVideo.Playing then
  	StatusBar1.Text := 'Diffusion du média en cours...';
				

2. Mettre en pause la lecture.

Ceci se fait par l'intermédiaire de la fonction Pause d'une des deux ides :


iSon.Pause;
				

Comme pour la lecture il est possible d'agir en fonction de l'événement « Pause ». Mais dans le cas présent, c'est seulement dans le cas où la pause a été effecuée.

On doit alors appeler la propriété Paused, comme suit :


if (iVideo.Paused)  then
    StatusBar1.Text := 'Diffusion du média mis en pause...'; 
				

3. Stopper la diffusion du média.

Pour stopper la diffusion rien de plus simple, il suffit d'appeler la fonction Stop d'une des deux ides, comme suit:


iVideo.Stop;
				

Tout comme précédemment il est possible d'interagir avec l'événement « Diffusion stoppée » par l'intermédiaire de la propriété booléenne Stopped :


if (iVideo.Stopped)  then
  	StatusBar1.Text := 'Diffusion du média stoppée...';
				

Voilà maintenant nous allons voir comment nous pouvons agir sur l'affichage d'une vidéo.

V Paramètres d'affichage d'une vidéo

1. Affichage en Plein Ecran

Pour réaliser l'affichage en plein écran de la vidéo il suffit d'utiliser la propriété booléenne FullScreen, comme ceci :


iVideo.FullScreen := True;

2. Affichage en mode Normal

Pour revenir au mode d'affichage normal, c'est-à-dire à l'affichage à l'intérieur de notre Panel, il faut positionner la valeur de la propriété FullScreen à False, comme suit :


iVideo.FullScreen := False;

3. Affichage en 640*480

Pour réaliser cette opération, vous devez à la fois redimensionner votre fenêtre et votre Panel contenant la vidéo.

Pour ce faire on utilise le code suivant :


Width := 648;
Height := 570;
Panel1.Height := 480;
Panel1.Width := 640;
iVideo.Size.Height := Panel1.Height;
iVideo.Size.Width := Panel1.Width;

D'abord on va redimensionner notre fenêtre pour qu'elle puisse contenir tous les composants à afficher. Ensuite on va redimensionner le panel, et on ajuste les coordonnées de la vidéo à afficher en fonction des coordonnées du panel contenant. Tous ces changements se font par l'intermédiaire des propriétés Width et Height de chaque composant. Voilà maintenant que nous avons comment dimensionner la vidéo, nous allons nous penché sur la gestion de la diffusion (gestion du son et gestion et visualisation de l'état de la diffusion (tracking)...

VI Gestion des paramètres de diffusion

1. Gestion du volume sonore

La gestion du volume sonore va être gérée par l'intermédiaire de notre TrackBar spécialement créé à cet effet...

Il faut noter que la gestion du volume sonore se fait par l'intermédiaire de la propriété Volume de la ide Audio, comme ceci:


ivideo.Audio.Volume := TrackBar1.Value;

Il est à noter de même que la valeur du volume est comprise entre -10000 et 0. 0 étant la valeur la plus élevée. Si vous regarder de même l'application qui gère le son sur Windows, vous pourrez constater que cette action ne modifie en rien la valeur en cours du volume de vos haut parleurs.

2. Le Tracking de la diffusion

Afin de visualiser l'avancement de la diffusion de notre media, nous allons utiliser la trackbar spécialement créé. Vous allez placer les valeurs 0 et 100 respectivement sur les propriétés Minimum et Maximum de la TrackBar, pour obtenir nos 100 intervalles.

Pour réaliser cette opération, il est nécessaire de connaître à un intervalle régulier la position actuelle dans la diffusion du clip. Donc nous allons introduire un composant TTimer. Ce composant va nous permettre de réaliser cette opération par l'intermédiaire de l'événement OnTick. Pour l'activer double-cliquez sur le composant la fonction correspondante est aussitôt ajoutée dans l'éditeur de code. Voici le code qui va vous permettre de visualiser l'avancement de la diffusion de votre clip.

DeltaH := 100 / iVideo.Duration * iVideo.CurrentPosition ;
TrackBar2.Value := System.Convert.ToInt16(DeltaH);

Donc comme vous pouvez le constater il faut donner comme indications les valeurs respectives à la durée et à la position courante. Cela va permettre de donner à chaque appel de la fonction OnTick une valeur d'avancement à notre Trackbar.

VII Conclusion

Vous avez pu réaliser, grâce à ce petit tutoriel, un MediaPlayer de base, pouvant lire des fichiers vidéo et audio. Nous avons pu voir que le framework .Net gère les aspects fastidieux de la conception de graphe. Avec AudioVideoPlayback on ne gère plus la connection de filtres comme c'était le cas avec DirectShow. Toutefois il est toujours possible elphi .Net de travailler avec ces notions par l'intermédiaire de Managed DirectShow (DirectShowLib), vous en aurez un aperçu lors d'un prochain tutoriel...