我在为我的移动应用程序使用 OpenTok 时遇到问题(我使用 Phonegap 并在 Android 上测试该应用程序)。
我已成功创建发布者流和订阅者流。
当我关闭 session 并尝试重新打开它时,出现了几个问题:
- 似乎之前的流仍在运行(我可以看到 2 个与订阅者 session 关联的事件流与 Chrome 检查元素工具),但屏幕上没有显示视频,只有音频处于事件状态;
- 当我第二次关闭 session 时,发布者流仍显示在应用程序上。
如您所见,我尝试了不同的方法来完全关闭流:disconnect()、unpublish()、publisher.destroy(),但它并没有像我希望的那样工作。
这是我的 .js 脚本:
function connexionOpenTok() {
var sessionSub;
var sessionPub;
var publisher;
$('#visioStopBtn').click(function () {
console.log('Arret de la Visio...');
$('#Collaboratif_mobilecontainer').show();
$('#visioContainer').hide();
if(sessionPub) {
if (publisher) {
sessionPub.unpublish(publisher);
}
sessionPub.publisher.destroy();
sessionPub.disconnect();
sessionPub.forceDisconnect();
sessionPub.forceUnpublish();
}
if(sessionSub) {
sessionSub.disconnect();
sessionSub.forceDisconnect();
}
});
var subDiv = '<div id="visioSubscriber"></div>'
var subPub = '<div id="visioPublisher"></div>'
$('#visioContainer').append(subDiv).append(subPub);
var apiKey = "KEY";
var sessionId = "ID";
var subToken = 'TOKEN';
var pubToken = 'TOKEN';
// Initialize session, set up event listeners, and connect
var width = $(window).width();
var height = $(window).height();
//publisher
setTimeout(function (){
sessionPub = OT.initSession(apiKey, sessionId);
sessionPub.connect(pubToken, function(error) {
publisher = OT.initPublisher("visioPublisher", {width: width/5, height: height/5, zIndex: 3} );
sessionPub.publish(publisher);
});
}, 1000);
//subscriber
setTimeout(function (){
sessionSub = OT.initSession(apiKey, sessionId);
sessionSub.once("streamCreated", function(event) {
sessionSub.subscribe(event.stream,"visioSubscriber", {width: width, height: height*0.8, zIndex: 2} );
});
sessionSub.connect(subToken, function () {
});
}, 5000);
}
这是我的 CSS:
#visioSubscriber {
position:absolute;
z-index:2;
bottom: 65px;
left: 0px;
}
#visioStopBtn {
position:absolute;
z-index:10;
width: 85%;
margin: 5px 3% 5px 3%;
bottom : 8px;
}
#visioPublisher {
display:block;
z-index: 3;
position: absolute;
bottom: 65px;
left: 3%;
}
#visioContainer {
background-color: black;
width : 100%;
height: 100%;
z-index: 1;
position: absolute;
bottom:0px;
}
这是关于 Opentok 的 html 部分:
<div id="visioContainer">
<a data-role="button" class="button"
id="visioStopBtn" data-corners="true" data-icon="none" data-iconpos='nowhere' data-mini="false" data-theme="b">
ARRETER LA VISIO
</a>
</div>
最佳答案
在JS库(TokBox官方维护)上,调用session.disconnect()
后,所有的发布者和订阅者都会自动清理。 Cordova(又名 PhoneGap)是一个社区维护的项目(不是由 TokBox 正式维护的),悬空的发布者/订阅者似乎是 cordova 插件中的一个错误。
几天前有一个拉取请求,你能尝试更新 cordova 插件,看看问题是否消失了吗? https://github.com/songz/cordova-plugin-opentok/pull/79
如果不是,您应该在项目页面上提出问题:https://github.com/songz/cordova-plugin-opentok/issues
关于javascript - Opentok : How to kill streams/publishers properly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25207087/