如何将音频从浏览器流传输到服务器?

时间:2020-05-20 03:44:10

标签: javascript html webrtc audio-streaming mediarecorder

我正在尝试制作一个简单的低延迟记录器。我目前使用下面的代码使用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()
            });
        }
    }

非常感谢

杰克逊

1 个答案:

答案 0 :(得分:1)

我对RecordRTC并不熟悉,但这对Pion WebRTC来说是微不足道的!

save-to-disk显示了如何捕获H264 / Opus并将其保存到磁盘。从那时起,您可以做自己想做的事!

如果您想实时播放,则可能更需要broadcast之类的东西,它会接收传入的媒体,然后将其扇形散布到许多连接的对等端。您可以将这两个示例结合在一起,以便进行录制和合并扇出。