WebRTC - APIs MediaStream

A API MediaStream foi projetada para acessar facilmente os fluxos de mídia de câmeras e microfones locais. O método getUserMedia () é a principal forma de acessar dispositivos de entrada locais.

A API tem alguns pontos-chave -

  • Um fluxo de mídia em tempo real é representado por um objeto de fluxo na forma de vídeo ou áudio

  • Ele fornece um nível de segurança por meio de permissões de usuário, perguntando ao usuário antes que um aplicativo da web possa começar a buscar um fluxo

  • A seleção de dispositivos de entrada é feita pela API MediaStream (por exemplo, quando há duas câmeras ou microfones conectados ao dispositivo)

Cada objeto MediaStream inclui vários objetos MediaStreamTrack. Eles representam vídeo e áudio de diferentes dispositivos de entrada.

Cada objeto MediaStreamTrack pode incluir vários canais (canais de áudio direito e esquerdo). Essas são as menores partes definidas pela API MediaStream.

Existem duas maneiras de gerar objetos MediaStream. Primeiro, podemos renderizar a saída em um elemento de vídeo ou áudio. Em segundo lugar, podemos enviar a saída para o objeto RTCPeerConnection, que então a envia para um par remoto.

Usando a API MediaStream

Vamos criar um aplicativo WebRTC simples. Ele mostrará um elemento de vídeo na tela, pedirá permissão ao usuário para usar a câmera e mostrará uma transmissão de vídeo ao vivo no navegador. Crie um arquivo index.html -

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8" /> 
   </head> 
	
   <body> 
      <video autoplay></video> 
      <script src = "client.js"></script> 
   </body>
	
</html>

Em seguida, crie o arquivo client.js e adicione o seguinte;

function hasUserMedia() { 
   //check if the browser supports the WebRTC 
   return !!(navigator.getUserMedia || navigator.webkitGetUserMedia || 
      navigator.mozGetUserMedia); 
} 

if (hasUserMedia()) { 
   navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia
      || navigator.mozGetUserMedia; 
		
   //enabling video and audio channels 
   navigator.getUserMedia({ video: true, audio: true }, function (stream) { 
      var video = document.querySelector('video'); 
		
      //inserting our stream to the video tag     
      video.src = window.URL.createObjectURL(stream); 
   }, function (err) {}); 
} else { 
   alert("WebRTC is not supported"); 
}

Aqui criamos a função hasUserMedia () que verifica se WebRTC é compatível ou não. Em seguida, acessamos a função getUserMedia onde o segundo parâmetro é um retorno de chamada que aceita o fluxo proveniente do dispositivo do usuário. Em seguida, carregamos nosso stream no elemento de vídeo usando window.URL.createObjectURL, que cria uma URL que representa o objeto fornecido no parâmetro.

Agora atualize sua página, clique em Permitir e você verá seu rosto na tela.

Lembre-se de executar todos os seus scripts usando o servidor web. Já instalamos um no Tutorial do Ambiente WebRTC.

API MediaStream

Propriedades

  • MediaStream.active (read only) - Retorna verdadeiro se o MediaStream estiver ativo ou falso caso contrário.

  • MediaStream.ended (read only, deprecated)- Retorna verdadeiro se o evento finalizado foi disparado no objeto, significando que o fluxo foi completamente lido, ou falso se o final do fluxo não foi alcançado.

  • MediaStream.id (read only) - Um identificador exclusivo para o objeto.

  • MediaStream.label (read only, deprecated) - Um identificador exclusivo atribuído pelo agente do usuário.

Você pode ver a aparência das propriedades acima em meu navegador -

Manipuladores de eventos

  • MediaStream.onactive- Um manipulador para um evento ativo que é disparado quando um objeto MediaStream se torna ativo.

  • MediaStream.onaddtrack- Um manipulador para um evento addtrack que é disparado quando um novo objeto MediaStreamTrack é adicionado.

  • MediaStream.onended (deprecated)- Um manipulador para um evento encerrado que é disparado quando o streaming está encerrando.

  • MediaStream.oninactive- Um manipulador para um evento inativo que é disparado quando um objeto MediaStream se torna inativo.

  • MediaStream.onremovetrack- Um manipulador para um evento removetrack que é disparado quando um objeto MediaStreamTrack é removido dele.

