Áudio e vídeo

Como você aprendeu no módulo Imagens, o HTML permite a incorporação de mídia em uma página da Web. Nesta seção, analisaremos arquivos de áudio e vídeo, incluindo como incorporá-los, controles do usuário, fornecimento de um marcador de posição de imagem estática para seus vídeos e práticas recomendadas, incluindo como tornar arquivos de áudio e vídeo acessíveis.

<audio> e <video>

Os elementos <video> e <audio> podem ser usados para incorporar players de mídia diretamente com o atributo src ou como o elemento de contêiner de uma série de elementos <source>, cada um fornecendo uma sugestão de arquivo src. Embora <video> possa ser usado para incorporar um arquivo de áudio, o elemento <audio> é preferível para incorporar arquivos de som.

As tags de abertura <video> e <audio> podem conter vários outros atributos, incluindo controls, autoplay, loop, mute, preload e os atributos globais. O elemento <video> também oferece suporte aos atributos height, width e poster.

<video src="videos/machines.webm" poster="images/machine.jpg" controls>
  <p>Watch <a href="https://youtube.com/link">video on Youtube</a></p>
</video>

Este exemplo de <video> tem uma única fonte com o atributo src vinculado à origem do vídeo. O atributo poster fornece uma imagem para mostrar enquanto o vídeo é carregado. Por fim, o atributo controls fornece controles de vídeo do usuário.

O conteúdo substituto é incluído entre as tags de abertura e de fechamento. Se o user agent não for compatível com <video> (ou <audio>, esse conteúdo será exibido). A tag de fechamento </video> é necessária, mesmo que não haja conteúdo entre os dois (mas sempre deve haver conteúdo substituto , certo?).

Se nenhum atributo src estiver incluído nas tags <video> ou <audio> de abertura, inclua um ou mais elementos <source>, cada um com um atributo src em um arquivo de mídia. O exemplo a seguir inclui três opções de arquivo de mídia, conteúdo substituto e legendas em inglês e francês entre as tags de abertura e fechamento.

<video controls poster="images/machine.jpg">
  <source src="videos/machines.webm" type="video/webm">
  <source src="videos/machines.mp4" type="video/mp4">
  <source src="videos/machines.ogv" type="video/ogg">
  <track label="English" kind="subtitles" srclang="en" src="vtt/subtitles-en.vtt" default />
  <track label="Francais" kind="subtitles" srclang="fr" src="vtt/subtitles-fr.vtt" />
  <p>Watch <a href="https://youtube.com/link">video on Youtube</a></p>
</video>

Cada filho de <source> inclui um atributo src que aponta para o recurso, e o atributo type informa ao navegador o tipo de mídia do arquivo vinculado. Isso impede que o navegador busque arquivos de mídia que não conseguiria decodificar.

No atributo type, é possível incluir um parâmetro codecs, que especifica exatamente como o recurso é codificado. Os codecs oferecem uma maneira de incluir otimizações de mídia que ainda não têm suporte em todos os navegadores. O codec é separado do tipo de mídia por ponto e vírgula. Por exemplo, o codec pode ser escrito usando uma sintaxe intuitiva, como <source src="videos/machines.webm" type="video/webm;codecs=vp8,vorbis">, que indica que os arquivos WebM contêm vídeo VP8 e áudio vorbis. Os codecs também podem ser mais difíceis de decifrar, como <source src="videos/machines.mp4" type="video/mp4; codecs=avc1.4d002a">, que indica que a codificação MP4 é o nível 4.2 do perfil principal da codificação de vídeo avançada. Explicar essa sintaxe está muito além do escopo desta lição. Jake Archibald tem uma postagem que explica como determinar o parâmetro do codec para um vídeo AV1 se você quiser saber mais.

Por padrão, ao exibir um vídeo, o primeiro quadro do vídeo é mostrado como imagem estática quando fica disponível. Isso pode ser controlado. O atributo poster permite que a origem de uma imagem seja exibida enquanto o vídeo é transferido por download e até que ele seja reproduzido. Se o vídeo for reproduzido e depois for pausado, o pôster não será exibido novamente.

Defina a proporção do seu vídeo, porque, quando ele for carregado, uma diferença de tamanho entre o pôster e o vídeo causará um reflow e uma nova pintura.

Sempre inclua o atributo boolean controls. Isso torna os controles do usuário visíveis, oferecendo a capacidade de controlar os níveis de áudio, silenciar o áudio completamente e expandir o vídeo para tela cheia. A omissão de controls cria uma experiência do usuário ruim, especialmente se o atributo booleano autoplay estiver incluído. Alguns navegadores não obedecerão à diretiva do atributo autoplay se o atributo booleano muted for omitido, porque a reprodução automática de um arquivo de mídia geralmente é uma má experiência do usuário, mesmo quando silenciada e com controles visíveis.

Músicas

Entre as tags de abertura e de fechamento obrigatórias de áudio e vídeo, inclua um ou mais elementos <track> para especificar as faixas de texto com marcação de tempo. O exemplo a seguir inclui dois arquivos <track>, fornecendo legendas de texto com marcação de tempo em inglês e francês.

<track label="English" kind="subtitles" srclang="en" src="vtt/subtitles-en.vtt" default />
<track label="Français" kind="subtitles" srclang="fr" lang="fr-fr" src="vtt/subtitles-fr.vtt" />

Os arquivos de faixa, especificados no atributo src, precisam estar no formato WebVTT (.vtt). Os arquivos precisam estar no mesmo domínio que o documento HTML, a menos que o atributo crossorigin esteja incluído.

Há cinco valores enumerados para o atributo kind da faixa: subtitles, captions, descriptions, chapters e outro metadata.

Inclua subtitles com o atributo srclang para transcrição e traduções de diálogos. O valor de cada atributo label é exibido como uma opção ao usuário. O conteúdo da opção "VTT" selecionada é exibido sobre o vídeo. A aparência dos subtítulos pode ser estilizada segmentando ::cue/ ::cue().

O valor kind="caption" deve ser reservado para transcrição e traduções que incluem efeitos sonoros e outras informações de áudio relevantes. Isso não é apenas para espectadores surdos. Talvez um usuário não consiga encontrar os fones de ouvido, então ativou as legendas. Ou talvez ele não tenha entendido os últimos pontos de discussão de um podcast favorito e, assim, queira ler a transcrição para confirmar o entendimento. Ter alternativas para acessar o conteúdo de áudio e vídeo é importante e conveniente.

O kind="description" serve para descrições em texto do conteúdo visual no vídeo para usuários que não conseguem ver o vídeo, não importa se usam um sistema sem tela, como o Google Home ou a Alexa, ou são cegos.

A exibição de legendas usando o formato WebVTT (link em inglês) torna o vídeo acessível a pessoas com deficiência auditiva. Lembre-se, deficiência é um incompatibilidade entre uma pessoa e o ambiente atual. A deficiência auditiva pode ocorrer quando o usuário está em um ambiente barulhento, tem alto-falantes defeituosos ou fones de ouvido quebrados, ou porque o usuário tem perda auditiva ou é surdo. Garantir que seu conteúdo seja acessível ajuda muito mais pessoas do que você imagina, isso ajuda todos.

Considerações sobre o vídeo em segundo plano

É recomendável que sua equipe de marketing ou design inclua um vídeo de plano de fundo no site. Geralmente, isso significa que eles querem um vídeo sem som, com reprodução automática, em loop e sem controles. O HTML pode ser semelhante a este:

<video autoplay loop muted poster="images/machine.jpg" role="none">
  <source src="videos/machines.webm" type="video/webm">
  <source src="videos/machines.mp4" type="video/mp4">
  <source src="videos/machines.ogv" type="video/ogg">
</video>

