Javascript 如何将音频从浏览器传输到服务器?
我想做一个简单的低延迟记录器。我目前使用下面的代码使用Socket.IO捕获和传输音频。但是,只有第一个数据包是可播放的,因为它是唯一包含报头信息的数据包 我还尝试过每秒创建新的流。 它无法工作,因为在录制会话之间音频会中断 我的问题是如何创建一个流,从浏览器获取输入,将其传输到服务器(它不能是对等的),并可以在另一个浏览器中近实时播放。我知道这是可能的,因为像Discord这样的应用程序使用它 这是我目前正在使用的代码。在第一个数据包之后,Chrome返回以下错误:Javascript 如何将音频从浏览器传输到服务器?,javascript,html,webrtc,audio-streaming,mediarecorder,Javascript,Html,Webrtc,Audio Streaming,Mediarecorder,我想做一个简单的低延迟记录器。我目前使用下面的代码使用Socket.IO捕获和传输音频。但是,只有第一个数据包是可播放的,因为它是唯一包含报头信息的数据包 我还尝试过每秒创建新的流。 它无法工作,因为在录制会话之间音频会中断 我的问题是如何创建一个流,从浏览器获取输入,将其传输到服务器(它不能是对等的),并可以在另一个浏览器中近实时播放。我知道这是可能的,因为像Discord这样的应用程序使用它 这是我目前正在使用的代码。在第一个数据包之后,Chrome返回以下错误: Uncaught(承诺中)
Uncaught(承诺中)DOMExecption:play()无法加载,因为找不到支持的源代码。
我已经做了好几天了,请帮忙
function schedulePacketSend() {
if (recording) {
navigator.mediaDevices.getUserMedia({audio:true}).then(function(mediaStream) {
const rec = RecordRTC(mediaStream, {
type:'audio',
mimeType:'audio/webm; codecs=opus',
recorderType:StereoAudioRecorder,
ondataavailable:function(e){
console.log('sending packet')
console.log(e)
socket.emit('audio-up', {audio:e.data, client:id})
},
timeSlice:1000
})
rec.startRecording()
});
}
}
非常感谢
Jackson我不熟悉RecordRTC,但这对于Pion WebRTC来说是微不足道的 显示如何捕获H264/OPU并将其保存到磁盘。从那时起,你就可以随心所欲了
如果你想要实时的话,你可能会想要一些更像它的东西,比如接收传入的媒体,然后对许多连接的对等点进行扇出。您可以将这两个示例结合起来,这样您就可以同时进行录制和扇出操作。感谢您的回复。我看了一下你的
pion/webrtc
示例,看起来这个项目依赖于一种称为STUN或TURN的技术,这似乎是NAT路由技术。主要问题是您需要多个IP地址才能使用这些协议。我希望(尽管我对其他解决方案持开放态度)有某种方法可以从浏览器中获取原始PCM音频,并能够在另一个客户端上播放。原始PCM音频可能不会,但您可以通过WebRTC发送Opus,甚至G.711(离原始PCM不远):将其发布到某个服务器,该服务器可以将其发送出去播放。在此页面上,您可以将其发布到您的Unreal Media Server实例:请注意,不需要任何昏迷或翻转服务器。