BBB视频会议架构分享

两年前,曾经很深入的研究过Bigbluebutton,它本身自称适合小型的在线教育,表现出的性能也确实如此,并没有加入任何负载、组播或者P2P的操作,这样子的视频会议当然性能上面不会好到哪去。不过作为一个开源项目,他在对于技术的研究和使用上面,是无可挑剔的,建议时间较多,对视频会议由兴趣的同学,可以好好研究研究。

下面我将跟大家交流下我对BBB的了解,也是一款视频会议产品所需要的基本构成。主要分这么几个部分:1. BBB架构总览 2. 文档演示共享与批注功能的实现 3. 桌面共享功能的实现 4. 开源组件。

1. BBB架构总览

 

architecture_diagram_08图1

如果浏览器看不清图片的话,麻烦点击查看源文件。 每个简单的视频会系统,必然会分如下几个部分组成:网页前端(或客户端)、代理服务器、业务服务器、数据传输服务器、存储。 BBB也不外如是,我们结合图1进行相关说明吧。 1. BS架构的好处不用多说,尤其是对于广域网应用。如果用户想要登录使用,必然有一个入口认证。BBB除了包含网页之外,还有android客户端,他们都通过http协议进行登录验证。 2. nginx代理服务器,nginx作为一款牛叉的反向代理服务器,主要 用于分离IO与业务,提高效率,同时也能实现分流与负载均衡。它尤其适合处理静态文件、索引文件以及自动索引。 本系统中,并没有静态文件下载或访问之类的,同时在当台服务器的情况下,nginx代理动态业务反而会增加一次转发,降低效率。所以本系统中,nginx只用于代理网页flash和Android客户端的RTMPT请求。 3. Grails框架做业务服务器。Groovy是一门基于Java虚拟机的一种敏捷的动态语言,其代码最终被编译器转换成java字节码,并在JVM上运行。它从Python、Ruby中学到了许多脚本语言的特征。Grails基于Groovy编程语言,它其实就类似于将大家平常用到的J2EE中的Spring、Hibernate等框架集成,并基本借鉴Ruby On Rails框架的“约束胜于配置”、“领域驱动设计”等思想。说白了,你可以将Grails理解成一套新的J2EE框架。 所有的业务处理bbb-web,基本都是由Grails完成。 4. 数据传输服务器。视频会议中的数据传输主要有这么几种:音频、视频、文字、共享文本、共享批注、桌面共享数据。除音频外,这些数据都是采用rtmp协议传输,基于Red5流媒体服务器。Red5是一款开源的流媒体服务器,主要支持rtmp相关协议开发。最初是由暴雪团队开发维护,市面上支持rtmp协议的服务器就两个,red5和adobe的FMS,如果你不是财大气粗,那就老老实实选用开源的red5吧,还好性能也不差。当然实际应用场景并不是直接使用rtmp协议,而是rtmpt协议(RTMO Tunneling),广域网应用要打洞。 除此之外,Red5还支持Shared Object(共享对象),主要用于共享文本、共享演示文档和批注等功能。简单的说,远程共享对象,指的是所有客户端共享的数据。非常类似于我们编程时提到的引用,真正的数据保存在服务器中,所有客户端所操作的都是一份引用,当一个客户端修改,其他所有的客户端都会收到通知进行相应的修改。 5. 存储数据服务器。但凡是个系统,肯定离不开存储。BBB在这一方面继续保持开发人员的探索精神,除了Mysql保存部分数据意外,还引入了非关系型数据库redis(关系型数据库和非关系型数据库的区别请自己谷歌)。 以上就是BBB的5个组成部分。 眼睛厉害的读者可能会认为,上面不是没有讲到音频么?其实不仅是音频传输没有提到,包括视频会议中的控制与会议相关的流程,我都没有提到。它主要是基于SIP协议,并在软交换FreeSwitch的基础上实现了bbb与电话、软电话之间的互通。这一块涉及东西较多,重新整理这一块需要较多的时间,如果有人有兴趣的话,我再整理吧 看完上述总览,再看看下图,可能就会基本清晰了。

 

bbb_apps_overview_08

图2

2. 文档演示共享与批注功能的实现

大部分基于BS架构的视频会议系统或是教学系统,都必不可缺文档共享演示和批注功能。先上图。

uploading_presentation_08

图3

如果图3中的note看不明的话,看下面的补充吧。

1、 文档上传,这么什么可说的,http上传组件一大堆,nginx代理。

2、 文档转换与解析。视频会议中大多数的文档为word、ppt、excel、PDF、图片。BBB在这一块使用了很多开源组件,其中openoffice用来解析office文件,并将这些转成图片。ImageMagick用于图片处理,主要是图片格式转换。Ghostscript用于解析pdf,这些组件最后结合swftools,将用户上传的素材转换为flash文件(swf)。

3、 文档存储 。之前有提到,bbb中的redis主要用于文档共享方面的一些处理,主要是文档的转换进度。

4、 文档批注与多页切换。文档显示、批注、多页切换,其实就是基于之前提到的red5。所有用户打开的网页中直接显示flash数据,批注主要用red5的远程共享对象。

3. 桌面共享功能的实现

单纯的网页想抓取PC的桌面,并传输出去,并不是一件容易的事情。还好,java提供了Applet技术,它基于web环境,运行于客户端。这样视频会议就能抓取用户的实时桌面,并将其编码发送了。

这一块主要是编程方面的一些知识,直接上图吧,不明白的同学直接去github上抓取代码研究。

4. 开源组件

BBB在实现的过程中,使用了大量的开源组件。我也不挨个介绍了,直接搬上来,有兴趣的同学自己深入研究吧。

GhostScript(PDF解析工具)、Grails(类似J2EE开发框架)、ActiveMq(消息队列)、Image Magick(很牛的图像处理工具)、Nginx(超牛的反向代理http服务器)、Red5(基于Flash的流媒体服务器)、swf Tools(Flash实用处理工具)、OpenOffice、FreeSWITCH、Redis(非关系型数据库)、PopCorn.js(HTML5媒体框架)

 

参考资料:code.google.com/p/bigbluebutton

本文出自 商显技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uchar.cn/?p=254

posted on 2014-07-10 23:40  richardor  阅读(603)  评论(0)    收藏  举报

导航