Os vídeos em segundo plano não podem ser acessados. O conteúdo não deve ser transmitido por vídeos em segundo plano sem que os usuários tenham controle total da reprodução e do acesso a todas as legendas. Como esse vídeo é apenas decorativo, ele inclui o papel ARIA de none e omite qualquer conteúdo substituto. Para melhorar o desempenho dos vídeos sempre silenciados, remova a faixa de áudio das suas fontes de mídia.

Se o vídeo for reproduzido por cinco segundos ou menos, as diretrizes de acessibilidade não exigirão um mecanismo de pausa, mas qualquer item com o atributo booleano loop será repetido para sempre por padrão, excedendo esse limite de tempo de cinco segundos ou qualquer outro. Para uma boa experiência do usuário, sempre inclua um método de pausar o vídeo. Isso é feito com mais facilidade incluindo controls.

Controles de mídia personalizados

Para exibir controles personalizados de áudio ou vídeo, em vez dos controles integrados do navegador, inclua o atributo controls. Em seguida, use o JavaScript para adicionar controles de mídia personalizados e remover o atributo de controles. Por exemplo, você pode adicionar um <button> que alterna o estado de reprodução de um arquivo de áudio.

<button id="playPause" aria-controls="idOfAudio"
  data-pause-text="Pause audio"
  data-play-text="Play audio">Pause audio</button>

Esse exemplo inclui um botão com atributos dataset contendo o texto que vai ser atualizado quando o visitante alternar entre os estados de reprodução e pausa. O atributo aria-controls está incluído no id do elemento controlado pelo botão. Nesse caso, o áudio. Cada botão que controla o áudio tem um manipulador de eventos.

Para criar controles personalizados, use HTMLMediaElement.play() e HTMLMediaElement.pause(). Ao alternar o estado de reprodução, alterne também o texto do botão:

const pauseButton = document.getElementById('playPause');

pauseButton.addEventListener("click", pauseAndPlay, false);

function pauseAndPlay() {
  console.log(this);
  const media = document.getElementById(this.getAttribute('aria-controls'));

  if (media.paused) {
    media.play();
    this.innerText = this.dataset.pauseText;
  } else {
    media.pause();
    this.innerText = this.dataset.playText;
  }
}

Ao incluir o atributo controls, o usuário tem uma maneira de controlar o áudio (ou o vídeo), mesmo se o JavaScript falhar. Só remova o atributo "controls" depois que um botão substituto for instanciado

document.querySelector('[aria-controls]').removeAttribute('controls');

Sempre inclua controles externos quando os usuários não puderem acessar os controles, como no caso de vídeos em segundo plano que tenham controles ocultos pelo conteúdo do site. É importante entender os conceitos básicos dos requisitos de acessibilidade de mídia para atender a usuários com diferentes necessidades ambientais e sensoriais, incluindo os milhões de pessoas com perda auditiva e deficiência visual. Acabamos de mencionar o HTMLMediaElement, que fornece várias propriedades, métodos e eventos herdados por HTMLVideoElement e HTMLAudioElement, com HTMLMediaElement adicionando algumas propriedades, métodos e eventos próprios. Existem várias outras APIs Media, incluindo uma API TextTrack. Você pode usar as APIs Media Capture e Streams e MediaDevices para gravar áudio do microfone de um usuário ou gravar a tela de um usuário. A API Web Audio permite manipular áudio e streaming ao vivo e pré-gravados, salvar ou enviar o áudio para o elemento <audio>.

Teste seu conhecimento

Teste seus conhecimentos sobre áudio e vídeo.

Para que o elemento <track> é usado?

Para armazenar informações sobre a duração e o tamanho do arquivo do vídeo.
Tente novamente.
Para fornecer legendas.
Correto.
Para armazenar várias versões do vídeo em diferentes navegadores ou dispositivos.
Tente novamente.

O que o atributo poster controla?

Uma imagem a ser exibida se o navegador do usuário não oferecer suporte a vídeo.
Tente novamente.
Um vídeo de apresentação
Tente novamente.
Uma imagem exibida como uma imagem estática antes da reprodução do vídeo.
Correto.