从MediaStreamDestination克隆的流是否仍以某种方式绑定到此AudioNode?

时间:2019-08-19 19:42:37

标签: html web-audio-api

我有多个在加载时创建的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的诺言在我创建(克隆)所有必需的流之后得到解决。

为什么在创建这些克隆后将源节点连接到目标节点时,它仍然会影响它们并且音频在流动?流是否以某种方式连接到从其获取的节点,并且克隆时此信息会保留?

1 个答案:

答案 0 :(得分:0)

是的,您的假设是正确的。每个克隆的MediaStream将使用完全相同的媒体数据作为输入。 Media Capture and Streams spec定义了用于clone a MediaStream的算法,该算法内部依赖于clone a MediaStreamTrack的算法。重要的一句话是“ 5.让trackClone的基础源成为跟踪的源。”