【Janus学习分享】事件处理

Janus事件处理支持的插件

GElF(Generalized Extensible Log Format)是一种日志格式,用于结构化日志的记录和传输。它具有可扩展性和灵活性,可以适应各种不同的日志需求。GElF主要用于日志收集和分析,特别适用于大规模分布式系统的日志管理。

nanomsg是一个轻量级的消息传递库,提供了可靠的消息传输和通信模式。它具有简单而高效的设计,适用于构建可扩展的分布式系统和网络应用程序。

RabbitMQ是一个开源的消息代理,实现了AMQP(Advanced Message Queuing Protocol)协议。它提供了可靠的消息传递机制,支持多种消息模式,如点对点、发布/订阅和请求/响应。RabbitMQ适用于构建可靠的消息队列和异步通信系统。

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专门用于物联网设备之间的通信。它具有低带宽和低功耗的特点,适用于资源受限的设备和网络环境。MQTT广泛应用于物联网领域,如传感器数据采集、远程监控和设备控制等场景。

WebSocket,它是一种在Web应用程序中实现双向通信的协议。WebSocket允许服务器主动向客户端推送数据,而不需要客户端发起请求。适用于实时通信、即时聊天和实时数据更新等场景

Janus事件处理机制

Admin/Monitor API :

可以控制和监控 Janus,其中包括查询与正在进行的 PeerConnections 状态(ICE/DTLS 状态、统计信息等)相关的信息的方法。虽然管理API功能强大且有用,但它是一个基于轮询的协议:这意味着必须自己查询信息,如果想及时了解正在发生的事情,则必须定期执行此操作。因此,在处理应用程序中运行的许多会话和句柄时,会带来一些问题,因为可能不会立即知道会话/句柄对应的信息,或者其中哪些属于同一场景(例如,在同一 VideoRoom 的上下文中建立的所有对等连接)。

event插件:

event处理机制是janus的插件,其模块化特性易于拓展。启用event时,janus和其它一些插件会产生一些特定的实时事件:然后将这些事件传递给所有订阅了该事件的ecent插件,event插件可根据需要处理这些事件。他们可能会选择以某种方式存储这些事件,聚合、转储或处理它们,格式化并将它们发送到外部应用程序,等等。这实际上取决于这些event插件用于什么。

Janus将生成与以下相关的事件:

  • 会话相关事件(例如,会话创建/销毁等);
  • 处理相关事件(例如,句柄附加/分离等);
  • JSEP 相关事件(例如,got/sent offer/answer);
  • WebRTC相关事件(例如,PeerConnection的启动/关闭,ICE更新,DTLS更新等);
  • 媒体相关事件(例如,媒体启动/停止流动、数据包/字节统计信息等);
  • 由 Janus 核心发起的通用事件(例如,Janus 启动/停止);
  • 由插件(特定于内容的插件本身)发起的事件;
  • 由传输发起的事件;
  • 外部应用程序通过管理 API 发起的事件。

事件格式

Janus生成的所有事件都是JSON对象,有一个共享的标头和一个自定义主体,该主体将取决于事件本身的类型(在某些情况下是子类型)。

事件通用格式:

{
        "emitter" : 		"<标识事件源的字符串,如果配置的话 (可选)>",
        "type" : 			<数值事件类型标识符>,
        "subtype" : 		<数值事件子类型标识符 (特定与事件的类型; 可选)>,
        "timestamp" : 	    <时间戳>,
        "session_id" : 	    <唯一会话标识符, 如果 提供/可用 (可选)>,
        "handle_id" : 	    <唯一句柄标识符, 如果 提供/可用 (可选)>,
        "opaque_id" : 	    "<用户提供-不透明标识符, 如果 提供/可用 (可选)>",
        "event" : {
             <事件主体, 根据事件类型自定义>
        }
}

例如,与正在创建的新会话相关的事件如下所示:

    {
        "emitter": "MyJanusInstance",
        "type": 1,
        "timestamp": 1582211094846980,
        "session_id": 3439056127855429,
        "event": {
            "name": "created",
            "transport": {
                "transport": "janus.transport.http",
                "id": "0x60400002c2d0"
            }
        }
    }

事件类型

主类型:

类型

活动类别

1

会话相关事件

2

处理相关事件

4

外部事件(通过管理 API 注入)

8

JSEP 事件(SDP 提供/答案)

16

WebRTC状态事件(ICE/DTLS状态、候选者等)

32

媒体事件(媒体状态、报告等)

64

插件发起的事件(例如,来自会声室的事件)

128

传输发起的事件(例如,WebSocket 连接状态)

256

核心事件(服务器启动/关闭)

事件类型不会单调增加,因为在内部,它们被表示为掩码:这允许事件处理程序插件在需要时仅订阅其中的一部分,而不是全部订阅。

事件类型决定了主体的语法,例如JSEP事件的主体(类型)将与媒体事件(类型)非常不同。

即使在相同的类型中,某些事件的格式也可能发生变化:例如,例如WebRTC状态消息包括了ICE,DTLS,本地及远端候选地址等不同的通知。出于编写事件接受者处理程序的便利,使用subtype来区分事件内部的子类型。subtype只在type类型为256(core)、16(WebRTC)、32(media)中使用。

子类型:

Core(256)子类型

1

服务器启动

2

服务器关闭

WebRTC(16)子类型

1

ICE state ICE状态

2

Local candidate 本地候选人

3

Remote candidate 远程候选人

4

Selected pair 选定的对:是指在ICE过程中,根据网络条件和候选地址之间的连接质量评估,选择的用于建立实时通信的最佳候选地址对

5

DTLS state DTLS 状态

6

PeerConnection状态 对等连接状态

媒体(32)子类型

1

Medium state 媒介状态:表示Janus实例与媒体服务器之间的连接状态

2

Slow link 慢速链接:当Janus实例与媒体服务器之间的网络连接速度较慢或带宽较低时,就会出现慢速连接。

3

Report/stats 报告/统计

————————————————————————————————

编辑日志

2023年8月14日

首次上传Wiki,内容有误及时联系,后续勘误内容以日志为准

————————————————————————————————

参考链接

————————————————————————————————

作者信息

Auther:North Tan

Email:a814658803@gmail.com;jiangbei_tan@163.com

Blog:www.bigwisdom.top

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值