QuickBlox视频聊天演示Web示例:调用start call后“this.socket is undefined”

时间:2016-03-31 21:15:47

标签: asp.net-mvc visual-studio-2015 iis-express quickblox

我在QuickBlox视频聊天演示示例中遇到“this.socket is undefined”错误。当我在本地(从本地文件系统)运行它时,它工作正常,但如果我将它集成到在本地IIS Espress(Visual Studio 2015)上运行的ASP.NET MVC应用程序,我点击Firefox控制台窗口时出现以下错误在“开始通​​话”并接受分享音频/视频设备媒体:

this.socket is undefined QB.js:8111:0
[QBWebRTC]: _dialingCallback, answerTimeInterval: 5000 QB.js:1620:32
TypeError: this.socket is undefined
QB.js:8111:175
[QBWebRTC]: _dialingCallback, answerTimeInterval: 10000 QB.js:1620:32
TypeError: this.socket is undefined
QB.js:8111:175
[QBWebRTC]: _dialingCallback, answerTimeInterval: 15000 QB.js:1620:32
TypeError: this.socket is undefined
QB.js:8111:175
[QBWebRTC]: _dialingCallback, answerTimeInterval: 20000 QB.js:1620:32
TypeError: this.socket is undefined
QB.js:8111:175
[QBWebRTC]: _dialingCallback, answerTimeInterval: 25000 QB.js:1620:32
TypeError: this.socket is undefined

此处“QB.JS”是QuickBlox JS SDK的未经授权的版本。我做到了,这样就可以知道JS SDK中的哪个代码块抛出了错误

QuickBlox文档说,出于安全原因,它应该通过HTTPS运行,所以我也尝试了启用SSL并附加自签名证书但没有运气

你能否在这里阐明出现了什么问题以及为什么我看到这种奇怪的无证行为。

注意:这是我从GitHib下载的相同示例(遵循QuickBlox文档页面)并且除了配置文件之外没有更改任何内容以包含我自己的“AppId / AuthKey / AuthSecrect和少数演示用户”

2 个答案:

答案 0 :(得分:0)

如果你面对同样的确定

您尚未通过说QB.Init()

启动QB框架

您尚未打开聊天会话。我的观察:如果 您通过说XMPP打开了QB.createSession()个聊天会话 并且您正在尝试创建一个视频webrtc会话 奇怪的错误。

如果您需要为某种目的创建会话,然后在打开视频会话之前将其销毁,如:

QB.createSession(function(res, err)
{
  if(err)
   console.log(JSON.Stringify(err));
else
   //do your stuff here and once done

QB.Destroysession(function(){
}
});
});

现在你可以继续开始创建一个视频会话,它会正常工作。您可以在此处查看实际的GitHub帖子https://github.com/QuickBlox/quickblox-javascript-sdk/issues/125

答案 1 :(得分:0)

将视频通话功能移到QB.createSession功能之外。

var occupantIds = [];
QB.createSession(function(err,result){
     if (result) {
          // Login, then chat.connect, then do chat stuff here, like get your occupant id's
     }else () {
          console.log(err);
     }
});

//现在进行视频通话

QB.webrtc.createNewSession(occupantIds, QB.webrtc.CallType.VIDEO);
session.getUserMedia($scope.localMediaParams, function(err, stream) {
    if (err){
        console.log(err);
    }else{
        console.log('Now Make the call);
        session.call({}, function(error) {
            console.log(error);
        });
    }
});