Share via


Información general sobre multimedia

Las características multimedia de Windows Presentation Foundation (WPF) permiten integrar audio y vídeo en las aplicaciones para mejorar la experiencia del usuario. En este tema se presentan las características multimedia de WPF.

Este tema contiene las secciones siguientes.

  • API multimedia
  • Modos de reproducción multimedia
  • Clase MediaElement
  • Clase MediaPlayer
  • Temas relacionados

API multimedia

Las clases MediaElement y MediaPlayer se utilizan para presentar contenido de audio o vídeo. Estas clases se pueden controlar interactivamente o mediante un reloj. Estas clases pueden utilizar el control Microsoft Windows Media Player 10 para la reproducción multimedia. La clase que se utiliza depende del escenario.

MediaElement es una clase UIElement compatible con Sistema de diseño que se puede utilizar como contenido de muchos controles. También se puede utilizar en Extensible Application Markup Language (XAML), así como en el código. MediaPlayer, por otro lado, está diseñado para los objetos Drawing y carece de compatibilidad de diseño. Los objetos multimedia cargados mediante MediaPlayer únicamente se pueden presentar utilizando VideoDrawing o interactuando directamente con DrawingContext. MediaPlayer no se puede utilizar en XAML.

Para obtener más información sobre los objetos de dibujo y el contexto de dibujo, consulte Información general sobre objetos Drawing.

NotaNota

Al distribuir los objetos multimedia con la aplicación, no se puede usar ningún archivo multimedia como recurso del proyecto.En lugar de ello, en el archivo del proyecto debe establecer en Content el tipo de medios y establecer CopyToOutputDirectory en PreserveNewest o Always.

Modos de reproducción multimedia

NotaNota

MediaElement y MediaPlayer tienen miembros similares.Los vínculos de esta sección hacen referencia a los miembros de la clase MediaElement.A menos que se indique específicamente, los miembros a los que se establecen vínculos en la clase MediaElement también se encuentran en la clase MediaPlayer.

Para entender la reproducción multimedia en Windows Presentation Foundation (WPF), es preciso entender los distintos modos en que se pueden reproducir los objetos multimedia. MediaElement y MediaPlayer se pueden utilizar en dos modos multimedia diferentes, el modo independiente y el modo de reloj. El modo multimedia se determina mediante la propiedad Clock. Cuando Clock es null, el objeto multimedia está en modo independiente. Cuando Clock no es null, el objeto multimedia está en modo de reloj. De manera predeterminada, los objetos multimedia están en modo independiente.

Modo independiente

En el modo independiente, el contenido multimedia controla la reproducción multimedia. El modo independiente habilita las opciones siguientes:

  • Se puede especificar el Uri del objeto multimedia directamente.

  • Se puede controlar directamente la reproducción multimedia.

  • Se pueden modificar las propiedades Position y SpeedRatio del objeto multimedia.

El objeto multimedia se carga estableciendo la propiedad Source del objeto MediaElement o bien llamando al método Open del objeto MediaPlayer.

Para controlar la reproducción multimedia en modo independiente, se pueden utilizar los métodos de control del objeto multimedia. Los métodos de control disponibles son Play, Pause, Close y Stop. Para MediaElement, el control interactivo mediante estos métodos únicamente está disponible cuando LoadedBehavior está establecido en Manual. Estos métodos no están disponibles cuando el objeto multimedia está en modo de reloj.

Consulte Cómo: Controlar un MediaElement (Reproducir, Pausar, Detener, Volumen y Velocidad) para obtener un ejemplo de modo independiente.

Modo de reloj

En el modo de reloj, MediaTimeline controla la reproducción multimedia. El modo de reloj tiene las siguientes características:

  • El Uri del objeto multimedia se establece indirectamente a través de MediaTimeline.

  • La reproducción multimedia se puede controlar mediante el reloj. No se pueden utilizar los métodos de control del objeto multimedia.

  • El objeto multimedia se carga estableciendo la propiedad Source de un objeto MediaTimeline, creando el reloj a partir de la escala de tiempo y asignando el reloj al objeto multimedia. El objeto multimedia también se carga de esta manera cuando el destino de un objeto MediaTimeline de Storyboard es MediaElement.

Para controlar la reproducción multimedia en modo de reloj, se deben utilizar los métodos de control de ClockController. ClockController se obtiene de la propiedad ClockController de MediaClock. Si intenta utilizar los métodos de control de un objeto MediaElement o MediaPlayer mientras está en modo de reloj, se producirá una excepción InvalidOperationException.

Consulte Información general sobre animaciones para obtener más información sobre relojes y escalas de tiempo.

Consulte Cómo: Controlar un control MediaElement mediante un guión gráfico para obtener un ejemplo del modo de reloj.

Clase MediaElement

Agregar objetos multimedia a una aplicación es tan simple como agregar un control MediaElement a la user interface (UI) de la aplicación y proporcionar una clase Uri a los objetos multimedia que se desea incluir. Todos los tipos de objetos multimedia que admite Microsoft Windows Media Player 10 se admiten en Windows Presentation Foundation (WPF). En el ejemplo siguiente, se muestra un uso sencillo 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>