Métodos

  • MediaStream.addTrack()- Adiciona o objeto MediaStreamTrack fornecido como argumento para o MediaStream. Se a faixa já foi adicionada, nada acontece.

  • MediaStream.clone() - Retorna um clone do objeto MediaStream com um novo ID.

  • MediaStream.getAudioTracks()- Retorna uma lista dos objetos de áudio MediaStreamTrack do objeto MediaStream .

  • MediaStream.getTrackById()- Retorna a faixa por ID. Se o argumento estiver vazio ou o ID não for encontrado, ele retornará nulo. Se várias faixas tiverem o mesmo ID, ele retornará a primeira.

  • MediaStream.getTracks()- Retorna uma lista de todos MediaStreamTrack objetos do MediaStream objeto.

  • MediaStream.getVideoTracks()- Retorna uma lista dos objetos de vídeo MediaStreamTrack do objeto MediaStream .

  • MediaStream.removeTrack()- Remove o objeto MediaStreamTrack fornecido como argumento do MediaStream. Se a faixa já foi removida, nada acontece.

Para testar as APIs acima, altere o index.html da seguinte maneira -

<!DOCTYPE html> 
<html lang = "en">
 
   <head> 
      <meta charset = "utf-8" /> 
   </head>
	
   <body> 
      <video autoplay></video> 
      <div><button id = "btnGetAudioTracks">getAudioTracks()
         </button></div> 
      <div><button id = "btnGetTrackById">getTrackById()
         </button></div> 
      <div><button id = "btnGetTracks">getTracks()</button></div> 
      <div><button id = "btnGetVideoTracks">getVideoTracks()
         </button></div> 
      <div><button id = "btnRemoveAudioTrack">removeTrack() - audio
         </button></div> 
      <div><button id = "btnRemoveVideoTrack">removeTrack() - video
         </button></div> 
      <script src = "client.js"></script> 
   </body> 
	
</html>

Adicionamos alguns botões para experimentar várias APIs do MediaStream. Em seguida, devemos adicionar manipuladores de eventos para nosso botão recém-criado. Modifique o arquivo client.js desta forma -

var stream;
  
function hasUserMedia() { 
   //check if the browser supports the WebRTC 
   return !!(navigator.getUserMedia || navigator.webkitGetUserMedia || 
      navigator.mozGetUserMedia); 
} 
 
if (hasUserMedia()) {
   navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia
      || navigator.mozGetUserMedia; 
		
   //enabling video and audio channels 
   navigator.getUserMedia({ video: true, audio: true }, function (s) { 
      stream = s; 
      var video = document.querySelector('video'); 
		
      //inserting our stream to the video tag     
      video.src = window.URL.createObjectURL(stream); 
   }, function (err) {}); 
	
} else { 
   alert("WebRTC is not supported"); 
}
  
btnGetAudioTracks.addEventListener("click", function(){ 
   console.log("getAudioTracks"); 
   console.log(stream.getAudioTracks()); 
});
  
btnGetTrackById.addEventListener("click", function(){ 
   console.log("getTrackById"); 
   console.log(stream.getTrackById(stream.getAudioTracks()[0].id)); 
});
  
btnGetTracks.addEventListener("click", function(){ 
   console.log("getTracks()"); 
   console.log(stream.getTracks()); 
});
 
btnGetVideoTracks.addEventListener("click", function(){ 
   console.log("getVideoTracks()"); 
   console.log(stream.getVideoTracks()); 
});

btnRemoveAudioTrack.addEventListener("click", function(){ 
   console.log("removeAudioTrack()"); 
   stream.removeTrack(stream.getAudioTracks()[0]); 
});
  
btnRemoveVideoTrack.addEventListener("click", function(){ 
   console.log("removeVideoTrack()"); 
   stream.removeTrack(stream.getVideoTracks()[0]); 
});

Agora atualize sua página. Clique no botão getAudioTracks () e, em seguida, clique no botão removeTrack () - áudio . A trilha de áudio agora deve ser removida. Em seguida, faça o mesmo para a trilha de vídeo.

Se você clicar no botão getTracks () , deverá ver todos os MediaStreamTracks (todas as entradas de vídeo e áudio conectadas). Em seguida, clique em getTrackById () para obter o áudio MediaStreamTrack.

Resumo

Neste capítulo, criamos um aplicativo WebRTC simples usando a API MediaStream. Agora você deve ter uma visão geral clara das várias APIs do MediaStream que fazem o WebRTC funcionar.