Condividi tramite


Panoramica delle funzionalità multimediali

Aggiornamento: novembre 2007

In questo argomento vengono descritte le funzionalità di Windows Presentation Foundation (WPF), che consentono di integrare audio e video nelle applicazioni, in modo da migliorare l'esperienza utente.

Nel presente argomento sono contenute le seguenti sezioni.

  • API multimediali
  • Modalità di riproduzione di contenuti multimediali
  • Classe MediaElement
  • Classe MediaPlayer
  • Argomenti correlati

API multimediali

MediaElement e MediaPlayer sono entrambe utilizzate per presentare audio, video e video con contenuto audio e possono essere controllate in modo interattivo oppure attivate da un orologio. Entrambi i tipi possono basarsi su un numero minimo di controlli OCX di Microsoft Windows Media Player 10 per la riproduzione di contenuti multimediali. Tuttavia, l'utilizzo di queste API è destinato a scenari diversi.

MediaElement è una classe UIElement supportata dal Sistema di layout e può essere utilizzata in un gran numero di controlli, in Extensible Application Markup Language (XAML) nonché nel codice. D'altra parte, la classe MediaPlayer è progettata per gli oggetti Drawing e non dispone del supporto layout. I contenuti multimediali caricati mediante MediaPlayer possono essere presentati unicamente utilizzando una classe VideoDrawing o tramite l'interazione diretta con una classe DrawingContext. La classe MediaPlayer non può essere utilizzata in XAML.

Per ulteriori informazioni sugli oggetti Drawing e sul contesto Drawing, vedere Cenni preliminari sugli oggetti Drawing.

Nota

quando si distribuiscono contenuti multimediali con l'applicazione, non è possibile utilizzare un file multimediale come risorsa di progetto. Invece, è necessario impostare il tipo di contenuti multimediali su Content nel file del progetto e CopyToOutputDirectory su PreserveNewest o su Always.

Modalità di riproduzione di contenuti multimediali

Nota

MediaElement e MediaPlayer dispongono di membri simili. I collegamenti di questa sezione si riferiscono ai membri della classe MediaElement. A meno che non sia indicato in modo specifico, i membri collegati nella classe MediaElement sono reperibili anche nella classe MediaPlayer.

Per comprendere la riproduzione di contenuti multimediali in Windows Presentation Foundation (WPF), è necessario conoscere le diverse modalità che è possibile utilizzare per riprodurre questo tipo di contenuti. MediaElement e MediaPlayer possono essere utilizzate entrambe in due modalità multimediali diverse, vale a dire la modalità indipendente e la modalità orologio. La modalità multimediale è determinata dalla proprietà Clock. Se la proprietà Clock è null, l'oggetto multimediale si trova nella modalità indipendente. Se, invece, il valore della proprietà Clock è diverso da null, l'oggetto multimediale si trova nella modalità orologio. Per impostazione predefinita, gli oggetti multimediali si trovano nella modalità indipendente.

Modalità indipendente

In modalità indipendente, la riproduzione dei contenuti multimediali dipende dai contenuti stessi. Questa modalità consente le possibilità indicate di seguito:

  • È possibile specificare direttamente l'Uri dei contenuti multimediali.

  • È possibile controllare direttamente la riproduzione dei contenuti multimediali.

  • È possibile modificare le proprietà Position e SpeedRatio dei contenuti multimediali.

I contenuti multimediali vengono caricati impostando la proprietà Source dell'oggetto MediaElement oppure chiamando il metodo Opendell'oggetto MediaPlayer.

Per controllare la riproduzione di contenuti multimediali in modalità indipendente, è possibile utilizzare i metodi di controllo dell'oggetto multimediale. I metodi di controllo disponibili sono Play, Pause, Close e Stop. Per MediaElement, il controllo interattivo mediante questi metodi è disponibile solo quando la proprietà LoadedBehavior è impostata su Manual. Questi metodi non sono disponibili quando l'oggetto multimediale è in modalità orologio.

