Partager via


Vue d'ensemble du multimédia

Mise à jour : novembre 2007

Cette rubrique présente les fonctionnalités multimédias de Windows Presentation Foundation (WPF). Les fonctionnalités multimédias vous permettent d'intégrer du son et de la vidéo dans vos applications en vue d'optimiser l'expérience utilisateur.

Cette rubrique comprend les sections suivantes.

  • API de médias
  • Modes de lecture de médias
  • Classe MediaElement
  • Classe MediaPlayer
  • Rubriques connexes

API de médias

MediaElement et MediaPlayer proposent de l'audio, de la vidéo et de la vidéo avec du contenu audio. Ces deux types peuvent être contrôlés de façon interactive ou commandés par horloge. Ces deux types peuvent s'appuyer sur 10 OCX Lecteur Windows Media Microsoft au minimum pour la lecture du média. Ces API sont conçues pour être utilisées dans des scénarios différents.

MediaElement est un UIElement qui est pris en charge par Système de disposition et peut être consommé en tant que contenu de nombreux contrôles. Il peut également être utilisé en XAML (Extensible Application Markup Language), ainsi que dans du code. MediaPlayer est quant à lui conçu pour les objets Drawing et la prise en charge de la présentation lui fait défaut. Un média chargé à l'aide d'un MediaPlayer ne peut être présenté qu'avec un VideoDrawing ou par interaction directe avec un DrawingContext. MediaPlayer ne peut pas être utilisé en XAML.

Pour plus d'informations sur les objets Drawing et le contexte de dessin, consultez Vue d'ensemble des objets Drawing.

Remarque :

Lorsque vous distribuez du média avec votre application, vous ne pouvez pas utiliser un fichier multimédia comme ressource de projet. Dans votre fichier projet, vous devez plutôt affecter Content au type de média et PreserveNewest ou Always à CopyToOutputDirectory.

Modes de lecture de médias

Remarque :

MediaElement et MediaPlayer ont tous deux des membres similaires. Les liens de cette section se rapportent aux membres de la classe MediaElement. Sauf indication contraire, les membres qui sont liés dans la classe MediaElement se trouvent également dans la classe MediaPlayer.

Pour comprendre la lecture des médias dans Windows Presentation Foundation (WPF), il est nécessaire de comprendre les différents modes de lecture des médias. MediaElement et MediaPlayer peuvent tous deux être utilisés dans deux modes de médias différents, le mode indépendant et le mode horloge. Le mode de média est déterminé par la propriété Clock. Lorsque Clock a la valeur null, l'objet média est en mode indépendant. Lorsque le Clock n'a pas la valeur null, l'objet média est en mode horloge. Par défaut, les objets médias sont en mode indépendant.

Mode indépendant

En mode indépendant, le contenu du média détermine la lecture du média. Le mode indépendant prend en charge les options suivantes :

  • L'Uri du média peut être directement spécifié.

  • La lecture du média peut être directement contrôlée.

  • Les propriétés Position et SpeedRatio du média peuvent être modifiées.

Pour charger le média, définissez la propriété Source de l'objet MediaElement ou appelez la méthode Open de l'objet MediaPlayer.

Pour contrôler la lecture du média en mode indépendant, utilisez les méthodes de contrôle de l'objet média. Les méthodes de contrôle qui sont disponibles sont Play, Pause, Close et Stop. Pour MediaElement, le contrôle interactif à l'aide de ces méthodes est uniquement disponible lorsque le LoadedBehavior a la valeur Manual. Ces méthodes ne sont pas disponibles lorsque l'objet média est en mode horloge.

Pour obtenir un exemple de mode indépendant, consultez Comment : contrôler un MediaElement (lecture, pause, arrêt, volume et vitesse).

Mode horloge

En mode horloge, un MediaTimeline détermine la lecture du média. Le mode horloge présente les caractéristiques suivantes :

  • L'Uri du média est indirectement défini via un MediaTimeline.

  • La lecture du média peut être contrôlée par l'horloge. Les méthodes de contrôle de l'objet média ne peuvent pas être utilisées.

  • Pour charger le média, définissez la propriété Source d'un objet MediaTimeline, créez l'horloge à partir de la chronologie et assignez l'horloge à l'objet média. Vous pouvez également charger le média de cette manière lorsqu'un MediaTimeline à l'intérieur d'un Storyboard a un MediaElement pour cible.

Pour contrôler la lecture du média en mode horloge, vous devez utiliser les méthodes de contrôle ClockController. Un ClockController est obtenu à partir de la propriété ClockController du MediaClock. Si vous tentez d'utiliser les méthodes de contrôle d'un objet MediaElement ou MediaPlayer en mode horloge, un InvalidOperationException est levé.

Pour plus d'informations sur les horloges et les chronologies, consultez Vue d'ensemble de l'animation.

Pour obtenir un exemple de mode horloge, consultez Comment : contrôler un MediaElement à l'aide d'une table de montage séquentielle.

Classe MediaElement

Pour ajouter un média à une application, il suffit d'ajouter un contrôle MediaElement à l'interface utilisateur (UI) de l'application et à indiquer un Uri pour le média que vous souhaitez inclure. Tous les types de médias pris en charge par Lecteur Windows Media Microsoft sont pris en charge dans Windows Presentation Foundation (WPF). Une utilisation simple du MediaElement en XAML (Extensible Application Markup Language) est illustrée dans l'exemple suivant.

<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>
<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="SimpleUsage"
    >
  <StackPanel Margin="20">
    <MediaElement Source="media/numbers-aud.wmv" />
  </StackPanel>
