Come usare i controlli del trasporto multimediale di sistema (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

La classe SystemMediaTransportControls consente alla tua app di usare i controlli del trasporto multimediale di sistema presenti in Windows e di aggiornare le informazioni sui contenuti multimediali visualizzate.

Per vedere questa funzionalità in azione nell'ambito di un esempio di riproduzione di elementi multimediali completa, vedi l'argomento su riproduzione di elementi multimediali dall'inizio alla fine.

Introduzione

La classe SystemMediaTransportControls introdotta in Windows 8.1 sostituisce la precedente classe MediaControl. Usa la nuova classe SystemMediaTransportControls al posto di MediaControl.

I controlli del trasporto di sistema sono diversi da quelli degli oggetti audio o video. I controlli del trasporto di sistema sono i controlli che vengono visualizzati quando si premono i tasti multimediali sull'hardware, ad esempio il controllo del volume su un paio di cuffie oppure i pulsanti multimediali delle tastiere. Se l'utente preme il tasto pausa sulla tastiera e l'app supporta SystemMediaTransportControls, all'app verrà inviata una notifica e tu potrai agire di conseguenza.

L'app può inoltre aggiornare le informazioni sul contenuto multimediale, ad esempio il titolo di un brano musicale oppure un'immagine di anteprima visualizzata da SystemMediaTransportControls.

Configurare i controlli del trasporto

Per ottenere un'istanza della classe SystemMediaTransportControls, chiama getForCurrentView.

Per abilitare i pulsanti che verranno gestiti dall'app, imposta la proprietà di abilitazione corrispondente nell'oggetto, ad esempio isPlayEnabled, isPauseEnabled, isNextEnabled e isPreviousEnabled sull'oggetto SystemMediaTransportControls. Per un elenco completo, vedi la documentazione di riferimento su SystemMediaTransportControls.

Ecco un esempio di codice che crea un oggetto video con il gestore per gli eventi paused, playing ed ended e imposta SystemMediaTransportControls. Abilita i pulsanti di riproduzione e pausa e aggiunge un gestore per l'evento buttonpressed. I gestori di eventi per paused, playing ed ended sono indicati più avanti in questo esempio.

<video id="mediaVideo" 
       controls 
       src="https://www.contoso.com/clip.mp4"
       onpause="mediaPaused(event)"
       onplaying="mediaPlaying(event)"
       onended="mediaEnded(event)" />
var systemMediaControls;

systemMediaControls = Windows.Media.SystemMediaTransportControls.getForCurrentView();

systemMediaControls.addEventListener("buttonpressed", systemMediaControlsButtonPressed, false);

systemMediaControls.isPlayEnabled = true;
systemMediaControls.isPauseEnabled = true;
systemMediaControls.isStopEnabled = true;

systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.closed;

Comunicare con i controlli del trasporto

Per l'uso dei controlli del trasporto occorre tenere presenti tre aspetti relativi alla comunicazione:

La classe SystemMediaTransportControls invia notifiche all'app tramite l'evento buttonpressed quando viene premuto uno dei pulsanti abilitati. L'app può quindi controllare i contenuti multimediali, ad esempio avviarne o sospenderne la riproduzione, a seconda del pulsante premuto.

L'app invia notifiche alla classe SystemMediaTransportControls tramite la proprietà SystemMediaTransportControls.playbackStatus, quando cambia lo stato del contenuto multimediale. In questo modo i controlli del trasporto aggiornano gli stati dei pulsanti affinché corrispondano allo stato dell'origine multimediale.

Puoi aggiornare le informazioni sul contenuto multimediale visualizzate dai controlli del trasporto, ad esempio il titolo di un brano musicale o la copertina dell'album, con SystemMediaTransportControlsDisplayUpdater.

Gestire la pressione dei pulsanti

L'evento buttonpressed viene generato dai controlli del trasporto di sistema quando viene premuto uno dei pulsanti abilitati. Gli argomenti dell'evento della proprietà button specificano il pulsante premuto.

Ecco un esempio di codice che crea un gestore di eventi buttonpressed e i metodi helper per riprodurre e mettere in pausa l'oggetto video.

// Event handler for SystemMediaTransportControls' buttonpressed event
function systemMediaControlsButtonPressed(eventIn) {

    var mediaButton = Windows.Media.SystemMediaTransportControlsButton;

    switch (eventIn.button) {
        case mediaButton.play:
            playMedia();
            break;

        case mediaButton.pause:
            pauseMedia();
            break;

        case mediaButton.stop:
            stopMedia();
            break;

        // Insert additional case statements for other buttons you want to handle
    }
}

// Plays the media.
function playMedia() {
    var media = document.getElementById("mediaVideo");
    media.play();
}

// Pauses the media.
function pauseMedia() {
    var media = document.getElementById("mediaVideo");
    media.pause();
}

// Stops the media.
function stopMedia() {
    var media = document.getElementById("mediaVideo");
    media.pause();
    media.currentTime = 0;
}

Aggiornare lo stato del contenuto multimediale

Per notificare a SystemMediaTransportControls che lo stato del contenuto multimediale è cambiato, imposta la proprietà playbackStatus sul valore MediaPlaybackStatus appropriato.

Ecco un esempio di codice che gestisce gli eventi multimediali e aggiorna la proprietà playbackStatus di SystemMediaTransportControls.

// The media Play event handler.
function mediaPlaying() {
    // Update the SystemMediaTransportControl state.
    systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.playing;
}

// The media Pause event handler.
function mediaPaused() {
    // Update the SystemMediaTransportControl state.
    systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.paused;
}

// The media Ended event handler.
function mediaEnded() {
    // Update the SystemMediaTransportControl state.
    systemMediaControls.playbackStatus = Windows.Media.MediaPlaybackStatus.stopped;
}

Aggiornare le informazioni e l'immagine di anteprima del contenuto multimediale

Usa SystemMediaTransportControlsDisplayUpdater per aggiornare le informazioni sul contenuto multimediale visualizzate dai controlli del trasporto, ad esempio il titolo di un brano musicale o la copertina dell'album.

La proprietà displayUpdater è la classe SystemMediaTransportControlsDisplayUpdater associata alla classe SystemMediaTransportControls.

Puoi aggiornare i metadati manualmente impostando le proprietà del contenuto multimediale in musicProperties, imageProperties o videoProperties. Tuttavia è preferibile, e anche più facile, passare il file multimediale al metodo copyFromFileAsync che estrae automaticamente metadati e immagine di anteprima dal file.

Dopo avere impostato tutte le informazioni sul contenuto multimediale da visualizzare, chiama update. L'interfaccia utente non si aggiorna finché non viene chiamato il metodo update.

Windows.Storage.StorageFile e Windows.Storage.Streams.RandomAccessStreamReference offrono utili metodi statici per l'uso delle informazioni sui contenuti multimediali.

StorageFile

RandomAccessStreamReference

Windows: audio in background

Per riprodurre audio in background in Windows, nell'app devono essere abilitati i pulsanti di avvio e pausa della riproduzione impostando isPlayEnabled e isPauseEnabled su true. L'app deve inoltre gestire l'evento buttonpressed. Per informazioni su tutti i requisiti per la riproduzione di audio in background in Windows, vedi Come riprodurre audio in background.