出于某种原因,我的发布商在创建新会话时启动了两次。然而,第二个,不应该在它应该是的div中。此外,如果你连接到会话,你会得到相同的,所以它只为你自己显示。
我试图找出它出现的原因。这里有一些片段:
{{1}}
它还要求我两次访问设备。
答案 0 :(得分:0)
我在您提供的代码中看到两个常见问题:
api_key
函数中的变量session_id
,token
和getApiAndToken()
仅限于该函数,因此在{{1}内不可见你试图使用它们。
initializeSession()
功能的目标不明确,其使用不一致。每次调用它时(一旦会话连接并且每次下拉值更改),此函数都会创建一个新的Publisher。它也不会返回任何内容,因此在表达式publishStream()
中使用它时,实际上只是调用session.publish(publishStream(true))
,这会导致将新的Publisher添加到页面的末尾,因为没有元素ID指定。最后一部分就是为什么你说它不在session.publish()
所在的位置。
听起来你想要的是一个发布者,它有一个下拉列表来选择它使用的设备。我为您创建了一个示例:https://jsbin.com/sujufog/11/edit?html,js,output。
简而言之,以下是它的工作原理。它首先初始化虚拟发布者,以便浏览器可以提示用户允许使用摄像头和麦克风。这对于读取可用设备是必要的。请注意,如果您使用通过HTTPS投放的网页,Chrome等浏览器会记住您之前在该网域上允许的权限,而不必再次提示用户。因此,在Chrome上,虚拟发布者不会为已经运行该应用程序的用户显示任何提示。接下来,虚拟发布者被丢弃,并调用<div>
来读取可用设备并填充下拉菜单。在发生这种情况时,会话也会连接,并且在任一下拉列表中的每次更改时,都会调用OT.getDevices()
函数。在该函数中,如果存在先前的发布者,则首先将其删除,然后使用当前选定的设备创建新的发布者。然后将新发布商传递到publish()
。