gpt4 book ai didi

webrtc - 多次调用时 getUserMedia 是否提供相同或新的流?

转载 作者:行者123 更新时间:2023-12-05 02:51:32 40 4
gpt4 key购买 nike

如果您的应用想要获得相同的用户媒体,比如说具有完全相同约束的音频,不止一次,navigator.mediaDevices.getUserMedia 调用将返回一个新的流,因此将分配相同的大量的计算资源,还是它只会给你相同的流(具有相同引用的相同对象)因此不使用额外的资源?

我正在将用户的音频流传输给该应用的另一个用户。在某个时候,第三个或更多用户将加入,他们需要来自第一个用户的相同音频,而第一个用户正在传输给第二个用户,以便传输给他们自己。

我希望尽可能高效,而不是为同一音频流的副本分配新资源。

我应该再次调用 navigator.mediaDevices.getUserMedia 并且它会给我之前给我的相同流(相同引用),还是我不应该这样做,因为它会给我一个新的音频流甚至我提供的约束都完全相同,我应该通过将之前返回的音频流存储在 reach 变量中等方式重用它吗?

我的调查显示流的 MediaStream 对象)id 是不同的。看起来它们是不同的对象。

const str = await navigator.mediaDevices.getUserMedia({audio: true})
MediaStream { ​
active: true ​
id: "{f3b334cd-8507-408f-94e9-40b42bbd73f6}"
...
}

const str1 = await navigator.mediaDevices.getUserMedia({audio: true})
MediaStream {
active: true
id: "{ec94325c-19d8-4e91-b668-636f3c267ad4}"
​...
}

调用 Object.is(str, st1) 也会返回 false

最佳答案

您问题答案的深层真相在于浏览器实现细节。 (意思是:试图根据它应该的工作方式对它的工作方式进行逆向工程,嗯,很困难。)

如果您正在使用 WebRTC 的通信,您可以将相同的 stream 对象从对 getUserMedia() 的单个调用传递给多个对等连接对象,并且它们都会得到流数据。

您可以对 clone the stream 执行 stream.clone()如果你希望。流克隆具有新的 ID 值。

就多次调用 .getUserMedia() 而言,如果您在某个浏览器的轨道上没有执行 track.stop()现有的流。对不同的调用赋予不同的约束也会导致失败。

关于webrtc - 多次调用时 getUserMedia 是否提供相同或新的流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63111279/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com