我有多个在加载时创建的WebRTC连接,因此我需要有多个输入流来处理它们。
实际上,我随后创建了一个MediaStreamDestinationNode,并从该节点的流克隆中获取了WebRTC连接的流。
microphoneNode = audioContext.createMediaStreamDestination();
navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => {
var micNodeSource = audioContext.createMediaStreamSource(stream);
micNodeSource.connect(microphoneNode);
});
var stream1= microphoneNode.stream.clone();
var stream2 = microphoneNode.stream.clone();
var stream3 = microphoneNode.stream.clone();
正如我发现的那样,如果没有页面上的用户操作(至少聚焦),我将无法获得麦克风流。因此,navigator.mediaDevices.getUserMedia
的诺言在我创建(克隆)所有必需的流之后得到解决。
为什么在创建这些克隆后将源节点连接到目标节点时,它仍然会影响它们并且音频在流动?流是否以某种方式连接到从其获取的节点,并且克隆时此信息会保留?
答案 0 :(得分:0)
是的,您的假设是正确的。每个克隆的MediaStream将使用完全相同的媒体数据作为输入。 Media Capture and Streams spec定义了用于clone a MediaStream的算法,该算法内部依赖于clone a MediaStreamTrack的算法。重要的一句话是“ 5.让trackClone的基础源成为跟踪的源。”