</Page>

Dans cet exemple, le média fait l'objet d'une lecture automatique dès qu'il est chargé. Une fois la lecture du média terminée, le média est fermé et toutes les ressources du média sont libérées (y compris la mémoire vidéo). Il s'agit du comportement par défaut de l'objet MediaElement qui est contrôlé par les propriétés LoadedBehavior et UnloadedBehavior.

Contrôle d'un MediaElement

Les propriétés LoadedBehavior et UnloadedBehavior contrôlent le comportement du MediaElement lorsque IsLoaded a la valeur true ou false respectivement. Les propriétés MediaState sont définies de manière à influer sur le comportement de lecture du média. Par exemple, le LoadedBehavior par défaut est Play et l'UnloadedBehavior par défaut est Close. En d'autres termes, dès que le MediaElement est chargé et que le preroll est terminé, la lecture du média commence. Une fois la lecture terminée, le média est fermé et toutes les ressources du média sont libérées.

Les propriétés LoadedBehavior et UnloadedBehavior ne constituent pas le seul mode de contrôle de la lecture du média. En mode horloge, l'horloge peut contrôler le MediaElement et les méthodes de contrôle interactives ont le contrôle lorsque le LoadedBehavior a la valeur Manual. MediaElement gère cette lutte pour le contrôle en évaluant les propriétés suivantes :

  1. UnloadedBehavior. En place lorsque le média est déchargé. Toutes les ressources du média sont ainsi assurées d'être libérées par défaut, y compris lorsqu'un MediaClock est associé au MediaElement.

  2. MediaClock. En place lorsque le média possède un Clock. Si le média est déchargé, le MediaClock est appliqué tant que l'UnloadedBehavior a la valeur Manual. Le mode horloge remplace toujours le comportement chargé du MediaElement.

  3. LoadedBehavior. En place lorsque le média est chargé.

  4. Les méthodes de contrôle interactives. En place lorsque LoadedBehavior a la valeur Manual. Les méthodes de contrôle qui sont disponibles sont Play, Pause, Close et Stop.

Affichage d'un MediaElement

Pour afficher un MediaElement, celui-ci doit avoir du contenu à restituer et ses propriétés ActualWidth et ActualHeight doivent avoir la valeur zéro tant que le contenu est chargé. Pour le contenu audio uniquement, ces propriétés ont toujours la valeur zéro. Pour le contenu vidéo, une fois que l'événement MediaOpened a été déclenché, ActualWidth et ActualHeight indiquent la taille du média chargé. En d'autres termes, tant que le média est chargé, le MediaElement n'occupe aucun espace physique dans l'interface utilisateur (UI) à moins que les propriétés Width ou Height ne soient définies.

Lorsque les propriétés Width et Height sont toutes les deux définies, le média s'étire pour remplir la zone prévue pour le MediaElement. Pour conserver les proportions d'origine du média, la propriété Width ou la propriété Height doit être définie, mais pas les deux à la fois. Lorsque vous définissez à la fois les propriétés Width et Height, le média se présente avec une taille d'élément fixe, ce qui peut ne pas être souhaitable.

Pour éviter d'obtenir une taille d'élément fixe, Windows Presentation Foundation (WPF) peut exécuter une opération de preroll sur le média. Pour ce faire, affectez Play ou Pause à LoadedBehavior. Dans le cadre d'un état Pause, le média fait l'objet d'un preroll et présente le premier frame. Dans le cadre d'un état Play, le média fait l'objet d'un preroll et sa lecture commence.

Classe MediaPlayer

Même si la classe MediaElement est un élément de l'infrastructure, la classe MediaPlayer est conçue pour être utilisée dans des objets Drawing. Utilisez des objets Drawing lorsque vous pouvez sacrifier des fonctionnalités au niveau de l'infrastructure pour optimiser les performances ou lorsque vous avez besoin de fonctionnalités Freezable. MediaPlayer vous permet de tirer avantage de ces fonctionnalités tout en fournissant le contenu du média à vos applications. Comme MediaElement, MediaPlayer peut être utilisé en mode indépendant ou en mode horloge, mais il est dépourvu de l'état chargé ou déchargé de l'objet MediaElement. Cela simplifie le contrôle de lecture du MediaPlayer.

Contrôle d'un MediaPlayer

Comme MediaPlayer est dépourvu d'états, il n'existe que deux moyens de contrôler la lecture du média.

  1. Les méthodes de contrôle interactives. En place en mode indépendant (la propriété Clock a la valeur null).

  2. MediaClock. En place lorsque le média possède un Clock.

Affichage d'un MediaPlayer

Techniquement, un MediaPlayer ne peut pas être affiché car il ne possède pas de représentation physique. Il peut toutefois être utilisé pour présenter le média dans un Drawing à l'aide de la classe VideoDrawing. L'exemple suivant montre comment utiliser un VideoDrawing pour afficher le média.

//
// Create a VideoDrawing.
//      
MediaPlayer player = new MediaPlayer();

player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));

VideoDrawing aVideoDrawing = new VideoDrawing();

aVideoDrawing.Rect = new Rect(0, 0, 100, 100);

aVideoDrawing.Player = player;

// Play the video once.
player.Play();        

Pour plus d'informations sur les objets Drawing, consultez Vue d'ensemble des objets Drawing.

Voir aussi

Tâches

Démonstration d'application d'un texte à une vidéo

Démonstration d'un puzzle à reconstituer en faisant glisser ses pièces

Concepts

Système de disposition

Référence

DrawingGroup