Compartilhar via


Como usar os controles de transporte de mídia do sistema (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente ]

A classe SystemMediaTransportControls possibilita que seu aplicativo use os controles de transporte de mídia do sistema fornecidos pelo Windows e atualize as informações de mídia que são exibidas.

Para ver esse recurso em ação como parte de um exemplo completo de reprodução de mídia, veja Reprodução de mídia, do início ao fim.

Introdução

A classe SystemMediaTransportControls introduzida no Windows 8.1 substitui a classe MediaControl antiga. Você deve usar a nova SystemMediaTransportControls no lugar de MediaControl.

Os controles de transporte do sistema são diferentes dos controles de transporte no objeto audio ou video. Esses controles de transporte aparecem quando você pressiona teclas de mídia no hardware, como o controle de volume nos fones de ouvido ou os botões de mídia nos teclados. Se o usuário pressionar a tecla de pausa em um teclado e seu aplicativo der suporte a SystemMediaTransportControls, seu aplicativo será notificado e você poderá tomar a medida apropriada.

Seu aplicativo também pode atualizar as informações de mídia, como o título da música e a imagem em miniatura mostrada pelos SystemMediaTransportControls.

Configurar os controles de transporte

Para obter uma instância dos SystemMediaTransportControls, chame getForCurrentView.

Para ativar os botões que seu aplicativo vai manipular, defina a propriedade "is enabled" correspondente como isPlayEnabled, isPauseEnabled, isNextEnabled e isPreviousEnabled, no objeto SystemMediaTransportControls. Veja uma lista completa na documentação de referência do SystemMediaTransportControls.

Este é o código que cria um objeto video com um manipulador de eventos para eventos paused, playing e ended e configura o SystemMediaTransportControls. Ele ativa os botões de reprodução e pausa, e adiciona um manipulador de eventos para o evento buttonpressed. Os manipuladores de eventos para paused, playing e ended são mostrados mais à frente neste exemplo.

<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;

Comunicar-se com controles de transporte

Há três aspectos de comunicação ao usar os controles de transporte:

Os SystemMediaTransportControls notificam seu aplicativo por meio do evento buttonpressed quando um dos botões ativados é pressionado. Assim, seu aplicativo pode controlar a mídia, por exemplo, pausando ou reproduzindo, em resposta ao botão pressionado.

Seu aplicativo notifica os SystemMediaTransportControls, por meio da propriedade SystemMediaTransportControls.playbackStatus, quando o estado da mídia muda. Assim, os controles de transporte podem atualizar os estados dos botões para que correspondam ao estado da origem da mídia.

Você pode atualizar as informações da mídia mostradas pelos controles de transporte, como o título da música ou a capa do álbum, com o SystemMediaTransportControlsDisplayUpdater.

Pressionamentos do botão do manipulador

O evento buttonpressed é acionado pelos controles de transporte do sistema quando um dos botões ativados é pressionado. Os argumentos de evento da propriedade button especificam qual botão foi pressionado.

Este código cria um manipulador de eventos buttonpressed e métodos auxiliares para reproduzir e pausar o 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;
}

Atualizar o status da mídia

Para notificar os SystemMediaTransportControls que o estado da mídia mudou, defina playbackStatus com o valor de MediaPlaybackStatus apropriado.

Este é o código que manipula os eventos de mídia e atualiza a propriedade playbackStatus de 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;
}

Atualizar informações e miniatura da mídia

Use a classe SystemMediaTransportControlsDisplayUpdater para atualizar as informações da mídia mostradas pelos controles de transporte, como o título da música ou a capa do álbum.

A propriedade displayUpdater é o SystemMediaTransportControlsDisplayUpdater associado aos SystemMediaTransportControls.

Você pode atualizar os metadados manualmente definindo as propriedades de mídia em musicProperties imageProperties ou videoProperties. Mas é recomendável e muito mais fácil transmitir o arquivo de mídia para o método copyFromFileAsync que extrai automaticamente os metadados e a imagem de miniatura do arquivo.

Depois de definir todas as informações de mídia para exibição, chame update. A interface do usuário é atualizada somente depois de chamar update.

Windows.Storage.StorageFile e Windows.Storage.Streams.RandomAccessStreamReference fornecem métodos estáticos úteis para trabalhar com informações de mídia.

StorageFile

RandomAccessStreamReference

Windows: áudio em segundo plano

Para reproduzir áudio em segundo plano no Windows, o aplicativo deve ativar os botões de reprodução e pausa definindo isPlayEnabled e isPauseEnabled como true. O aplicativo também deve manipular o evento buttonpressed. Para saber todos os requisitos para reproduzir áudio em segundo plano no Windows, veja Como reproduzir áudio em segundo plano.