En este ejemplo, el objeto multimedia se reproduce automáticamente en cuanto se carga. Cuando el objeto multimedia ha terminado de reproducirse, se cierra el objeto multimedia y se liberan todos los recursos multimedia (incluso la memoria de vídeo). Éste es el comportamiento predeterminado del objeto MediaElement, controlado por las propiedades LoadedBehavior y UnloadedBehavior.

Controlar MediaElement

Las propiedades LoadedBehavior y UnloadedBehavior controlan el comportamiento de MediaElement cuando IsLoaded es true o false, respectivamente. La enumeración MediaState que establece el estado de las propiedades afecta al comportamiento de reproducción multimedia. Por ejemplo, el valor predeterminado de LoadedBehavior es Play y el valor predeterminado de UnloadedBehavior es Close. Esto significa que, tan pronto como se carga MediaElement y se completa el preprocesamiento, el objeto multimedia empieza a reproducirse. Cuando se completa la reproducción, se cierra el objeto multimedia y se liberan todos los recursos multimedia.

Las propiedades LoadedBehavior y UnloadedBehavior no son la única manera de controlar la reproducción multimedia. En el modo de reloj, el reloj puede controlar MediaElement y los métodos de control interactivos poseen el control cuando LoadedBehavior es Manual. MediaElement administra esta competición por obtener el control evaluando las prioridades siguientes.

  1. UnloadedBehavior. Vigente cuando el objeto multimedia no está cargado. Garantiza que todos los recursos multimedia se liberen de manera predeterminada, aunque haya un MediaClock asociado a MediaElement.

  2. MediaClock. Vigente cuando el objeto multimedia tiene Clock. Si se descarga el objeto multimedia, MediaClock surtirá efecto mientras que UnloadedBehavior sea Manual. El modo de reloj siempre invalida el comportamiento de carga de MediaElement.

  3. LoadedBehavior. Vigente cuando el objeto multimedia está cargado.

  4. Métodos de control interactivos. Vigentes cuando LoadedBehavior es Manual. Los métodos de control disponibles son Play, Pause, Close y Stop.

Mostrar MediaElement

Para mostrar MediaElement, debe tener contenido que representar, y sus propiedades ActualWidth y ActualHeight estarán establecidas en cero hasta que se cargue el contenido. Para contenido de sólo audio, estas propiedades siempre son cero. Para el contenido de vídeo, una vez que se inicia el evento MediaOpened, las propiedades ActualWidth y ActualHeight informarán del tamaño del objeto multimedia cargado. Esto significa que hasta que se cargue el objeto multimedia, MediaElement no ocupará ningún espacio físico en la user interface (UI) a menos que se establezcan las propiedades Width o Height.

Establecer las propiedades Width y Height hará que los objetos multimedia se expandan para rellenar el área proporcionada para MediaElement. Para conservar la relación de aspecto original del objeto multimedia, debe establecer la propiedad Width o Height, pero no ambas. Establecer la propiedad Width y Height hará que los objetos multimedia se presenten en un tamaño de elemento fijo, lo que podría no ser deseable.

Para evitar tener un elemento de tamaño fijo, Windows Presentation Foundation (WPF) puede preprocesar el objeto multimedia. Para ello, establezca LoadedBehavior en Play o en Pause. En el estado Pause, los objetos multimedia se preprocesarán y presentarán en el primer fotograma. En el estado Play, los objetos multimedia se preprocesarán y comenzarán a reproducirse.

Clase MediaPlayer

Mientras que la clase MediaElement es un elemento de marco de trabajo, la clase MediaPlayer está diseñada para su uso en objetos Drawing. Se utilizan objetos de dibujo cuando se pueden sacrificar las características de marco de trabajo para obtener mejoras de rendimiento o cuando se necesitan las características de Freezable. MediaPlayer permite aprovechar estas características y, al mismo tiempo, proporcionar contenido multimedia en las aplicaciones. Al igual que MediaElement, MediaPlayer se puede utilizar en modo independiente o en modo de reloj, pero no tiene los estados de carga y descarga del objeto MediaElement. Esto reduce la complejidad del control de la reproducción de MediaPlayer.

Controlar MediaPlayer

Dado que MediaPlayer no tiene estado, únicamente hay dos maneras de controlar la reproducción multimedia.

  1. Métodos de control interactivos. Vigentes en el modo independiente (la propiedad Clock es null).

  2. MediaClock. Vigente cuando el objeto multimedia tiene Clock.

Mostrar MediaPlayer

Técnicamente, MediaPlayer no se puede mostrar, puesto que no tiene ninguna representación física. Sin embargo, se puede utilizar para presentar los objetos multimedia en Drawing mediante la clase VideoDrawing. En el siguiente ejemplo se muestra cómo utilizar una clase VideoDrawing para mostrar objetos multimedia.

//
// 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();        

Consulte Información general sobre objetos Drawing para obtener más información sobre los objetos Drawing.

Vea también

Referencia

DrawingGroup

Conceptos

Sistema de diseño

Otros recursos

Temas "Cómo..." de audio y vídeo