jquery 在getUserMedia捕获媒体流后,使用WebRTC将其发送到主机服务器

zxlwwiss  于 2023-02-08  发布在  jQuery
关注(0)|答案(4)|浏览(347)

我正在使用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);
});

如何将此mediaStream发送到服务器?
在谷歌上搜索了一下之后,我开始研究WebRTC,* 但这似乎只是点对点通信 *-实际上,现在我正在深入研究这个问题,我认为这是一种可行的方法。它似乎是从客户端浏览器到主机Web服务器的通信方式,但我尝试的任何方法都无法接近工作。
我一直在研究the W3C documentation(我发现它太抽象了),我一直在研究this article on HTML5 Rocks(它提出的问题比答案多)。显然,我需要一个信令方法,谁能告诉我哪种信令方法最适合发送媒体流、XHR、XMPP、SIP、www.example.com或其他东西?Socket.io or something else?
服务器上需要什么来支持WebRTC的接收?我的Web服务器正在运行一个基本的LAMP堆栈。
还有,是最好等到mediaStream完成录制后再发送到服务器,还是在录制时发送mediaStream更好?我想知道我是否正在以正确的方式进行此操作。我已经用JavaScript和HTML5编写了文件上传程序,但是上传这些mediaStreams中的一个看起来要复杂得多,我不确定我是否正确地处理了它。
在这方面的任何帮助将不胜感激。

ih99xse1

ih99xse11#

您不能在直播流正在运行时上载直播流本身。这是因为它是直播流。
所以,这给你留下了一些选择。
1.使用RecordRTC的众多录音机之一录制音频流效果相当不错。等待流完成,然后上传文件。
1.使用计时器发送较小的录制音频块,并在服务器端再次合并它们。This is an example of this
1.当音频包通过websockets出现时,将其发送到服务器,以便您可以在那里操作和合并它们。My version of RecordRTC does this
1.与你的服务器建立一个真正的对等连接,这样它就可以获取原始的rtp流,你可以使用一些低级代码来记录流,这在Janus-Gateway上很容易做到。
至于等待发送流还是分块发送,这完全取决于你录制了多长时间。如果时间较长,我会说分块发送录音或通过websockets主动发送音频包是一个更好的解决方案,因为从客户端上传和存储更大的音频文件对客户端来说可能很困难。
火狐实际上有一个它的own solution for recording,但它在Chrome中不受支持,所以它可能无法在您的情况下工作。
顺便说一句,提到的信令方法是用于会话建立/销毁的,实际上与媒体本身无关。只有在使用上面显示的解决方案4时,您才会真正担心这个问题。

djp7away

djp7away2#

MediaRecorder API是一个很好的API,但它的支持不如Web音频API,因此您可以使用ScriptNode或Recorder.js(或基于它构建自己的scriptnode)来完成它。

pgpifvop

pgpifvop3#

WebRTC的设计是点对点的,而peer可以是浏览器,也可以是服务器,所以完全可以通过WebRTC将流推送到服务器,然后将流记录为文件。
河流流量为:

Chrome ----WebRTC--->   Server  ---record---> FLV/MP4

有很多服务器可以接受WebRTC流媒体,如SRSjanusmediasoup。请注意,您可能需要将WebRTC(H.264+Opus)转换为MP4(H.264+AAC),或者选择支持此功能的SRS

sdnqo3pr

sdnqo3pr4#

是的,这是可能的发送MediaStream到您的服务器,但唯一的方法,你可以实现是通过WebSocket,使客户端浏览器发送数据到您的服务器在真实的连接.所以我建议您使用WebSocket

相关问题