Per un esempio della modalità indipendente, vedere Procedura: controllare un oggetto MediaElement (Play, Pause, Stop, Volume e Speed).

Modalità orologio

In modalità orologio, la riproduzione di contenuti multimediali dipende da una classe MediaTimeline. La modalità orologio presenta le seguenti caratteristiche:

  • L'Uri dei contenuti multimediali è impostato in modo indiretto tramite una classe MediaTimeline.

  • La riproduzione dei contenuti multimediali può essere controllata mediante l'orologio. Non è possibile utilizzare i metodi di controllo dell'oggetto multimediale.

  • I contenuti multimediali vengono caricati impostando la proprietà Source di un oggetto MediaTimeline, creando l'orologio dalla sequenza temporale e assegnandolo all'oggetto multimediale. I contenuti multimediali vengono inoltre caricati in questo modo quando una classe MediaTimeline all'interno di un oggetto Storyboard ha come destinazione MediaElement.

Per controllare la riproduzione di contenuti multimediali in modalità orologio, è necessario utilizzare i metodi di controllo della classe ClockController. Un oggetto ClockController si ottiene dalla proprietà ClockController della classe MediaClock. Se si tenta di utilizzare i metodi di controllo di un oggetto MediaElement o MediaPlayer in modalità orologio, verrà generata un'eccezione InvalidOperationException.

Per ulteriori informazioni sugli orologi e sulle sequenze temporali, vedere la sezione Cenni preliminari sull'animazione.

Per un esempio della modalità orologio, vedere Procedura: controllare un MediaElement utilizzando uno storyboard.

Classe MediaElement

Per aggiungere contenuti multimediali a un'applicazione è sufficiente aggiungere un controllo MediaElement all'interfaccia utente dell'applicazione e fornire un Uri ai contenuti multimediali che si desidera includere. Tutti i tipi di contenuti multimediali supportati da Microsoft Windows Media Player 10 sono supportati anche in Windows Presentation Foundation (WPF). Nell'esempio riportato di seguito viene illustrato un utilizzo semplificato di MediaElement in 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>
<!-- 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>

Nell'esempio, i contenuti multimediali vengono riprodotti automaticamente appena vengono caricati. Al termine della riproduzione, i contenuti multimediali vengono chiusi e tutte le risorse multimediali rilasciate (inclusa la memoria video). Quello appena descritto è il comportamento predefinito dell'oggetto MediaElement ed è controllato dalle proprietà LoadedBehavior e UnloadedBehavior.

Controllo di un oggetto MediaElement

Le proprietà LoadedBehavior e UnloadedBehavior consentono di controllare il comportamento dell'oggetto MediaElement rispettivamente quando la proprietà IsLoaded è true oppure false. Le proprietà di MediaState vengono impostate per influire sul comportamento della riproduzione dei contenuti multimediali. Ad esempio, il valore predefinito della proprietà LoadedBehavior è Play, mentre il valore predefinito della proprietà UnloadedBehavior è Close. Ciò significa che non appena l'oggetto MediaElement viene caricato e il preroll è completo, la riproduzione dei contenuti multimediali ha inizio. Al termine della riproduzione, i contenuti multimediali vengono chiusi e tutte le risorse multimediali rilasciate.

Le proprietà LoadedBehavior e UnloadedBehavior non rappresentano l'unico modo per controllare la riproduzione dei contenuti multimediali. In modalità orologio, l'oggetto MediaElement può essere controllato dall'orologio oppure dai metodi di controllo interattivi, se la proprietà LoadedBehavior è impostata su Manual. La scelta tra i due metodi viene gestita dall'oggetto MediaElement mediante la valutazione delle seguenti proprietà.

  1. UnloadedBehavior. Disponibile quando vengono scaricati i contenuti multimediali. In tal modo viene garantito che tutte le risorse multimediali siano rilasciate per impostazione predefinita, anche quando un oggetto MediaClock è associato all'oggetto MediaElement.

  2. MediaClock. Disponibile quando i contenuti multimediali dispongono di un oggetto Clock. Se i contenuti multimediali vengono scaricati, la proprietà MediaClock ha effetto solo se la proprietà UnloadedBehavior è impostata su Manual. La modalità orologio esegue sempre l'override del comportamento caricato dell'oggetto MediaElement.

  3. LoadedBehavior. Disponibile quando vengono caricati i contenuti multimediali.

  4. Metodi di controllo interattivi. Disponibili quando la proprietà LoadedBehavior è impostata su Manual. I metodi di controllo disponibili sono Play, Pause, Close e Stop.

