janus搭建的web音视频sdk

写这篇博客的出发点:

之前本人所在的公司是一家大型物联网企业,因为智能家居这块业务做的相对较好,部门独立上市。客户在购买了公司的产品后,遇到问题只能电话或者视频模式与客服在线沟通,无法满足客户对于复杂场景的精确描述(比如使用屏幕共享或白板功能等)。产品经理考虑到对接第三方音视频会议(比如声网)的成本问题,提出公司内部需要自己搞一套web音视频会议。当时公司内部的前端开发人员无人了解这一块的知识,本人喜欢挑战性的业务,主动承担起这块业务的能力建设,并最终完成web音视频sdk从0~1的开发,给公司弥补了这块能力的欠缺。整个过程处于边学习边开发的过程,加上公司加班较严重,没法仔细整理知识体系,现在离职之后终于有时间可以系统复盘总结一下。

基础知识 WebRTC

百度百科中是这样解释WebRTC,WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。

WebRTC定义了客户端实时通信的行为,只是停留在客户端这一层,而没有限制服务端的行为,比如实际开发中信令(可以理解为传递音视频流的接口数据)的传输。WebRTC可以通过调用浏览器api实现对本地音视频信息的获取并实现一对一的传输,而对于多人互动这个场景,需要借助流媒体服务器实现。

WebRTC 流媒体服务器

目前对于音视频会议、在线教育这类产品的解决方式是使用 WebRTC + WebRTC流媒体服务器。

比较有名的开源流媒体服务器,如 Janus、Medooze、Mediasoup、Licode(OWT)、Jitsi等等,这些服务器都有各自的特点,需要根据业务需要自行选择。

如果你团队能力比较强,可以做底层开发,那么建议你使用 Mediasoup。因为 Mediasoup 不关心应用层,它关注的是底层数据如何高效的流转,代码简洁、高效,性能极佳。

如果你们要做的业务种类比较多,变化比较快,那建议你选择使用 Janus 作为流媒体服务器。将你的业务做成一个插件放到 Janus上很快就能实现你们的业务需求。

如果你们的业务变化不大,除了追求性能外,还需要录制、推流之类的功能,那么你可以选择使用Medooze,它可以很好的满足你们的需求。

Licode 之所以名气比较大,是因为它推出的时间比较早。而 OWT 是 Licode 的一个变种,它在 Licode上实现了 SFU 功能。看一下 Licode 代码你就会发现,Licode 实现了一套完整的音视频会议系统,对于这样一套系统它的实现非常复杂。如果你的团队没有音视频方面的开发人才的话,可以考虑Licode,将它搭建出来之后就可以直接使用了。但如果你有业务变化想修改它就太麻烦了。

Jitsi 上层是使用 Java 语言开发的,但底层也是使用的 C/C++ 语言。它通过 JNI 来实现Java与 C/C++之间的通信。在 2018 年有机构做过一次性能评测,当时 Jitsi 表现比较差强人意,不知现在是否已经有了改进。

本人在对比了这些流媒体服务器之后,最终选择了Janus。Janus采用了插件的架构设计方案。这种方案非常适合于有多种业务模型或业务经常发生变化的公司或项目,很符合本人当时的需要。另外 Janus 支持多种消息传输协议,考虑到公司流媒体部门服务端有使用经验,可以减少学习成本。

Janus

理解Janus,首先要理解房间这个概念。每个音视频会议都有一个房间,所有用户的互动都在这个基础之上。前端调用Janus库,流媒体服务端也需要启一个Janus服务,前端和服务端使用协议进行连接(比如本人使用的websocket),建立好连接之后,前后端采用信令(可以理解为接口)的方式进行数据传输。简单理解,就是前端调用Janus的函数,传指定参数信息给服务端端Janus,服务端对信息进行处理后,通过回调的方式回传给前端。这样一种方式,其实就是Janus房间插件机制。

对于Janus端详细解读,可参考如下:
官方文档:https://janus-legacy.conf.meetecho.com/docs/JS.html  
中文翻译文档: https://blog.csdn.net/weixin_42471170/article/details/114644994
源码解析:https://www.avdancedu.com/5ae5ee2f/
https://avdancedu.com/bb906872/
https://avdancedu.com/d7281c13/
csdn: https://blog.csdn.net/cgs1999/article/details/94572207
https://blog.csdn.net/cgs1999/article/details/94436089
网络质量等可参考:https://blog.csdn.net/weixin_41821317/article/details/117261117

前端sdk架构

整个架构采用的是:WebRTC + Janus + rollup

同时提供一个简单使用sdk的演示demo。

根据业务需求,对功能api端定义,本人是反复对比声网和腾讯音视频的api设计。针对回调信息,采用发布订阅的方式提供给开发者。

本人会在整理sdk源码之后,给出整体设计思路,详见github链接。

此篇博客先大概引出整体思路,先补充一些基础知识。本人也是刚开始写博客,小伙伴们有问题可以私信我哦。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值