最近由于项目需要,要集成一个简单实用的视频会议系统,找来找去,openmeetings2.0无疑是最佳选择,功能很齐全,但真的不简单,特别是那个开发语言:OpenLaszlo,很不习惯,没有可视化开发工具,只能靠xml编辑器(建议使用:spket),代码看起来很累,很累。
安装还算顺利,就是集成时遇到了问题,我是采用它本身提供的soap接口进行集成(网上有介绍)开始一切感觉还不错,但生成后的secure login url如:http://127.0.0.1:5080/openmeetings/main.swf8.swf?secureHash=918b87a39f6b9e67f1cf6dd2f852ef6b&language=11&lzproxied=solo&lc_SID=139032在浏览器中执行时进入房间后,白板无法找开,但这是我想要的最重要的功能,于是花了一天多的时间,尝试了各种方法,都不行,最后只能读源码,读了大半天的源码,最后终于发现了问题所在,现把解决方法分享出来:
问题主要出现:commonVideoComponentAdapter.lzx这个文件中
<handler name="oninit">
var t = this;
canvas.videoComp_lc.lc_switchMicMuted = function(publicSID, tMute) {
if ($debug) Debug.write("lc_switchMicMuted", publicSID, tMute);
canvas.thishib.switchMicMuted.setMute(publicSID, tMute);
};
canvas.videoComp_lc.lc_giveExclusiveAudio = function(publicSID) {
if ($debug) Debug.write("lc_giveExclusiveAudio", publicSID);
canvas.thishib.giveExclusiveAudio.setExclusiveAudio(publicSID);
};
canvas.videoComp_lc.as3ConnectionSuccess = function() {
//就是这里的问题,作者已经指出了如果parent不存在刚会报错,而使用soap登录是没有parent的
//FIXME: Throws a Null Pointer Exception if the parent view was already destroyed
t.parent.as3ConnectionSuccess();
}
</handler>
<method name="reconnectSuccess" args="isInterview">
if ($debug) Debug.write("Send reconnectSuccess to ",canvas.rtmp_lc_name);
canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "reconnectSuccess", [canvas.thishib.src, canvas.publicSID, hib.userobject, isInterview]);
//以下是增加的内容secure remote login
if(canvas.secureRemoteUserLogin){
if ($debug) Debug.write("as3ConnectionSuccess invoke: ","");
this.parent.as3ConnectionSuccess();//就是这个方法,使用soap登录是没有调用,导致白板无法显示
}
</method>
用了这几天,感觉openmeetings做为一个开源产品真的已经很不错了,但也因为其还在孵化阶段,难免bug会比较多,所以使用时要多多测试