webRTC音频流怎么融合

音频流融合,核心代码
说明:我是在peerconnection的时候,监听ontrack事件,在事件的回调函数中获取远端的音频track,然后放入一个map对象,key为用户id,value为音频的track对象。
第一行navigator.mediaDevices.getUserMedia({audio: true})是为了获取本地音频流,当然你可以也把他加入到map对象,统一到foreach循环中处理
screenstream是我事先获取到的桌面流,经过处理后的流在mixedOutput.stream中,其实这个流中只有一个audioTrack,也是融合之后的track,把这个track加入screenstream,这个screenstream中就包含了桌面视频以及所有人的声音。

navigator.mediaDevices.getUserMedia({audio: true}).then(localMicStream => {
                let audioContext = new AudioContext();//创建音频上下文
                let localMicrophoneStreamNode = audioContext.createMediaStreamSource(localMicStream);//创建节点
                let mixedOutput = audioContext.createMediaStreamDestination();//创建一个输出媒体流节点
                localMicrophoneStreamNode.connect(mixedOutput);//把麦克风节点和系统音节点添加到输出媒体流
                audioTrackMap.forEach((audioTrack, userId) => {
                    let audioStream = new MediaStream();//创建一个媒体流
                    if (audioTrack) {
                        audioStream.addTrack(audioTrack)
                    }
                    let audioStreamNode = audioContext.createMediaStreamSource(audioStream);//创建系统音频节点
                    audioStreamNode.connect(mixedOutput);//把麦克风节点和系统音节点添加到输出媒体流
                })
                screenStream.addTrack(mixedOutput.stream.getTracks()[0])
                handleStream(screenStream)
            })
        }).catch(e => {
            console.error(e)
        })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值