Vue d’ensemble du multimédia
Les fonctionnalités multimédias de Windows Presentation Foundation (WPF) vous permettent d’intégrer l’audio et la vidéo dans vos applications pour améliorer l’expérience utilisateur. Cette rubrique présente les fonctionnalités multimédias de WPF.
API multimédia
Les classes MediaElement et MediaPlayer sont utilisées pour présenter du contenu audio ou vidéo. Ces classes peuvent être contrôlées de manière interactive ou par une horloge. Ces classes peuvent être utilisées sur le contrôle 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 la disposition et peut être consommé comme le contenu de nombreux contrôles. Il est également utilisable dans XAML (Extensible Application Markup Language) ainsi que dans le code. MediaPlayer, d’autre part, est conçu pour des objets Drawing et ne prend pas en charge la mise en page. Le support chargé à l’aide d’un MediaPlayer ne peut être présenté qu’à l’aide d’un VideoDrawing ou en interagissant directement avec un DrawingContext. MediaPlayer ne peut pas être utilisé en XAML.
Pour plus d’informations sur les objets de dessin et le contexte de dessin, consultez Vue d’ensemble des objets de dessin.
Remarque
Lors de la distribution de médias avec votre application, vous ne pouvez pas utiliser un fichier multimédia en tant que ressource de projet. Dans votre fichier projet, vous devez définir le type de média sur Content
et définir CopyToOutputDirectory
sur PreserveNewest
ou Always
.
Modes de lecture de médias
Remarque
Les deux MediaElement et MediaPlayer ont des membres similaires. Les liens de cette section font référence aux membres de classe MediaElement. Sauf indication particulière, les membres liés à la classe MediaElement se trouvent également dans la classe MediaPlayer.
Pour comprendre la lecture multimédia dans Windows Presentation Foundation (WPF), une compréhension des différents modes dans lesquels le média peut être lu est nécessaire. Les deux MediaElement et MediaPlayer peuvent être utilisés dans deux modes multimédias différents, le mode indépendant et le mode horloge. Le mode multimédia est déterminé par la propriété Clock. Lorsque Clock est null
, l’objet multimédia est en mode indépendant. Lorsque le Clock n’est pas null, l’objet multimédia est en mode horloge. Par défaut, les objets multimédias sont en mode indépendant.
Mode indépendant
En mode indépendant, le contenu du média déclenche la lecture du média. Le mode indépendant active les options suivantes :
L’Uri du média peut être spécifié directement.
La lecture multimédia peut être contrôlée directement.
Les propriétés Position et SpeedRatio du média peuvent être modifiées.
Le support est chargé en définissant la propriété Source de l’objet MediaElement ou en appelant la méthode Open de l’objet MediaPlayer.
Pour contrôler la lecture multimédia en mode indépendant, les méthodes de contrôle de l’objet multimédia peuvent être utilisées. Les méthodes de contrôle disponibles sont Play, Pause, Closeet Stop. Pour MediaElement, le contrôle interactif utilisant ces méthodes n’est disponible que lorsque le LoadedBehavior est défini sur Manual. Ces méthodes ne sont pas disponibles lorsque l’objet multimédia est en mode horloge.
Consultez Contrôler un MediaElement (Lecture, Pause, Arrêt, Volume et Vitesse) pour obtenir un exemple de mode indépendant.
Mode horloge
En mode horloge, un MediaTimeline contrôle la lecture des médias. Le mode Horloge présente les caractéristiques suivantes :
L’Uri des médias est indirectement défini par le biais d’un MediaTimeline.
La lecture multimédia peut être contrôlée par l’horloge. Les méthodes de contrôle de l’objet multimédia ne peuvent pas être utilisées.
Le média est chargé en définissant la propriété Source d’un objet MediaTimeline, en créant l’horloge à partir de la chronologie et en affectant l’horloge à l’objet multimédia. Le média est également chargé de cette façon lorsqu’un MediaTimeline à l’intérieur d’un Storyboard cible un MediaElement.
Pour contrôler la lecture multimédia en mode horloge, les méthodes de contrôle ClockController doivent être utilisées. Une ClockController est obtenue à 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 sera lancé.
Pour plus d’informations sur les horloges et les chronologies, consultez la vue d’ensemble de l’animation .
Consultez Contrôler un MediaElement à l’aide d’un Storyboard pour obtenir un exemple du mode horloge.
Classe MediaElement
L’ajout de médias à une application est aussi simple que l’ajout d’un contrôle MediaElement à l’interface utilisateur de l’application et la fourniture d’un Uri au média que vous souhaitez inclure. Tous les types de supports supportés par Microsoft Windows Media Player 10 sont supportés dans Windows Presentation Foundation (WPF). L’exemple suivant montre une utilisation simple de l'MediaElement dans XAML (Extensible Application Markup Language).
<!-- This page shows a simple usage of MediaElement -->
<Page x:Class="MediaElementExample.SimpleUsage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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 se lance automatiquement 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 et 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 est true
ou false
, respectivement. Les propriétés du MediaState sont définies pour affecter le comportement de lecture multimédia. Par exemple, la LoadedBehavior par défaut est Play et la UnloadedBehavior par défaut est Close. Cela signifie que dès que le MediaElement est chargé et que la portion de preroll est terminée, 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 sont pas la seule façon de contrôler la lecture multimédia. En mode horloge, l'horloge peut contrôler MediaElement et les méthodes de contrôle interactif prennent le relais lorsque LoadedBehavior est en mode Manual. MediaElement gère ce concours de contrôle en évaluant les priorités suivantes.
UnloadedBehavior. Actif lorsque le média est déchargé. Cela garantit que toutes les ressources multimédias sont publiées par défaut, même lorsqu’une MediaClock est associée au MediaElement.
MediaClock. Actif lorsque le média a une Clock. Si le média est déchargé, le MediaClock prend effet tant que le UnloadedBehavior est Manual. Le mode horloge remplace toujours le comportement chargé du MediaElement.
LoadedBehavior. Actif lorsque le média est chargé.
Méthodes de contrôle interactives. Actif lorsque LoadedBehavior est Manual. Les méthodes de contrôle disponibles sont Play, Pause, Closeet Stop.
Affichage d’un MediaElement
Pour afficher un MediaElement il doit avoir du contenu à afficher et il aura son ActualWidth et ActualHeight propriétés définies sur zéro jusqu’à ce que le contenu soit chargé. Pour le contenu audio uniquement, ces propriétés sont toujours nulles. Pour le contenu vidéo, une fois que l’événement MediaOpened a été déclenché, le ActualWidth et le ActualHeight signalent la taille du média chargé. Cela signifie que tant que le support n’est pas chargé, le MediaElement n’occupe pas d’espace physique dans l’interface utilisateur, sauf si les propriétés Width ou Height sont définies.
La définition des propriétés Width et Height entraîne l'étirement de l'élément média pour remplir la zone destinée au MediaElement. Pour conserver le rapport d’aspect d’origine du média, la propriété Width ou Height doit être définie, mais pas les deux en même temps. La définition des propriétés Width et Height entraîne la présence du média dans une taille d’élément fixe qui peut ne pas être souhaitable.
Pour éviter d'avoir un élément de taille fixe, Windows Presentation Foundation (WPF) peut précharger le média. Pour ce faire, définissez le LoadedBehavior sur Play ou Pause. Dans un état Pause, le média exécute une opération de preroll et présente la première image. Dans un état Play, le média exécute une opération de preroll et se met à jouer.
Classe MediaPlayer
Où la classe MediaElement est un élément framework, la classe MediaPlayer est conçue pour être utilisée dans Drawing objets. Les objets de dessin sont utilisés lorsque vous pouvez sacrifier les fonctionnalités du cadre pour des gains de performance, ou lorsque vous avez besoin de fonctionnalités Freezable. MediaPlayer vous permet de tirer parti de ces fonctionnalités tout en fournissant du contenu multimédia dans vos applications. Comme MediaElement, MediaPlayer peut être utilisé en mode indépendant ou horloge, mais n’a pas les états chargés et déchargés de l’objet MediaElement. Cela réduit la complexité du contrôle de lecture du MediaPlayer.
Contrôle de MediaPlayer
Étant donné que MediaPlayer n’a pas d’état, il n’existe que deux façons de contrôler la lecture multimédia.
Méthodes de contrôle interactives. En place en mode indépendant (propriété
null
Clock).MediaClock. Actif lorsque le média a une Clock.
Affichage d’un MediaPlayer
Techniquement, une MediaPlayer ne peut pas être affichée, car elle n’a aucune représentation physique. Toutefois, il peut être utilisé pour présenter des médias dans un Drawing en utilisant la classe VideoDrawing. L’exemple suivant illustre l’utilisation d’un VideoDrawing pour afficher un 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
Voir aussi
- DrawingGroup
- Disposition
- rubriques de tutoriels
.NET Desktop feedback