Partager via


Vue d'ensemble du multimédia

Les fonctionnalités multimédias de Windows Presentation Foundation (WPF) permettent d'intégrer de l'audio et de la vidéo dans vos applications afin d'améliorer l'expérience de l'utilisateur. Cette rubrique présente les fonctionnalités multimédias de WPF.

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

Les classes MediaElement et MediaPlayer proposent du contenu audio et vidéo. Ces classes peuvent être contrôlées interactivement ou par une horloge. Ces classes peuvent utilisées les contrôles du Microsoft Windows Media Player 10 pour la lecture multimédia. La classe que vous utilisez dépend du scénario.

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 être utilisé en Extensible Application Markup Language (XAML) comme dans le code. MediaPlayer, en revanche, est conçu pour les objets Drawing et ne prend pas en charge la disposition. Les médias chargés à l'aide d'un MediaPlayer peuvent être présentés uniquement à l'aide d'un VideoDrawing ou en interagissant directement avec un DrawingContext. MediaPlayer est inutilisable en XAML.

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

RemarqueRemarque

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

RemarqueRemarque

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'un storyboard.

Classe MediaElement

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

<!-- 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 de synchronisation, l'horloge peut contrôler le MediaElement et les méthodes de contrôle interactives ont le contrôle lorsque le LoadedBehavior est Manual. MediaElement gère cette compétition pour le contrôle en évaluant les priorité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'user interface (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. Les objets dessin sont utilisés lorsque vous pouvez sacrifier les fonctionnalités du framework afin de gagner en performance ou lorsque vous avez besoin de fonctionnalités Freezable. MediaPlayer vous permet de tirer parti de ces fonctionnalités en fournissant du contenu multimédia dans 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

Référence

DrawingGroup

Concepts

Système de disposition

Autres ressources

Rubriques "Comment" relatives à l'audio et à la vidéo