Información general sobre multimedia

Las características multimedia de Windows Presentation Foundation (WPF) le 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.

API multimedia

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

MediaElement es una clase UIElement que el Diseño admite y se puede consumir como el contenido de muchos controles. También se puede usar en lenguaje XAML, así como en código. MediaPlayer, por otro lado, está diseñado para objetos Drawing y carece de soporte por parte del diseño. Los elementos multimedia cargados mediante MediaPlayer solo pueden representarse con VideoDrawing o interactuando de forma directa con DrawingContext. MediaPlayer no se puede usar en XAML.

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

Nota:

Al distribuir elementos multimedia con la aplicación, no puede usar un archivo multimedia como recurso del proyecto. En el archivo de proyecto, debe establecer en su lugar el tipo de elemento multimedia en Content y establecer CopyToOutputDirectory en PreserveNewest o Always.

Modos de reproducción multimedia

Nota:

Tanto MediaElement como MediaPlayer tienen miembros similares. Los enlaces en esta sección hacen referencia a los miembros de clase MediaElement. A no ser que se especifique, los miembros vinculados en la clase MediaElement también están 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 elementos multimedia. Se pueden usar tanto MediaElement como MediaPlayer en dos modos de elementos multimedia diferentes, el modo independiente y el modo de reloj. El modo de elementos multimedia viene determinado por la propiedad Clock. Cuando Clock es null, el objeto de elementos multimedia está en modo independiente. Cuando Clock no es nulo, el objeto de elementos 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:

  • Uri de elementos multimedia se puede especificar directamente.

  • La reproducción multimedia se puede controlar directamente.

  • Las propiedades Position y SpeedRatio de los elementos multimedia se pueden modificar.

Los elementos multimedia se cargan estableciendo la propiedad Source del objeto MediaElement o llamando al método Open del objeto MediaPlayer.

Para controlar la reproducción multimedia en el modo independiente, se pueden usar 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 solo está disponible cuando LoadedBehavior se establece en Manual. Estos métodos no están disponible cuando el objeto multimedia está en el modo de reloj.

Consulte Control de un MediaElement (Reproducir, Pausar, Detener, Volumen y Velocidad) para ver un ejemplo del modo independiente.

Modo de reloj

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

  • Uri de elementos multimedia se establece de forma indirecta a través de MediaTimeline.

  • El reloj puede controlar la reproducción multimedia. No se pueden usar los métodos de control del objeto multimedia.

  • Los elementos multimedia se cargan al establecer la propiedad Source de un objeto MediaTimeline, crear el reloj para la escala de tiempo y asignar el reloj al objeto de elementos multimedia. Los elementos multimedia también se cargan de este modo cuando una clase MediaTimeline dentro de Storyboard tiene como destino MediaElement.

Para controlar la reproducción de elementos multimedia en el modo de reloj, debe usarse el método de control ClockController. ClockController se obtiene de la propiedad ClockController de MediaClock. Si intenta usar los métodos de control tanto de un objeto MediaElement como MediaPlayer en modo de reloj, se lanzará InvalidOperationException.

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

Consulte Control de un control MediaElement mediante un guión gráfico para ver un ejemplo del modo de reloj.

Clase MediaElement

Agregar elementos multimedia a una aplicación es tan sencillo como agregar un control MediaElement a la interfaz de usuario (UI) de la aplicación y proporcionar un identificador Uri al elemento multimedia que se desea incluir. Todos los tipos de elementos multimedia admitidos por el Media Player de Microsoft Windows 10 se admiten en Windows Presentation Foundation (WPF). En el ejemplo siguiente se muestra un uso sencillo de MediaElement en lenguaje XAML.

<!-- 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>

En este ejemplo, el elemento multimedia se reproduce automáticamente en cuanto se carga. Cuando el elemento multimedia termina de reproducirse se cierra y se liberan todos los recursos multimedia (incluso la memoria de vídeo). Este es el comportamiento predeterminado del objeto MediaElement y se controla mediante las propiedades LoadedBehavior y UnloadedBehavior.

Control de MediaElement

Las propiedades LoadedBehavior y UnloadedBehavior controlan el comportamiento de MediaElement cuando IsLoaded es true o false, respectivamente. Las propiedades de MediaState se establecen para afectar al comportamiento de la reproducción de los elementos multimedia. Por ejemplo, el valor predeterminado LoadedBehavior es Play y el valor predeterminado UnloadedBehavior es Close. Esto significa que el elemento multimedia empieza a reproducirse en cuanto se carga MediaElement y se completa el preprocesamiento. Cuando se completa la reproducción, el elemento multimedia se cierra y se liberan todos los recursos multimedia.

Las propiedades LoadedBehavior y UnloadedBehavior no son la única forma de controlar la reproducción de elementos multimedia. En el modo de reloj, el reloj puede controlar MediaElement y los métodos de control interactivos tienen control cuando LoadedBehavior es Manual. MediaElement controla esta competencia por obtener el control y, para ello, evalúa las prioridades siguientes.

  1. UnloadedBehavior. Vigente cuando el elemento multimedia está descargado. Esto asegura que todos los recursos multimedia se lancen de forma predeterminada, incluso cuando MediaClock se asocia con MediaElement.

  2. MediaClock. Vigente cuando los elementos multimedia tienen Clock. Si los elementos multimedia se descargan, MediaClock se aplica siempre que UnloadedBehavior sea Manual. El modo de reloj siempre invalida el comportamiento cargado de MediaElement.

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

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

Visualización de MediaElement

Para mostrar MediaElement, debe tener contenido que representar y tendrá sus propiedades ActualWidth y ActualHeight establecidas en cero hasta que el contenido se cargue. Para contenido de solo audio, estas propiedades siempre son cero. Para contenido de vídeo, una vez el evento MediaOpened se ha formulado, ActualWidth y ActualHeight reportarán el tamaño de los elementos multimedia cargados. Esto significa que hasta que los elementos multimedia se cargan, MediaElement no ocupará espacio físico en la interfaz de usuario (UI) a no ser que las propiedades Width y Height estén establecidas.

Establecer ambas propiedades Width y Height hará que los elementos multimedia se ajusten para rellenar el área proporcionada por MediaElement. Para preservar la relación de aspecto original de los elementos multimedia, una las propiedades Width o Height debe estar establecida, pero no ambas. Establecer ambas propiedades Width y Height hará que los elementos multimedia se presenten en un tamaño de elemento fijo que puede no ser conveniente.

Para evitar tener un elemento de tamaño fijo, Windows Presentation Foundation (WPF) puede preprocesar los elementos multimedia. Esto se hace estableciendo LoadedBehavior en Play o Pause. En un estado Pause, los elementos multimedia se preprocesarán y estarán presentes en el primer fotograma. En un estado Play, los elementos multimedia se preprocesarán y comenzarán a reproducirse.

Clase MediaPlayer

Mientras que la clase MediaElement es un elemento de marco, el elemento MediaPlayer está diseñado para usarse en objetos Drawing. Se usan objetos de dibujo cuando se pueden sacrificar las características a nivel de marco para obtener mejoras de rendimiento o cuando se necesitan las características de Freezable. MediaPlayer le permite aprovechar estas características y, al mismo tiempo, proporcionar contenido multimedia en las aplicaciones. Al igual que MediaElement, MediaPlayer se puede usar en modo independiente o de reloj, pero no tiene los estados cargado y descargado del objeto MediaElement. Esto reduce la complejidad del control de reproducción de MediaPlayer.

Control de MediaPlayer

Como MediaPlayer no tiene estado, solo hay dos formas de controlar la reproducción multimedia.

  1. Métodos de control interactivos. Vigentes en el modo independiente (propiedad nullClock).

  2. MediaClock. Vigente cuando los elementos multimedia tienen Clock.

Visualización de MediaPlayer

Técnicamente, MediaPlayer no se puede mostrar porque no tiene representación física. Pero, se puede usar para presentar elementos multimedia en Drawing mediante la clase VideoDrawing. El siguiente ejemplo muestra el uso de VideoDrawing para mostrar elementos 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();

Para más información sobre objetos , consulte Información general sobre objetos DrawingDrawing.

Vea también