我正在尝试使用Jitsi Meet API通过自定义GUI创建Jitsi Meet视频会议。
致电Uncaught TypeError: Cannot read property 'substr' of null
时收到initJitsiConference()
。
系统环境特征:
我收到以下错误消息(控制台Chrome):
Uncaught TypeError: Cannot read property 'substr' of null - JitsiConference.js:276
at se.resourceCreator (JitsiConference.js:276)
at A.createRoom (xmpp.js:475)
at se._init (JitsiConference.js:310)
at new se (JitsiConference.js:130)
at c.initJitsiConference (JitsiConnection.js:113)
看第276行的JitsiConference.js,我看到了:
JitsiConference.resourceCreator = function(jid, isAuthenticatedUser) {
let mucNickname;
if (isAuthenticatedUser) {
// For authenticated users generate a random ID.
mucNickname = RandomUtil.randomHexString(8).toLowerCase();
} else {
// We try to use the first part of the node (which for anonymous users
// on prosody is a UUID) to match the previous behavior (and maybe make
// debugging easier).
mucNickname = Strophe.getNodeFromJid(jid).substr(0, 8) //// 276 LINE ////
.toLowerCase();
// But if this doesn't have the required format we just generate a new
// random nickname.
const re = /[0-9a-f]{8}/g;
if (!re.test(mucNickname)) {
mucNickname = RandomUtil.randomHexString(8).toLowerCase();
}
}
return mucNickname;
};
我的API javascript(mydomain.com/test.html)如下:
<script src="vendor/jquery/jquery-3.4.1.min.js"></script>
<script src="https://meet.jit.si/libs/lib-jitsi-meet.min.js"></script>
<script type="text/javascript">
JitsiMeetJS.init();
const options = {
serviceUrl:'https://meet.jit.si/http-bind',
hosts: {
domain: 'meet.jit.si',
muc: 'conference.meet.jit.si',
},
bosh: 'https://meet.jit.si/http-bind',
useStunTurn: true
}
var connection = new JitsiMeetJS.JitsiConnection(null, null, options);
const confOptions = {
openBridgeChannel: true
}
room = connection.initJitsiConference("testconference1", confOptions);
</script>
我尝试了其他公共实例:
,并收到类似的错误(控制台Chrome):
Uncaught TypeError: Cannot read property 'substr' of null - JitsiConference.js:263
at oe.resourceCreator (JitsiConference.js:263)
at t.value (xmpp.js:461)
at oe._init (JitsiConference.js:297)
at new oe (JitsiConference.js:127)
at c.initJitsiConference (JitsiConnection.js:113)
日志文件(Jicofo.log),我发现了[警告]和[严重]
Jicofo 2020-05-15 20:05:23.771 WARNING: [22] org.jitsi.jicofo.FocusManager.log() No dedicated JVB MUC XMPP connection configured - falling back to the default XMPP connection
...
Jicofo 2020-05-15 20:05:24.335 SEVERE: [28] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for speakerstats.meet.myserver.com: XMPP error reply received from speakerstats.meet.myserver.com: XMPPError: service-unavailable - cancel
Jicofo 2020-05-15 20:05:24.337 SEVERE: [28] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for focus.meet.myserver.com: XMPP error reply received from focus.meet.myserver.com: XMPPError: service-unavailable - wait
Jicofo 2020-05-15 20:05:24.345 SEVERE: [28] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for conferenceduration.meet.myserver.com: XMPP error reply received from conferenceduration.meet.myserver.com: XMPPError: service-unavailable - cancel
...
Jicofo 2020-05-15 20:05:29.629 WARNING: [40] org.jitsi.jicofo.bridge.BridgeSelector.log() No pub-sub node mapped for jvbbrewery@internal.auth.meet.myserver.com/2671872e-fccb-49e9-866b-28813c831825
...
Jicofo 2020-05-15 20:05:29.651 INFO: [55] org.jitsi.jicofo.bridge.JvbDoctor.log() Scheduled health-check task for: jvbbrewery@internal.auth.meet.myserver.com/2671872e-fccb-49e9-866b-28813c831825
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.dom4j.io.SAXContentHandler (file:/usr/share/jicofo/lib/dom4j-1.6.1.jar) to method com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$LocatorProxy.getEncoding()
WARNING: Please consider reporting this to the maintainers of org.dom4j.io.SAXContentHandler
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
我找到了日志文件(jvb.log)[警告]
2020-05-15 20:05:24.645 WARNING: [22] Videobridge.start#906: No authorized source regexp configured. Will accept requests from any source.
我应该犯什么错误?
在此先感谢您的帮助!
*对不起,我的英语不好。
答案 0 :(得分:1)
经过更加仔细的分析,我得出的结论是,我没有等待(addEventListener
)CONNECTION_ESTABLISHED事件,并且对代码进行了一些修改...
我还删除了选项bosh: 'https://meet.jit.si/http-bind'
,因为它看起来已经过时了。
我包括了javascritps的依赖项:
<script src="https://cdn.jsdelivr.net/npm/strophe.js"></script>
<script src="https://cdn.jsdelivr.net/npm/strophejs-plugin-disco/lib/strophe.disco.js?v=1"></script>
具有修改的代码:
<script src="vendor/jquery/jquery-3.4.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/strophe.js"></script>
<script src="https://cdn.jsdelivr.net/npm/strophejs-plugin-disco/lib/strophe.disco.js?v=1"></script>
<script src="https://meet.jit.si/libs/lib-jitsi-meet.min.js"></script>
<script>
function onConnectionSuccess(){
const confOptions = {
openBridgeChannel: true
}
room = connection.initJitsiConference("abcdef", confOptions);
room.join();
room.myUserId();
console.log('CONNECTION_ESTABLISHED');
}
JitsiMeetJS.init();
JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
const options = {
serviceUrl:'https://meet.jit.si/http-bind',
hosts: {
domain: 'meet.jit.si',
muc: 'conference.meet.jit.si'
}
}
var connection = new JitsiMeetJS.JitsiConnection(null, null, options);
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
connection.connect();
</script>
请注意,在API documentation in item 4 of "Getting started"中,解释是等待CONNECTION_ESTABLISHED事件,然后才创建JitsiConference对象。 现在看来一切正常。
感谢大家的时间和奉献精神。
P.S。:我是StackOverflow的新手,我正在尽最大努力给出可以帮助社区的最佳答案。