我正在尝试制作一个简单的低延迟记录器。我目前使用下面的代码使用Socket.IO捕获和传输音频。但是,只有第一个数据包是可播放的,因为它是唯一包含标头信息的数据包。
我也尝试过每秒创建新的流。 它没有用,因为音频会在录制会话之间中断。
我的问题是如何创建一个流,该流从浏览器获取输入,将其传输到服务器(不能是对等的),并且可以在另一个浏览器中近实时播放。我知道这是可能的,因为像Discord这样的应用程序都使用它。
这是我当前正在使用的代码。在第一个数据包之后,Chrome会返回以下错误:
Uncaught (in promise) DOMExecption: play() failed to load because no supported source was found.
我已经为此工作了好几天,请帮忙!
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()
});
}
}
非常感谢
杰克逊
答案 0 :(得分:1)
我对RecordRTC并不熟悉,但这对Pion WebRTC来说是微不足道的!
save-to-disk显示了如何捕获H264 / Opus并将其保存到磁盘。从那时起,您可以做自己想做的事!
如果您想实时播放,则可能更需要broadcast之类的东西,它会接收传入的媒体,然后将其扇形散布到许多连接的对等端。您可以将这两个示例结合在一起,以便进行录制和合并扇出。