引言
我之前有介绍过Kurento Media Server (kms),这是一个web-rtc的核心服务,包括webrtc 接入、转化、过滤等功能。有了这个玩意,web-rtc基本就能搞了,但是用起来很麻烦,自己还需要添加很做的扩展应用,才能完成一个产品。
比如我们希望建立一个在线会议室。现在数据流的连接功能已经完成了,可以实现一对一的对话了。那是在一个会议室中,还存在建立会议室,管理会议成员(踢人,禁言),设置密码,转发视频,录制视频、查看在线人数,查看通讯质量,录制会议 等管理会议室的功能。自己开发的话,工作量还是不小的。那么可以采用OpenVidu。OpenVidu底层还是采用的Kurento Media Server (kms),也是这一帮子人开发的。同时在功能上做了很多的扩展,基本上开箱即用。原作者的目标是以一种低侵入的方式,使你的现有应用,快速的集成web-rtc功能。
会议室组件
上面讲到的,管理会议室的这一套东西包括两个组件:
OpenVidu 部署(OpenVidu deployment):可以是 OpenVidu CE、Pro、Enterprise 任意版本的部署;这就是传说中kms服务器,也是OpenVidu的核心。他作为OpenVidu的信令服务器和流媒体处理中心。官方提供了 docker 镜像,以方便部署。也可以自己独立部署(不建议)。
应用服务端(Application server):调用 OpenVidu 部署提供的 REST API,为应用客户端提供服务,可以开发成上文的提到会议室管理端;
应用客户端(Aplication client):可以是浏览器、移动端或桌面应用,使用 openvidu-browser.js SDK 与 OpenVidu 部署通信。
4个基础概念
- 会话(Session):就是一个虚拟的会议室,很多人可以加入一个会议室,并共享实时视频/音频。如果我说要创建一个会议,实际上就是创建一个回话。
- 连接(connection):连接,加入会议室的每一个人就是一个连接。如果我说要踢掉会议中的某一个人,实际上就是关掉该用户的连接。
- 令牌(token):每个人要表明自己身份,比如我是张山,我是李四,就必须要在连接中添加一个属性。这个属性就是就是token。通常token不会仅仅是张三、李四这么简单,可能会重名,token可能是很复杂的一串字符,如来自于中国重庆沙坪坝区xxx学校2级黄砖用户–李四(有效时间5分钟)
- 流(stream):流是视频/音频信息。参会者可以发布流,同一会议室的其他参与者可以订阅该流。
标准会议的流程
1、在服务端创建会议室,即创建一个session
2、在服务端创建连接Connection,并加入session。有几个人就创建几个连接。每一个连接都有一个token的属性。
3、分发token到客户端。用户拿到token就可以加入会议了。
4、用户使用token加入会议室。
5、一旦用户加入会议,就可以共享屏幕,或者分享摄像头了,推送一个视频/音频流。其他的用户可以选择看/不看他共享的视频流/音频流
开发客户端有两种模式
你可以用OpenVidu搞好的网页客户端,也可以利用sdk开发完全订制的的客户端。
- 网页组件(web
component):图省事就用这种,在你的网页应用中嵌入OpenVidu组件就完事了。(一个js,几个div)。缺点就是,只能用在web应用上,你说要在android
app上怎么用,只有使用sdk了。还有就是网页组件的布局和功能是固定的,你要想加个点赞的功能就不行了。 - UI组件(SDKs):这种方法可以实现你想象中的任何界面。就是开发起来麻烦点。你需要去啃文档,查手册,做实验。
本系列整体安排
本系列的前4章,采用Ubuntu搭建一个简单的OpenVidu,可以通过两个网页实现实时的视频/音频通讯。
第5-7章将搭建一个聊天室,采用android app做为客户端。
第8-10章,将实现录像,过滤器等功能