Visualizzazione di un oggetto MediaElement

Per visualizzare un oggetto MediaElement, è necessario disporre di contenuti di cui eseguire il rendering, le cui proprietà ActualWidth e ActualHeight siano impostate su zero fino a quando i contenuti non vengono caricati. Per contenuti esclusivamente audio, il valore di queste proprietà è sempre zero. Per contenuti video, una volta generato l'evento MediaOpened, le proprietà ActualWidth e ActualHeight segnaleranno la dimensione dei contenuti multimediali caricati. Pertanto, fino a quando i contenuti multimediali non vengono caricati, l'oggetto MediaElement non occuperà alcuno spazio fisico nell'interfaccia utente, a meno che non venga impostata la proprietà Width o Height.

Se le proprietà Width e Height vengono impostate, i contenuti multimediali occuperanno l'area destinata all'oggetto MediaElement. Per conservare le proporzioni originali dei contenuti multimediali, è necessario impostare solo una tra le proprietà Width e Height. Se si impostano entrambe le proprietà Width e Height, il contenuto multimediale verrà presentato con una dimensione fissa, un comportamento che potrebbe non essere appropriato.

Per evitare questa situazione, Windows Presentation Foundation (WPF) può effettuare il preroll del contenuto multimediale. Questa operazione viene eseguita impostando la proprietà LoadedBehavior su Play oppure su Pause. In uno stato Pause verrà effettuato il preroll del contenuto multimediale e verrà presentato il primo fotogramma. In uno stato Play verrà effettuato il preroll del contenuto multimediale e verrà avviata la riproduzione.

Classe MediaPlayer

Mentre la classe MediaElement è un elemento framework, la classe MediaPlayer è progettata per essere utilizzata negli oggetti Drawing. Gli oggetti Drawing vengono utilizzati quando è possibile sacrificare le funzionalità a livello framework per migliorare le prestazioni oppure se occorrono funzionalità Freezable. MediaPlayer consente di avvalersi di queste funzionalità e di fornire contenuti multimediali alle applicazioni. Come MediaElement, MediaPlayer può essere utilizzata in modalità indipendente oppure orologio, ma non dispone degli stati caricato e scaricato dell'oggetto MediaElement. In tal modo la complessità del controllo della riproduzione di MediaPlayer viene ridotta.

Controllo di un oggetto MediaPlayer

Dal momento che MediaPlayer non dispone di stati, esistono solo due modi per controllare la riproduzione dei contenuti multimediali.

  1. Metodi di controllo interattivi. Disponibili nella modalità indipendente (proprietà nullClock).

  2. MediaClock. Disponibile quando i contenuti multimediali dispongono di un oggetto Clock.

Visualizzazione di un oggetto MediaPlayer

Da un punto di vista tecnico, è impossibile visualizzare un oggetto MediaPlayer, in quanto non dispone di una rappresentazione fisica. Tuttavia, tale oggetto può essere utilizzato per presentare contenuti multimediali in un oggetto Drawing mediante la classe VideoDrawing. Nell'esempio riportato di seguito viene illustrato l'utilizzo di una classe VideoDrawing per la visualizzazione di contenuti multimediali.

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

Per ulteriori informazioni sugli oggetti Drawing, vedere Cenni preliminari sugli oggetti Drawing.

Vedere anche

Attività

Demo di testo su video

Demo di un puzzle a scorrimento

Concetti

Sistema di layout

Riferimenti

DrawingGroup