Je capture des données audio à l'aide de getUserMedia()
et je veux les envoyer à mon serveur afin de pouvoir les enregistrer en tant qu'objet blob dans un champ MySQL.
C'est tout ce que j'essaie de faire. J'ai fait plusieurs tentatives pour ce faire en utilisant WebRTC, mais je ne sais même pas à ce stade si c'est la bonne ou même la meilleure façon de le faire.
Est-ce que quelqu'un peut m'aider?
Voici le code que j'utilise pour capturer l'audio du microphone:
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);
});
Comment envoyer ce mediaStream
au serveur?
Après avoir fait des recherches sur Google, je me suis penchée sur WebRTC
, mais cela semble être uniquement pour la communication poste à poste - en fait, maintenant je suis plus à la recherche, je pense que c'est la voie à suivre. Cela semble être le moyen de communiquer depuis le navigateur du client jusqu'au serveur Web hôte, mais rien de ce que j'essaie ne fonctionne même presque.
J'ai parcouru la documentation du W3C (ce que je trouve trop abstrait), et je suis passé par cet article sur HTML5 Rocks (qui fait apparaître plus de questions que de réponses). Apparemment, j'ai besoin d'une méthode de signalisation. Quelqu'un peut-il indiquer la meilleure méthode de signalisation pour l'envoi de mediaStreams, XHR, XMPP, SIP, Socket.io ou autre chose?
De quoi ai-je besoin sur le serveur pour prendre en charge la réception de WebRTC? Mon serveur Web exécute une pile LAMP de base.
De plus, est-il préférable d'attendre que le mediaStream
ait terminé l'enregistrement avant de l'envoyer au serveur, ou est-il préférable d'envoyer le mediaStream
tel qu'il est enregistré? Je veux savoir si je vais le faire correctement. J'ai écrit des téléchargeurs de fichiers en javascript et HTML5, mais le téléchargement de l'un de ces mediaStreams
semble infiniment plus compliqué et je ne suis pas sûr si je l'aborde correctement.
Toute aide à ce sujet serait grandement appréciée.
Vous ne pouvez pas télécharger le flux en direct lui-même pendant son exécution. C'est parce que c'est un flux LIVE.
Donc, cela vous laisse quelques options.
Quant à l'attente pour envoyer le flux vs l'envoyer par morceaux, tout dépend de la durée d'enregistrement. Si c'est pour une période plus longue, je dirais que l'envoi de l'enregistrement en morceaux ou l'envoi actif de paquets audio sur les websockets est une meilleure solution car le téléchargement et le stockage de fichiers audio plus volumineux du côté client peuvent être difficiles pour le client.
Firefox a en fait son propre solution d'enregistrement mais il n'est pas pris en charge dans chrome donc cela peut ne pas fonctionner dans votre situation.
En passant, la méthode de signalisation mentionnée est pour la création/destruction de session et n'a vraiment rien à voir avec le média lui-même. Vous ne vous en soucieriez vraiment que si vous utilisiez éventuellement la solution numéro 4 illustrée ci-dessus.
Une bonne API pour vous serait API MediaRecorder mais elle est moins prise en charge que l'API Web Audio, vous pouvez donc le faire en utilisant un ScriptNode ou utiliser Recorder.js (ou base dessus pour construire votre propre scriptnode).