Visão geral da multimídia
Os recursos multimídia no WPF (Windows Presentation Foundation) permitem que você integre áudio e vídeo aos 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 classes MediaElement 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 Microsoft Windows Media Player 10 para reprodução de mídia. Qual classe você usa depende do cenário.
MediaElement é um UIElement que é apoiado pelo Layout e pode ser consumido como o conteúdo de muitos controles. Ele também é utilizável na XAML (Extensible Application Markup Language), bem como no código. MediaPlayer, por outro lado, foi projetado para objetos Drawing e não tem 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.
Nota
Ao distribuir mídia com seu aplicativo, você não pode usar um arquivo de mídia como um recurso de projeto. Em seu arquivo de projeto, em vez disso, você precisa definir o tipo de mídia como Content
e definir CopyToOutputDirectory
para PreserveNewest
ou Always
.
Modos de Reprodução de Mídia
Nota
Tanto MediaElement quanto MediaPlayer têm membros semelhantes. Os links nesta seção referem-se aos membros da classe MediaElement. A menos que indicado especificamente, os membros vinculados à classe MediaElement também podem ser encontrados na classe MediaPlayer.
Para entender a reprodução de mídia no WPF (Windows Presentation Foundation), é necessário entender os diferentes modos nos quais a mídia pode ser reproduzida. Tanto MediaElement quanto MediaPlayer podem ser usados em dois modos de mídia diferentes, modo independente e modo de 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 for nulo, o objeto de mídia estará 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. O modo independente habilita as seguintes opções:
O Uri da mídia pode ser especificado diretamente.
A reprodução de mí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 controle interativo usando esses métodos só estará disponível quando o LoadedBehavior estiver definido como Manual. Esses métodos ficam indisponíveis quando o objeto de mídia está no modo de relógio.
Consulte Controlar um MediaElement (executar, pausar, parar, volume e velocidade) para obter um exemplo de modo independente.
Modo de Relógio
No modo de relógio, um MediaTimeline conduz a reprodução de mídia. O modo de relógio tem as seguintes características:
O Uri da mídia é indiretamente definido por meio 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, os métodos de controle ClockController devem ser usados. Um ClockController é obtido 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, um InvalidOperationException será gerado.
Consulte a Visão Geral da Animação para mais informações sobre relógios e linhas do tempo.
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 MediaElement à interface do usuário do aplicativo e fornecer um Uri à mídia que você deseja incluir. Todos os tipos de mídia compatíveis com o Microsoft Windows Media Player 10 têm suporte no WPF (Windows Presentation Foundation). 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, a mídia é reproduzida automaticamente assim que é 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 objeto MediaElement e é controlado pelas propriedades LoadedBehavior e UnloadedBehavior.
Controlando um MediaElement
As propriedades LoadedBehavior e UnloadedBehavior controlam o comportamento da MediaElement quando IsLoaded é true
ou false
, respectivamente. As propriedades MediaState são definidas para afetar o comportamento de reprodução de mídia. Por exemplo, o LoadedBehavior padrão é Play e o UnloadedBehavior padrão é Close. Isso significa que assim que o MediaElement é carregado e a pré-rolagem é concluída, a reprodução da mídia começa. Após a conclusão da reprodução, mídia é fechada e todos os recursos de mídia são liberados.
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 controle interativos assumem o controle quando o LoadedBehavior é Manual. MediaElement lida com essa competição pelo controle avaliando as prioridades a seguir.
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.
MediaClock. Está em vigor quando a mídia possui um Clock. Se a mídia for descarregada, o MediaClock entrará em vigor desde que o UnloadedBehavior seja Manual. O modo relógio sempre substitui o comportamento carregado do MediaElement.
LoadedBehavior. Em vigor quando a mídia é carregada.
Métodos de controle interativos. 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, depois que o evento MediaOpened tiver sido gerado, o ActualWidth e ActualHeight relatarão 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 (interface do usuário), a menos que as propriedades Width ou Height estejam definidas.
Definir as propriedades Width e Height fará com que a mídia se estenda 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 resultará em a mídia sendo apresentada em um tamanho de elemento fixo que pode não ser desejável.
Para evitar ter um elemento de tamanho fixo, o WPF (Windows Presentation Foundation) pode executar a pré-rolagem da mídia. Isso é feito definindo o LoadedBehavior como Play ou Pause. Em um estado Pause, a pré-rolagem da mídia será executada e apresentará o primeiro frame. Em um estado Play, a pré-rolagem da mídia será executada e a reprodução da mídia começará.
Classe MediaPlayer
Quando a classe MediaElement é um elemento de estrutura, a classe MediaPlayer é projetada para ser usada em objetos Drawing. Objetos de desenho são usados quando você pode sacrificar características de nível de framework para ganhar benefícios de desempenho ou quando você precisa de recursos Freezable. MediaPlayer permite que você aproveite esses recursos ao fornecer conteúdo de mídia em seus aplicativos. Assim como MediaElement, MediaPlayer pode ser usado no modo independente ou modo relógio, mas não tem os estados descarregado e carregado do objeto MediaElement. Isso reduz a complexidade do controle de reprodução do MediaPlayer.
Controlando o MediaPlayer
Como o MediaPlayer não tem monitoramento de estado, há apenas duas maneiras para controlar a reprodução de mídia.
Métodos de controle interativos. Ativado quando estiver no modo independente (propriedade
null
Clock).MediaClock. Está em vigor quando a mídia possui um Clock.
Exibindo um MediaPlayer
Tecnicamente, um MediaPlayer não pode ser exibido, pois 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();
Para obter mais informações sobre os objetos Drawing, consulte Visão geral dos objetos de desenho.
Consulte também
.NET Desktop feedback