`
hjwromantic
  • 浏览: 26672 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

jplogic 开发案例(FMS流媒体服务集成) 之 视频会议管理 (多人互动呼叫-应答模式视频会议含共享白板)

 
阅读更多

由本人之前有做过类似多客户端视频语音回话项目,视频语音应用模式是呼叫--应答模式,也很多网友问我类似视频语音的功能如何实现!现在本人特此写这个博客与大家分享这其中的项目经验!当然也可以进入群【376447127】与我交流。

现在开源的视频会议项目也有不少,如OpenMeetings、BigBlueButton等,大家可以去学习学习!像这些开源视频会议的项目必不可少需要选择一个合适的流媒体服务器。目前比较流行的流媒体服务器有RED5、FMS,个人比较喜欢FMS!RED5是开源的,而FMS是收费的!在真实的应用环境下,选择一款合适的流媒体服务器至关重要!RED5和FMS二者各方面比较而言,FMS的各方面性能要优于RED5,毕竟是收费的!但是如果你的应用是使用java开源的话,RED5会提供一些开发流媒体应用API,方便你流媒体应用的编码!当然你也可以让RED5服务和你的WEB应用服务器合二为一,也就是将RED5集成到你的WEB项目中,但真实应用场景下一般都是将流媒体服务和应用服务二者分开,达到负载分担作用!大家可以根据自己项目中的需要选择合适方案即可!

下面就由我跟大家介绍一下本人在jplogic上做的视频会议管理功能实现,这些功能虽然看起来小,但是这些功能可以和很多业务结合在一起!视频会议应用功能的应用场景也很广泛,比如现在远程诊疗、远程视频会议、远程视频面试等场景,也是很多企业寻求的突破,像这些业务实现以不仅仅在于将程序功能实现就行的,即使视频会议等功能实现了,也会因为其他的原因造成系统无法上线!比如,视频语音数据在网路传输效率、带宽问题都需要考虑,这方面带来的硬件成本也是相当大的!那么我们也可以尽量在程序上做一些参数调整,视频传输更流畅、或者更清晰等,比如流媒体H.265编码设置等

言归正传,下面开始介绍jplogic上实现视频会议相关功能,首先,我们需要建立几张和视频会议相关的基础表,最为流媒体信息的存储。下面给出几张系统截图,大家就明白这其中设计。

创建房间:


在进行视频语音会话的时候首先需要记录视频通话的内容信息,这个可以看成是一个视频会议的房间,设置该房间的一些属性等等,当然这些都可以根据项目具体情况做调整即可,同时可以关联到其他的业务数据,达到既定的业务需求!在这里就不多说了。

本人在案例中视频语音通讯模式是呼叫--应答模式,也可以叫请求--相应模式。也就是呼叫方发送视频语音对话的请求,应答方需要在既定的时间内响应视频语音的请求,否则需要重新请求呼叫。这种交互模式在很多项目都会应用得上,大家可以借鉴一下。

呼叫方进入视频会话房间,选择参与者呼叫列表,请求与某某人进行视频通话,系统会自动发送一个消息给被呼叫对象,应答对象需要在既定的时间内响应呼叫,否则重新呼叫,如下图:

呼叫方视频呼叫:


当既定时间(30秒)内响应请求,则出现如下呼叫应答双方的视频会话通道(由于本人在时同一台笔记本上做的测试,会出现摄像头等设备占用的请求,所以在两个页面中会出现黑屏影像,其实这就相当于模拟通话双方的请,当然也可以多人同时进行视频语音通话),如下图:

呼叫方影像


呼叫方发出呼叫请求之后,在被呼叫对象的操作界面上会受到一则由呼叫方发出的呼叫请求提示,被呼叫对象根据提示即可相应呼叫方的呼叫请求。如下是其中一个应答列表界面:

应答列表


被呼叫方影像


这样就可以进行视频语音的通话了,至于视频的清晰度,传输速率等方面的设置可以通过设定视频采集的参数等方面来设置,比如视频编码方式H.265(不过如果想让Flex支持这个设置,需要将Flex SDK进行升级,否则在低版本的不支持这一编码支持),这里就不多说了!

下面开始介绍视频会议的第二项重要功能那就是共享白板以及多人在线聊天功能,相信大家也在项目中用过类似的功能,下面是本人jplogic上做的一个多人在线聊天、共享白板功能,仅供各位网友参考(下面白板的界面可以根据项目用户体验的需要做调整,本人仅作一个界面参考):

呼叫方白板主界面


被呼叫方白板主界面


大家可以看出以上两个白板界面对比可以看出,一方在白板上做的操作结果可以在另外一方的白板界面上同步显示,这就是共享白板的要求,其实共享文档的原理也类似,

下面我简单介绍一下共享文档实现原理:提交需要共享文档(pdf、office文档、txt文件)----->调用通过第三方软件将各个类型的文本文件转化成swf文件记录----->在Flex中通过同步swf文件路径,这样就可以在一方共享的文档在另外一方的界面同步显示需要共享的文件。在这里我就不多说了。

说了这么多废话相信大家也会知道其中的原理,像这样的功能我们需要使用到FMS提供了“远程共享对象”(SharedObject)的功能,可以让多个Client端的flash应用共享同一个全局对象,并且当客户端中的任何一个改变该对象时,系统会自动将该对象回发到FMS服务器,同时FMS服务器也会将该对象重新广播到所有客户端。说得通俗一些就是就是比如A客户端在白板上所画的线,B客户端在他的电脑上面也可以看到。传统的实现方法,是A画图的操作通过网络传送给B,双方各自调用画图的代码。程序实现还是相对比较复杂。但在Flex中实现这一功能就相对简单多了,这也是很对开源视频会议项目中的共享电子白板功能了。

基础代码如下:

初始化连接

			//初始化连接
			private function initConn(appServerUrl):void
			{
				nc = new NetConnection();
				nc.connect(appServerUrl);
				nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
			}

创建共享对象

			private function onNetStatusHandler(evt:NetStatusEvent):void
			{
				if(evt.info.code=="NetConnection.Connect.Success")
				{
					//**************************第一个贡献对象begin*************************
					//创建一个远程共享对象
					so = SharedObject.getRemote("JplogicFmsRemoteSO",nc.uri,true); //将生成*.fso文件再Fms中
					//远程对象同步事件的监听
					so.addEventListener(SyncEvent.SYNC,onSyncHandler);
					so.connect(nc);
					//**************************第一个贡献对象end*************************
				}else{
					Alert.show("jplogic连接Fms服务失败,错误信息码:"+evt.info.code);
				}
			}
同步监听
			// 实现了发送消息(将消息添加到远程共享对象并更新远程共享对象的属性值),如果有多个客户端连接到该远程共享对象,
			//这时就回触发远程共享对象的同步事件,通过同步事件处理方法就可以将远程共享对象中的数据同步到客户端。
			private function onSyncHandler(evt:SyncEvent):void
			{
                                      //dosomething..
			}

更新、新增共享对象属性

//更新远程共享对象中的属性值
				so.setProperty("共享对象属性名",obj);
以上三个步骤基本可以完成一个基于远程共享对象的功能。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics