Visão geral de multimídia

Os recursos multimídia do Windows Presentation Foundation (WPF) permitem que você integre áudio e vídeo em seus aplicativos para aprimorar a experiência do usuário. Este tópico apresenta os recursos multimídia do WPF.

API de mídia

As MediaElement aulas e MediaPlayer são usadas para apresentar conteúdo de áudio ou vídeo. Essas classes podem ser controladas interativamente ou por um relógio. Essas classes podem ser usadas no controle do Microsoft Windows Media Player 10 para reprodução de mídia. A classe que você usa, dependendo do cenário.

MediaElementé um UIElement que é suportado pelo layout e pode ser consumido como o conteúdo de muitos controles. Ele também pode ser usado em XAML (Extensible Application Markup Language), bem como em código. MediaPlayer, por outro lado, é projetado para objetos e não tem suporte de Drawing layout. A mídia carregada usando um só pode ser apresentada usando um ou interagindo diretamente com um MediaPlayerVideoDrawingDrawingContextarquivo . MediaPlayer não pode ser usado em XAML.

Para obter mais informações sobre objetos de desenho e contexto de desenho, consulte visão geral de objetos de desenho.

Observação

Ao distribuir mídia com seu aplicativo, você não pode usar um arquivo de mídia como um recurso do projeto. Em seu arquivo de projeto, você deve definir o tipo de mídia como Content e definir CopyToOutputDirectory como PreserveNewest ou Always.

Modos de reprodução de mídia

Observação

Ambos MediaElement e MediaPlayer têm membros semelhantes. Os links nesta seção referem-se aos membros da MediaElement classe. A menos que especificamente indicado, os membros vinculados à MediaElement classe também podem ser encontrados na MediaPlayer classe.

Para entender a reprodução de mídia no Windows Presentation Foundation (WPF), é necessário entender os diferentes modos nos quais a mídia pode ser reproduzida. Ambos MediaElement e podem ser usados em dois modos de mídia diferentes, modo independente e MediaPlayer modo de relógio. O modo de mídia é determinado pela Clock propriedade. Quando Clock é null, o objeto de mídia está no modo independente. Quando o não é nulo, o Clock objeto de mídia está no modo de relógio. Por padrão, os objetos de mídia estão no modo independente.

Modo independente

No modo independente, o conteúdo de mídia conduz a reprodução de mídia. Modo independente permite as seguintes opções:

  • As mídias podem ser especificadas Uri diretamente.

  • Reprodução de mídia pode ser controlada diretamente.

  • As propriedades e SpeedRatio mídias podem ser modificadasPosition.

A mídia é carregada definindo a MediaElement propriedade do objeto ou chamando o MediaPlayer método do SourceOpen objeto.

Para controlar a reprodução de mídia no modo independente, métodos de controle do objeto de mídia podem ser usados. Os métodos de controle disponíveis são Play, , PauseClosee Stop. Para MediaElement, o controle interativo usando esses métodos só estará disponível quando o LoadedBehavior estiver definido como Manual. Esses métodos não estão disponíveis quando o objeto de mídia está no modo relógio.

Consulte Controlar um MediaElement (executar, pausar, parar, volume e velocidade) para obter um exemplo de modo independente.

Modo relógio

No modo de relógio, um aciona a MediaTimeline reprodução de mídia. O modo relógio tem as seguintes características:

  • A mídia é definida indiretamente através de Uri um MediaTimeline.

  • Reprodução de mídia pode ser controlada pelo relógio. Métodos de controle do objeto de mídia não podem ser usados.

  • A mídia é carregada definindo a propriedade de Source um MediaTimeline objeto, criando o relógio a partir da linha do tempo e atribuindo o relógio ao objeto de mídia. A mídia também é carregada dessa maneira quando um dentro de um alvo um MediaTimelineStoryboardMediaElement.

Para controlar a reprodução de mídia no modo de relógio, os ClockController métodos de controle devem ser usados. A ClockController é obtido a ClockController partir da propriedade do MediaClock. Se você tentar usar os métodos de controle de um ou MediaPlayer objeto enquanto estiver no modo de relógio, um MediaElementInvalidOperationException será lançado.

Consulte a Visão geral da Animação para obter mais informações sobre linhas do tempo e relógios.

Consulte controlar um MediaElement usando um Storyboard para obter um exemplo de modo relógio.

Classe MediaElement

Adicionar mídia a um aplicativo é tão simples quanto adicionar um controle à interface do usuário (UI) do aplicativo e fornecer um MediaElementUri à mídia que você deseja incluir. Todos os tipos de mídia suportados pelo Microsoft Windows Media Player 10 são suportados no Windows Presentation Foundation (WPF). O exemplo a seguir mostra um uso simples do MediaElement em 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>

Neste exemplo, mídia será executada automaticamente assim que ele é carregada. Depois que a mídia tenha terminado sua execução, a mídia é fechada e todos os recursos de mídia são liberados (incluindo a memória de vídeo). Esse é o comportamento padrão do MediaElement objeto e é controlado pelas LoadedBehavior propriedades e UnloadedBehavior .

Controlar um MediaElement

As LoadedBehavior propriedades e UnloadedBehavior controlam o comportamento do MediaElement quando IsLoaded é true ou false, respectivamente. As MediaState propriedades são definidas para afetar o comportamento de reprodução de mídia. Por exemplo, o padrão é e o padrão LoadedBehaviorUnloadedBehavior é ClosePlay . Isso significa que, assim que o MediaElement for carregado e a pré-rolagem estiver completa, a mídia começará a ser reproduzida. Após a conclusão da reprodução, mídia é fechada e todos os recursos de mídia são liberados.

As LoadedBehavior propriedades e UnloadedBehavior não são a única maneira de controlar a reprodução de mídia. No modo de relógio, o relógio pode controlar o e os métodos de controle interativo têm controle quando o MediaElementLoadedBehavior é Manual. MediaElement lida com essa competição pelo controle avaliando as seguintes prioridades.

  1. UnloadedBehavior. Em vigor quando a mídia for descarregada. Isso garante que todos os recursos de mídia sejam liberados por padrão, mesmo quando um MediaClock está associado ao MediaElement.

  2. MediaClock. No lugar quando a mídia tem um Clockarquivo . Se a mídia for descarregada, o entrará em vigor enquanto o MediaClockUnloadedBehavior for Manual. O modo de relógio sempre substitui o comportamento carregado do MediaElement.

  3. LoadedBehavior. Em vigor quando a mídia for carregada.

  4. Métodos de controle interativo. No lugar quando LoadedBehavior é Manual. Os métodos de controle disponíveis são Play, , PauseClosee Stop.

Exibir um MediaElement

Para exibir um MediaElement ele deve ter conteúdo para renderizar e ele terá suas ActualWidth propriedades e ActualHeight definidas como zero até que o conteúdo seja carregado. Para conteúdo de somente áudio, essas propriedades serão sempre zero. Para conteúdo de vídeo, uma vez que o evento tenha sido gerado o MediaOpenedActualWidth e ActualHeight irá relatar o tamanho da mídia carregada. Isso significa que, até que a mídia seja carregada, o MediaElement não ocupará nenhum espaço físico na interface do usuário (UI), a menos que as Width propriedades ou Height sejam definidas.

A configuração das Width propriedades e Height fará com que a mídia se estique para preencher a área fornecida para o MediaElement. Para preservar a proporção original da mídia, a Width propriedade ou Height deve ser definida, mas não ambas. A configuração das propriedades e Height fará com que a mídia se apresente em um tamanho de elemento fixo Width que pode não ser desejável.

Para evitar ter um elemento de tamanho fixo que, Windows Presentation Foundation (WPF) pode pré-rolar a mídia. Isso é feito definindo o LoadedBehavior para ou PlayPause. Em um Pause estado, a mídia vai pré-rolar e vai apresentar o primeiro quadro. Em um Play estado, a mídia vai pré-rolar e começar a tocar.

Classe MediaPlayer

Onde como a classe é um elemento de estrutura, a MediaElementMediaPlayer classe é projetada para ser usada em Drawing objetos. Os objetos de desenho são usados quando você pode sacrificar recursos de nível de estrutura para obter benefícios de desempenho ou quando precisa de Freezable recursos. MediaPlayer permite que você aproveite esses recursos enquanto fornece conteúdo de mídia em seus aplicativos. Como MediaElement, pode ser usado no modo independente ou de relógio, MediaPlayer mas não tem os MediaElement estados descarregado e carregado do objeto. Isso reduz a complexidade do controle de reprodução do MediaPlayer.

Controlando o Media Player

Como MediaPlayer é sem monitoração de estado, há apenas duas maneiras de controlar a reprodução de mídia.

  1. Métodos de controle interativo. No lugar quando em modo independente (nullClock propriedade).

  2. MediaClock. No lugar quando a mídia tem um Clockarquivo .

Exibindo um MediaPlayer

Tecnicamente, um MediaPlayer não pode ser exibido, uma vez que não tem representação física. No entanto, ele pode ser usado para apresentar mídia em um Drawing uso da VideoDrawing classe. O exemplo a seguir demonstra o uso de um VideoDrawing para exibir 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();

Consulte a Visão geral de objetos de desenho para obter mais informações sobre Drawing objetos.

Confira também