Partilhar via


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 melhorar a experiência do usuário. Este tópico apresenta os recursos multimídia do WPF.

API de mídia

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

MediaElement é um UIElement que é suportado pelo Layout e pode ser consumido como o conteúdo de muitos controlos. Ele também é utilizável em Extensible Application Markup Language (XAML), bem como código. MediaPlayer, por outro lado, é projetado para objetos Drawing e carece de suporte de layout. A mídia carregada usando um MediaPlayer só pode ser apresentada usando um VideoDrawing ou interagindo diretamente com um DrawingContext. 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 de projeto. No arquivo de projeto, você deve, em vez disso, definir o tipo de mídia como Content e definir CopyToOutputDirectory como PreserveNewest ou Always.

Modos de reprodução de multimédia

Observação

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

Para compreender a reprodução de multimédia no Windows Presentation Foundation (WPF), é necessário compreender os diferentes modos em que os conteúdos multimédia podem ser reproduzidos. Tanto MediaElement quanto MediaPlayer podem ser usados em dois modos de mídia diferentes, modo independente e modo relógio. O modo de mídia é determinado pela propriedade Clock. Quando Clock é null, o objeto de mídia está no modo independente. Quando o Clock não é nulo, o 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 impulsiona a reprodução de mídia. O modo independente permite as seguintes opções:

  • O Uri dos media pode ser especificado diretamente.

  • A reprodução de multimédia pode ser controlada diretamente.

  • As propriedades Position e SpeedRatio da mídia podem ser modificadas.

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

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

Consulte Controlo de um MediaElement (Reproduzir, Pausar, Parar, Volume e Velocidade) para um exemplo de modo independente.

Modo Relógio

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

  • O Uri do media é definido indiretamente através de um MediaTimeline.

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

  • A mídia é carregada definindo a propriedade Source de um objeto MediaTimeline, 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 forma quando um MediaTimeline dentro de um Storyboard tem como alvo um MediaElement.

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

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

Consulte Controle um MediaElement usando um Storyboard como exemplo do modo de relógio.

MediaElement Classe

Adicionar mídia a um aplicativo é tão simples quanto adicionar um controle de MediaElement à interface do usuário (UI) do aplicativo e fornecer um Uri à 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 Extensible Application Markup Language (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>

Neste exemplo, a mídia é reproduzida automaticamente assim que é carregada. Uma vez que a mídia tenha terminado de reproduzir, 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 objeto MediaElement e é controlado pelas propriedades LoadedBehavior e UnloadedBehavior.

Controlando um MediaElement

As propriedades LoadedBehavior e UnloadedBehavior controlam o comportamento do MediaElement quando IsLoaded é true ou false, respectivamente. As propriedades do MediaState são definidas para afetar o comportamento de reprodução de mídia. Por exemplo, a LoadedBehavior padrão é Play e a UnloadedBehavior padrão é Close. Isso significa que, assim que o MediaElement é carregado e o preroll é concluído, a mídia começa a ser reproduzida. Quando a reprodução estiver concluída, o conteúdo multimédia será fechado e todos os recursos de multimédia serão libertados.

As propriedades LoadedBehavior 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 MediaElement e os métodos de controlo interativo têm controlo quando o LoadedBehavior é Manual. MediaElement lida com esta competição pelo controlo, avaliando as seguintes prioridades.

  1. UnloadedBehavior. No local quando a mídia é 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. Está em vigor quando o suporte tiver um Clock. Se a mídia for descarregada, o MediaClock entrará em vigor enquanto o UnloadedBehavior estiver Manual. O modo de relógio sempre substitui o comportamento carregado do MediaElement.

  3. LoadedBehavior. No local apropriado quando a multimédia é carregada.

  4. Métodos de controlo interativos. Está em vigor quando LoadedBehavior é Manual. Os métodos de controle disponíveis são Play, Pause, Closee Stop.

Exibindo um MediaElement

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

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

Para evitar ter um elemento de tamanho fixo, o que o Windows Presentation Foundation (WPF) pode fazer é pré-carregar a mídia. Isso é feito definindo o LoadedBehavior como Play ou Pause. Em um estado Pause, os meios farão a prerolagem e apresentarão o primeiro quadro. Num estado Play, o conteúdo será pré-carregado e irá começar a tocar.

MediaPlayer Classe

Onde como a classe MediaElement é um elemento de estrutura, a classe MediaPlayer é 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 recursos Freezable. MediaPlayer permite que você aproveite esses recursos enquanto fornece conteúdo de mídia em seus aplicativos. Tal como o MediaElement, o MediaPlayer pode ser utilizado em modo independente ou no modo de relógio, mas não possui os estados descarregado e carregado do objeto MediaElement. Isso reduz a complexidade do controle de reprodução do MediaPlayer.

Controlando o MediaPlayer

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

  1. Métodos de controlo interativos. No local quando estiver em modo independente (propriedadenullClock).

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

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 usando a classe VideoDrawing. 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.

Ver também