Enviar um servidor MediaStream para hospedar com o WebRTC depois de ser capturado pelo getUserMedia

Estou captando dados de áudio usando {[[1]} e quero enviá-lo para o meu servidor para que eu possa salvá-lo como uma bolha em um campo MySQL.

Isto é tudo o que estou a tentar fazer. Eu fiz várias tentativas para fazer isso usando WebRTC, mas eu nem sei neste momento se isso é certo ou mesmo a melhor maneira de fazer isso.

Alguém me pode ajudar?

Aqui está o código que estou a usar para capturar o áudio do microfone.
navigator.getUserMedia({
    video:false,
    audio:true,
},function(mediaStream){

    // output mediaStream to speakers:
    var mediaStreamSource=audioContext.createMediaStreamSource(mediaStream);
    mediaStreamSource.connect(audioContext.destintion);

    // send mediaStream to server:

    // WebRTC code? not sure about this...
    var RTCconfig={};
    var conn=new RTCPeerConnection(RTCconfig);

    // ???

},function(error){
    console.log('getUserMedia() fail.');
    console.log(error);
});
Como posso enviar isto para o servidor?

Depois de pesquisar no Google, estive a investigar WebRTC, mas isso parece ser apenas uma comunicação entre pares [[14] - na verdade, Agora estou olhando mais para isso, eu acho que este é o caminho a seguir. Parece ser a maneira de se comunicar do navegador do cliente até o servidor Web host, mas nada que eu tente chega perto de funcionar.

estive a ver a documentação do W3C (que estou a achar demasiado abstracta), e tenho andado através disto artigo sobre o HTML5 Rocks (que levanta mais perguntas do que respostas). Parece que preciso de um método de sinalização, alguém pode aconselhar qual é o melhor método de sinalização para enviar medíastreams, XHR, XMPP, SIP, Socket.io ou outra coisa?

O que vou precisar no servidor para suportar o recebimento do WebRTC? O meu servidor está a correr uma pilha de lâmpadas básicas.

Além disso, é melhor esperar até que o {[[2]} esteja terminado de gravar antes que eu o envie para o servidor, ou é melhor enviar o mediaStream Como está a ser gravado? Quero saber se vou fazer isto da maneira certa. Eu escrevi uploaders de arquivos em javascript e HTML5, mas o upload de um desses {[[6]} parece hellishly mais complicado e eu não tenho certeza se estou me aproximando direito.

Qualquer ajuda seria muito apreciada.

Author: PGCodeRider, 2014-08-27

2 answers

Não pode enviar o fluxo ao vivo em si enquanto ele está em execução. Isto é porque é uma corrente ao vivo.

Então, isso deixa-te com algumas opções.
  1. gravar o fluxo de áudio usando um dos muitos gravadores lá fora gravar funciona bastante bem. Espere até que o fluxo esteja completo e, em seguida, upload o arquivo.
  2. enviar blocos menores de áudio gravado com um temporizador e juntá-los novamente do lado do servidor. Este é um exemplo de este
  3. envie os pacotes de áudio à medida que ocorrem através de websockets para o seu servidor para que possa manipulá-los e fundi-los lá. a minha versão do RecordRTC Faz isto.
  4. Faça uma ligação de pares com o seu servidor para que ele possa agarrar a transmissão raw da rtp e você possa gravar a transmissão usando algum código de nível inferior. Isto pode ser feito facilmente com o Janus-Gateway.
Quanto a esperar para enviar o fluxo vs enviá - lo em pedaços, tudo depende de quanto tempo estás a gravar. Se for por um período de tempo mais longo, eu diria que enviar a gravação em pedaços ou enviar ativamente pacotes de áudio sobre websockets é uma solução melhor, já que o upload e armazenamento de arquivos de áudio maiores do lado do cliente pode ser árduo para o cliente.

O Firefox tem realmente uma solução própria para gravar mas não é suportado no chrome, por isso pode não funcionar na sua situação.

Como um aparte, o método de sinalização mencionado é para sessão construir / destruir e realmente não tem nada a ver com a própria mídia. Você só se preocuparia com isso se estivesse usando possivelmente a solução número 4 mostrada acima.

 35
Author: Benjamin Trent, 2014-09-05 12:53:44

Uma boa API para si seria MediaRecorder API mas é menos suportada do que a API de áudio Web, por isso pode fazê-lo usando um ScriptNode ou usar Gravador.js (ou base nele para construir o seu próprio scriptnode).

 3
Author: Luizgrs, 2014-09-05 13:01:47