什么是 janus 网关
janus implementing the means to set up a WebRTC media communication with a browser, exchanging JSON messages with it, and relaying RTP/RTCP and messages between browsers and the server-side application logic they're attached to
webrtc 本来就是实现音视频 P2P 通信的,为什么还需要网关???
janus 本身只做3件事情,其它功能全部通过plugin 实现
- janus 实现了 webrtc 中的 RTP、RTCP、SDP、DLTS、ICE 等协议,这样他就可以和浏览器建立连接和通信。你可以把它看做另外一个浏览器。
- 实现了信令通道,浏览器可通过 websocket ,http rest 等方式和 janus 交换 json 数据。webrtc 本身没有实现信令(signaling) , 信令需要开发者自己实现。信令就是通信双方沟通通信细节的一个过程。
- 转发 RTP, RTCP 包。
EchoTest, VideoRoom 等应用全部通过Plugin 方式实现,你可以基于janus 规范灵活的编写自己的业务插件。
janus官方提供了基于C++ 的android sdk,但好像有bug,比较复杂。还有一个 janus-gateway-android 但接口很老了,好几年不更新了。所以最好还是自己实现一遍信令。
怎么实现??其实我们主要处理的就是 android 端的 P2P 通信的建立以及和 janus 的信令交互。模拟一遍官方 js demo 的信令通信过程就行了。
android 端信令我们也是通过 websocket 实现。把上图右边的信令消息自己实现一遍就行了。
webrtc P2P 建立的流程要清晰,上图要理解清楚。思路理清剩下的就很好实现了。
DEMO: https://github.com/lesliebeijing/JanusAndroidDemo
参考1:https://blog.csdn.net/Java_lilin/article/details/104007291
参考2:https://github.com/benwtrent/janus-gateway-android
参考3:https://zhuanlan.zhihu.com/p/149324861?utm_source=wechat_session