Janus系列文章三 API使用指南 VideoRoom API
这是一个为 Janus 实现视频会议 SFU(选择性转发单元)的插件,即音频/视频路由器。这意味着该插件实现了一个虚拟会议室,同行可以随时加入和离开。这个房间基于发布/订阅模式。每个对等点都可以发布他/她自己的实时音频/视频提要:此提要成为其他参与者可以订阅的房间中的可用流。这意味着该插件允许实现几种不同的场景,从简单的网络研讨会(一个演讲者,几个观察者)到一个完全网状的视频会议(每个对等点向所有其他人发送和接收)。
VideoRoom 插件文档
Janus API 通讯协议分类
查看已安装的通讯协议
游览器get请求 https://xxx.com:8089/janus/info
以下表明当前我们使用的Janus支持websocket和http,
Janus还支持其它的一些通讯协议(如:RabbitMQ、MQTT、Nanomsg 和 UnixSockets API),这个需要自己在安装部署Janus的时候指定。
"transports": {
"janus.transport.http": {
"name": "JANUS REST (HTTP/HTTPS) transport plugin",
"author": "Meetecho s.r.l.",
"description": "This transport plugin adds REST (HTTP/HTTPS) support to the Janus API via libmicrohttpd.",
"version_string": "0.0.2",
"version": 2
},
"janus.transport.websockets": {
"name": "JANUS WebSockets transport plugin",
"author": "Meetecho s.r.l.",
"description": "This transport plugin adds WebSockets support to the Janus API via libwebsockets.",
"version_string": "0.0.1",
"version": 1
}
},
由于http是Janus默认设置的协议同时也更适合我们来演示API的使用,接下来我就用http来调用Janus的各个API。
Janus API 的会话和事务机制
事务
Janus给客户端到服务器的调用制定了事务机制为了保证一个会话的多个API调用过程中的隔离性、一致性、原子性和持久性。
Janus的事务机制是通过调接口的时候传递一个transaction字段来实行的。
transaction字段用来表示一个会话编号,此编号是一个具有唯一性的字符串,可以是纯数字也可以是大小写字母加数字的组合。
会话
Janus的会话机制并不是HTTP下的(cookie + 服务端侧 session)的会话,因为Janus是多协议的,可能使用的是websocket、rabbitmq之类的非HTTP协议通讯,所以不可能使用http session来表示用户会话。
然而Janus是用janus访问路径下加 /sessionid 组成一个新路径的形式表示用户会话或者叫用户会话链路。
Janus API 使用流程
Janus的API是分路径层次的:
8089/janus
这个路径就属于janus API的根路径,我们称为janus API根路径
。
我们可以访问这个路径下的API来获取janus服务器的一些信息,比如我们上面用到的(janus/info)。
在我们需要使用一些要区分用户的API的时候就要进行创建会话的操作。
建立用户会话的操作是要在8089/janus这个路径层次上请求的。
通过创建客户端与服务器的会话API我们会得到一个session id。
通过请求8089/janus/session id
路径下的API(我们称为会话路径
),我们就可以操作与用户会话相关的一些操作了(比如:附加插件)。
此时你就是在你自己的专属会话路径下来进行服务器沟通了。
使用插件的话需要在用户会话的基础上建立插件的会话。
我们最终与插件的会话路径会是:8089/janus/session id/plugin session id
所以我们要使用janus的videoroom插件的话需要三步才能建立插件的会话。
使用videoroom插件创建一个新的视频房示例
建立用户会话
curl --location --request POST 'https://192.168.188.143:8089/janus' \
--header 'Content-Type: application/json' \
--data-raw '{
"janus": "create",
"transaction": "gDkWrifU2Q73"
}'
{
"janus": "success",
"transaction": "gDkWrifU2Q73",
"data": {
"id": 6421975129252707
}
}
附加到插件
curl --location --request POST 'https://192.168.188.143:8089/janus/6421975129252707' \
--header 'Content-Type: application/json' \
--data-raw '
{
"transaction": "gDkWrifU2Q73",
"janus":"attach",
"plugin":"janus.plugin.videoroom"
}'
{
"janus": "success",
"session_id": 6421975129252707,
"transaction": "gDkWrifU2Q73",
"data": {
"id": 537399609431468
}
}
创建一个新的视频房
curl --location --request POST 'https://192.168.188.143:8089/janus/6421975129252707/537399609431468' \
--header 'Content-Type: application/json' \
--data-raw '{
"janus": "message",
"body": {
"request":"create",
"room": 12345678,
"permanent":false,
"description":"myroomFirst",
"secret":"1234",
"pin":"1234",
"is_private": true
},
"transaction": "m2D5tESZ3fwb"
}'
{
"janus": "success",
"session_id": 6421975129252707,
"transaction": "m2D5tESZ3fwb",
"sender": 537399609431468,
"plugindata": {
"plugin": "janus.plugin.videoroom",
"data": {
"videoroom": "created",
"room": 12345678,
"permanent": false
}
}
}
Janus VideoRoom接口文档
VideoRoom 插件文档