在getUserMedia捕获MediaStream后,使用WebRTC将MediaStream发送到主机服务器

Jim*_*ery 41 javascript audio jquery webrtc getusermedia

我正在使用捕获音频数据getUserMedia(),我想将它发送到我的服务器,所以我可以将它保存为MySQL字段中的Blob.

这就是我想要做的.我已经多次尝试使用WebRTC进行此操作,但我现在甚至不知道这是否正确甚至是最好的方法.

有人能帮助我吗?

这是我用来从麦克风捕获音频的代码:

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);
});
Run Code Online (Sandbox Code Playgroud)

如何将其发送mediaStream到服务器?

谷歌搜索后我一直在调查WebRTC,但这似乎只是为了点对点通信 - 实际上,现在我正在研究这个,我认为这是要走的路.它似乎是从客户端的浏览器到主机网络服务器的通信方式,但我尝试的任何东西都接近工作.

我一直在阅读W3C文档(我发现它太抽象了),而且我一直在通过这篇关于HTML5 Rocks的文章(提出的问题多于答案).显然我需要一种信令方法,任何人都可以建议哪种信令方法最适合发送mediaStreams,XHR,XMPP,SIP,Socket.io或其他什么?

我需要在服务器上支持WebRTC的接收?我的Web服务器正在运行一个基本的LAMP堆栈.

另外,最好mediaStream是在我将其发送到服务器之前等到完成录制,还是最好发送mediaStream正在录制的内容?我想知道我是否正在以正确的方式做这件事.我已经用javascript和HTML5编写了文件上传器,但是上传其中一个mediaStreams看起来更加复杂,我不确定我是否正确接近它.

任何有关这方面的帮助将不胜感激.

Ben*_*ent 45

您无法在运行时自行上传实时流.这是因为它是一个LIVE流.

所以,这给你留下了一些选择.

  1. 使用众多录像机之一录制音频流RecordRTC工作得相当好.等到流完成后再上传文件.
  2. 使用计时器发送较小的录制音频块并将其再次合并到服务器端.这是一个例子
  3. 通过websockets将音频数据包发送到服务器,以便您可以在那里操作和合并它们.我的RecordRTC版本就是这样做的.
  4. 与服务器建立实际的对等连接,以便它可以获取原始rtp流,并且可以使用一些较低级别的代码记录流.这可以通过Janus-Gateway轻松完成.

至于等待发送流和以块发送它,这一切都取决于你录制多长时间.如果它是一段较长的时间,我会说以块的形式发送录音或通过websockets主动发送音频数据包是一个更好的解决方案,因为从客户端上传和存储更大的音频文件对于客户来说可能是艰巨的.

Firefox实际上有自己的录制解决方案,但Chrome不支持它,因此它可能无法在您的情况下工作.

顺便说一句,提到的信令方法是用于会话构建/销毁,并且实际上与媒体本身无关.如果您使用上面显示的解决方案编号4,您只会真的担心这一点.


Lui*_*grs 5

对您来说, MediaRecorder API 是一个不错的 API ,但它的支持程度不如 Web Audio API,因此您可以使用 ScriptNode 或使用Recorder.js(或基于它来构建您自己的 scriptnode)。