TokBox会话被破坏
问题描述:
我试图让客户端发布A/V流,将它们关闭,然后再打开它们。我第一次告诉他们发布然后取消发布,它可以正常工作。但是,下次我告诉他们发布(使用相同的会话标识和令牌)时,出现错误“无法连接,会话已经未定义”。TokBox会话被破坏
为什么“会话”被破坏?..是不是取消发布?我的代码是相当多从教程采取:
clientSession = OT.initSession(apiKey, sessionId);
clientSession.connect(token, function (error) {
if (error) {
handleError(error);
} else {
clientPublisher = OT.initPublisher(container, {
insertMode: 'append',
width: '100%',
height: '100%'
}, handleError);
}
});
}
取消发布:
clientSession.unpublish(clientPublisher);
答
有2种方法可以做到这一点。您可以初始化一个发布服务器对象,并在每次重新发布时继续使用它。或者,您可以每次都继续销毁并重新初始化新发布商。我已经写了这两种方法对您的例子:
- 重用相同的发布器:https://jsbin.com/tobabos/edit?html
- 创建新的发布者每次:https://jsbin.com/jawuxez/edit?html
注:请提供自己的API密钥,会话ID和令牌运行上面的JSbins
关键的区别是,要重新使用发布服务器,您需要这样做:
pub.on('streamDestroyed', e => e.preventDefault());
这是记录在这里:https://tokbox.com/developer/sdks/js/reference/Publisher.html#.event:streamDestroyed
它确保当您取消发布,发布对象不被破坏,因此它可以被重用。
如果您重复使用发布者,发布者仍然在页面上,用户仍然可以看到他们自己,也会发生什么情况。即使发布者没有流式传输到会话中。您可以使用CSS或DOM操作来隐藏发布者,但网络摄像头指示灯仍然亮着。
但是,如果每次销毁并重新创建发布者,发布者都会从页面中消失,并且在未发布时网络摄像头指示灯会熄灭。根据浏览器和用户的设置,可能会要求他们再次访问其网络摄像头。