74

Janus WebRTC Server研究

 5 years ago
source link: https://studygolang.com/articles/15517?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言

未编译及测试,直接裸看Janus WebRTC Server代码。

WebRTC本身只支持点对点,群聊只能客户端通过发多路音视频数据给别的客户端,对于客户端压力非常大,所以无法支持更多人的群聊,而且有些NAT是无法通过点对点对连的,所以需要一个中转服务器来中转,经过初步考察有kurento、 licode、 janus三个主要的开源项目,其中又以janus的star最多,所以就先拿这个项目研究一下,我个人是有点想写个golang版本来替代。

janus github地址: https://github.com/meetecho/janus-gateway

janus原理

初看了一下janus源码,大概原理如下:

janus使用ICE模拟WebRTC客户端与真实的WebRTC客户端进行交换candidate然后进行连接,当收到客户端数据后,转交给plugin比如 janus_videoroom.c 进行处理,videoroom把RTP音视频包和RTCP包转发给同一个room的所有订阅者。

janus本身只是做一个被调用的框架,使用plugin来实现具体的业务逻辑,比如videoroom、textroom等等。

janus内置了http或者websocket服务,html目录下的html+js例子通过http来调用janus的具体功能组成业务逻辑,这些例子稍作修改也可以支持websocket。

janus本身使用了大量的第三方开源库,比较核心的是ICE使用 libnice ,SRTP使用 libsrtp 等等。

另个开源的WebRTC server: licode 也同样使用了libnice和libsrtp,只不过licode是c++写的所以又加了一层c++封装来使用libnice。

未完待续...


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK