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

Webrtc getUserMedia在多次调用时是否提供相同或新的流?,webrtc,getusermedia,mediastream,Webrtc,Getusermedia,Mediastream,如果您的应用程序想要获得相同的用户媒体,那么使用完全相同的约束条件的音频将不止一次地navigator.mediaDevices.getUserMediacall返回一个新流,因此将分配相同数量的计算资源,或者只给您相同的流(具有相同引用的相同对象)因此,是否不使用额外资源 我正在将用户的音频流传输给应用程序的另一个用户。在某一点上,第三个或更多用户将加入,并且他们需要来自第一个用户的、第一个用户正在发送给第二个用户的相同音频被发送给他们自己 我希望与不为同一音频流的副本分配新资源一样高效 我是

如果您的应用程序想要获得相同的用户媒体,那么使用完全相同的约束条件的音频将不止一次地
navigator.mediaDevices.getUserMedia
call返回一个新流,因此将分配相同数量的计算资源,或者只给您相同的流(具有相同引用的相同对象)因此,是否不使用额外资源

我正在将用户的音频流传输给应用程序的另一个用户。在某一点上,第三个或更多用户将加入,并且他们需要来自第一个用户的、第一个用户正在发送给第二个用户的相同音频被发送给他们自己

我希望与不为同一音频流的副本分配新资源一样高效

我是否应该再次调用
navigator.mediaDevices.getUserMedia
,它将为我提供与以前相同的流(相同的引用),或者我不应该这样做,因为它将为我提供一个新的音频流,即使我提供的约束完全相同,我应该重用之前返回的音频流,比如将其存储在reach中的变量中

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


另外,调用
Object.is(str,st1)
返回
false

对您的问题的回答的深层原因在于浏览器实现细节。(意思是:试图从它的工作方式来逆向工程它应该如何工作是很困难的。)


如果您使用的是WebRTC的通信,那么您可以将相同的
对象从对
getUserMedia()
的单个调用发送到多个对等连接对象,它们都将获得流数据

如果愿意,您可以执行
stream.clone()
到。流克隆具有新的id值


就多次调用
.getUserMedia()
而言,在某些浏览器情况下,如果不在现有流的磁道上执行
track.stop()
,则会失败。为不同的调用提供不同的约束也会导致失败。

“如果您使用WebRTC的通信,您可以将同一个流对象(从对getUserMedia()的单个调用)提供给多个对等连接对象,它们都将获得流数据。”这就是我需要的最终或主要问题的答案。谢谢我想对于我的用例来说,我只需要相同的流,有时相同的流需要来自另一个流的附加轨迹。但是对于我的问题,我们仍然不知道它是同一个流还是另一个流,尽管如果我引用的方式有效,这对于我的用例来说并不重要,但仅仅是为了知道真相。规格说明是什么?
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}"
​...
}