2014-08-27 18 views
31

Sto acquisendo dati audio utilizzando getUserMedia() e voglio inviarlo al mio server in modo che possa salvarlo come un BLOB in un campo MySQL.Invio di un MediaStream per ospitare Server con WebRTC dopo che è stato acquisito da getUserMedia

Questo è tutto ciò che sto cercando di fare. Ho fatto diversi tentativi per farlo usando WebRTC, ma non so nemmeno a questo punto se questo è giusto o anche il modo migliore per farlo.

Can qualcuno aiutarmi?

Ecco il codice che sto usando per catturare l'audio dal microfono:

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

Come posso inviare questo mediaStream fino al server?

Dopo Googling intorno Ive cercato in WebRTC, ma questo sembra essere solo per comunicazione peer to peer - in realtà, ora sto cercando in questo di più, credo che questo sia la strada da percorrere. Sembra essere il modo di comunicare dal browser dei client fino al server web host, ma nulla di ciò che provo si avvicina al funzionamento.

Ive sta passando attraverso the W3C documentation (che sto trovando troppo astratto), e Ive sta passando attraverso this article on HTML5 Rocks (che sta portando più domande che risposte). A quanto pare ho bisogno di un metodo di segnalazione, qualcuno può consigliare quale metodo di segnalazione è meglio per l'invio di media stream, XHR, XMPP, SIP, Socket.io o qualcos'altro?

Cosa mi servirà sul server per supportare la ricezione di WebRTC? Il mio server web sta eseguendo uno stack LAMP di base.

Inoltre, è meglio attendere fino al termine della registrazione dello mediaStream prima di inviarlo al server, oppure è meglio inviare lo mediaStream durante la registrazione? Voglio sapere se sto andando a fare questo nel modo giusto. Ho scritto caricatori di file in javascript e HTML5, ma il caricamento di uno di questi mediaStreams sembra incredibilmente più complicato e non sono sicuro se mi sto avvicinando correttamente.

Qualsiasi aiuto su questo sarebbe molto apprezzato.

+0

Si desidera memorizzare solo il file registrato? In tal caso, è possibile caricare il BLOB sul server in cui può salvarlo. O vuoi che il tuo server sia in grado di avere un live streaming dal client e lasciare che il server gestisca la registrazione? –

+0

Voglio solo memorizzare il file registrato sul server. – Jimmery

risposta

29

Non è possibile caricare il live streaming mentre è in esecuzione. Questo perché è un flusso LIVE.

Quindi, questo vi lascia con una manciata di opzioni.

  1. Registrare il flusso audio utilizzando uno dei tanti registratori in uscita RecordRTC funziona abbastanza bene. Attendere fino al completamento dello streaming e quindi caricare il file.
  2. Invia chuncks più piccoli di audio registrato con un timer e unirli di nuovo sul lato server. This is an example of this
  3. Inviare i pacchetti audio come si verificano su websockets al server in modo che sia possibile manipolarli e unirli lì. My version of RecordRTC does this.
  4. Effettuare una connessione peer effettiva con il server in modo che possa acquisire il flusso rtp non elaborato e registrare lo streaming utilizzando un codice di livello inferiore. Questo può essere fatto facilmente con il Janus-Gateway.

Per quanto riguarda l'attesa per inviare lo streaming e l'invio in blocchi, tutto dipende da quanto tempo si sta registrando. Se è per un periodo di tempo più lungo, direi che l'invio della registrazione in blocchi o l'invio attivo di pacchetti audio tramite websocket è una soluzione migliore poiché caricare e archiviare file audio più grandi dal lato client può essere arduo per il cliente.

Firefox in realtà ha un suo own solution for recording ma non è supportato in chrome quindi potrebbe non funzionare nella situazione.

Per inciso, il metodo di segnalazione menzionato è per la sessione di compilazione/distruzione e in realtà non ha nulla a che fare con il supporto stesso. Ti preoccuperesti davvero solo di questo se stai usando la soluzione numero 4 mostrata sopra.

3

Una buona API per voi sarebbe MediaRecorder API ma è meno supportata dell'API Web Audio, quindi è possibile farlo utilizzando un ScriptNode o utilizzare Recorder.js (o su base per creare il proprio scriptnode).

Problemi correlati