janus

Wesley13
• 阅读 923

janus-gateway 会话与消息/VideoRoom插件

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

janus-gateway 是啥?janus是一个基于webrtc的网关,下文我都以janus来替代janus-gateway。其中使用比较广泛的就是videoroom插件,也就是SFU 服务。与janus videoroom定位类似的开源软件有licode,kurento...

janus 传输层

janus支持多种传输协议,如http,https,ws,wss,mqtt,nanoMsg 等。客户端与janus交互的时候,可以选择其中的一种协议。后续我主要以 ws/wss来描述janus session,handle之间的关系

Transport/Session/Handle

  • 可以通过ws或者wss端口与janus建立websocket链接。
  • 客户端在websocket链接建立成功后,需要调用create命令创建Session
  • 每个webscoket链接上可以创建多个Session
  • 创建完成Session后,可以调用基于Session相关的接口,例如keepalive,claim,info、debug等相关指令.
  • Handle 需要在Session上创建,每个Handle,需要绑定janus的一个插件,例如 videoroom,sipre 等插件。
  • 有了Handle,就可以调用插件的通用方法,例如 videoroom插件,当创建了一个videoroom插件的handle 后,客户端就可以调用create(创建会议),exist,list等与webrtc不相干的方法。
  • 每个Handle,可能会绑定一个内部的ICE Handle,从客户端的角度就是一个PeerConnection对象。绑定了ICE Handle的Handle,就可以发起媒体流相关的操作了。
  • 每个Handle与ICE Handle是一一对应的。 使用完后,虽然可以释放 ICE Handle(调用hangup),重新与一个新的ICE Hanle进行绑定,但是不建议这样做,建议直接Detach Handle后,创建新的Handle
  • 以videoroom 插件为例:
    • 为绑定ICE handle 的Handle,可以调用create,destroy,list,exist,rtp_forward 等方法。
    • 一个handle 要不成为Publisher,要不成为Subscriber,通过调用join方法实现。

消息

janus消息主要分为一下几类

  • 同步请求消息
  • 异步请求消息
  • 事件通知消息

如果和区分同步消息和异步消息: janus里面的消息协议并没有字段来标识消息的类型,主要看一个成功时的应答客户端是收到success还是ack

同步请求消息

  • 服务器成功应答时,回复success消息,如果有内容,则包含在data字段中。
  • 如果失败,则返回 error消息。
  • 一般非插件消息,基本都是同步消息,例如session的create,创建handle的attah
  • 同步消息的应答通过transaction字段来匹配事务。客户端必须设置transaction字段的内容,服务器会在success消息返回。

异步消息

  • 客户端发送一个异步消息的时候, 服务器收到以后,会先回复一个ack消息,ack中的transaction值和客户端的请求相同。
  • 服务器把异步消息推送到异步队列处理。处理完成后,回复 一个 event消息,并且携带plugindata内容。插件的执行结果封装在plugindata里面。包含transaction字段,用于客户端匹配事件
    • 插件如果执行失败,在plugindata.data 里面会包含error,error_code

事件消息

  • 与异步消息的event类似,只不过没有transaction字段。是服务器因为其他事情而产生的消息。

client

推荐2个 golang janus 客户端api

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这