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