1、Admin/Monitor API
用于向janus服务器查询一些和会话及句柄有关的信息,在查找媒体流层面问题时显得非常有用。目前Admin API只能用于信息查询不能与janus进行更多的交互(如强制删除会话),更多的交互还是得使用RESTful、Websockets等transport模块的API。该API只提供同步机制,如果你需要的是异步通知机制的话请使用janus的event handler。默认的根请求路径为/admin 。
该API接口默认是关闭的,你可以在相应的传输方式的配置文件中将其开启。例如在janus.transport.http.jcfg文件编辑admin部分。
该API接口的消息格式和transport API的非常相似,因此这篇文档只简略的提到不同之处。当你是用websockets方式时需要将“janus-admin-protocol”作为子协议替换janus API中的"janus-protocol"。
2、Admin API请求
2.1、通用请求
- info : 请求janus服务器的信息,和janus 的info API返回的结果一致,不需要秘钥即可请求;
- ping :一个简单的ping/pong机制,客户端可用该接口来链路检查及预测协议的路由时间,也是不需要秘钥即可请求;
2.2、配置相关请求
- get_status: 返回当前服务器能被Admin API动态修改的配置变量;
- set_session_timeout: 改变全局的会话超时时间;
- set_log_level: 改变日志等级;
- set_log_timestamps:使能或禁止在日志中添加时间戳;
- set_log_colors: 使能或禁止日志带颜色输出;
- set_locking_debug: 使能或禁止锁(互斥锁等)的实时调试,在遇到死锁时很有用;
- set_refcount_debug:使能或禁止引用计数的实时调试,在遇到janus内部结构体内存泄漏时使用;
- set_libnice_debug:使能或禁止libnice库的调试;
- set_min_nack_queue:改变NACK队列的最小值;
- set_no_media_timer: 改变没有媒体流的计时器值;
- set_slowlink_threshold: 改变线路质量阈值;
2.3、Token相关的请求
这部分请求只有在使能了token存储的机制之后才有效
- add_token: 增加一个有效tocken
- allow_token: 给与一个与插件使用相关的token;
- disallow_token:移除一个与插件使用有关的token;
- list_tokens: 列出现存的所有token;
- remove_token:删除一个token
2.4、会话相关的请求
- accept_new_sessions: 配置janus是否应该接受一个新的会话(当你任何时候想要清空一个janus实例使用这个非常方便—感觉很别扭)
- list_sessions:列出现存的active状态的会话;
- set_session_timeout: 改变会话超时时间;
- destory_session: 销毁一个会话;
2.5、句柄及webrtc相关的请求
- list_handles: 列出现存的active状态的ICE句柄;
- handle_info: 列出特定ICE句柄的所有信息。如果将plugin_only变量值设置为true则仅返回插件相关的信息,webrtc信息及状态均不会被包含在返回信息中。
- start_pcap: 开始将发送的RTP/RTCP包抓包保存成pcap文件;
- stop_pcap:停止抓包
- start_text2pcap:和start_pcap请求一样,但是保存为text文件
- stop_text2pcap:停止text2pcap抓包
- message_plugin:发送同步消息给插件。几乎所有插件都实现该请求用于优化该插件的资源管理。
- handup_webrtc: 挂断特定ICE句柄的PeerConnection;
- detach_handle:分离特定的句柄,和janus API的detach消息的功能一致;
2.6、事件句柄相关请求
- query_eventhandler: 发送一个同步请求给一个事件句柄;
- custom_event: 通过事件句柄发布一个自定义的外部事件。当第三方应用需要以简单的方式和janus内部产生的事件相关联时或者推送janus无法获得的信息时使用该接口。
2.7、自定义log信息请求
- custom_logline: 将第三方应用的log信息添加到janus的log输出或文件中。log等级可选。
2.8、工具类请求
- resolve_address: 用于判断janus是否可找到一个网址的DNS及对应的查询耗时。
- test_stun: 用于判断janus可否能连接上STUN服务器,获得从STUN服务器的响应信息及响应耗时。
3、Admin API语法规则
Admin API和Janus API所遵循的规则是一样的,即请求正确的路径或在请求正确路径时携带正确的session_id和handle_id。
《1》、全局请求 全局请求无需session_id和handle_id。包括2.1的通用请求,2.2的配置请求,2.3的Token请求,2.6的事件相关请求,2.8的工具类请求及accept_new_session、list_sessions请求。
例子:
POST /admin
{
"janus" : "list_sessions",
"transaction" : "<random alphanumeric string>",
"admin_secret" : "<password specified in janus.jcfg, if any>"
}
《2》、仅需要session_id的请求
如destory_session、list_handles。注意所以REST接口直接在POST的url中添加session_id就能实现这些请求,但是更通用的(适用于所有协议的)方法是在json消息中添加session_id字段。
例子:
POST /admin/12345678
{
"janus" : "list_handles",
"session_id" : 12345678,
"transaction" : "<random alphanumeric string>",
"admin_secret" : "<password specified in janus.jcfg, if any>"
}
《3》、需要session_id及handle_id的请求
这些请求包括handle_info,所有和抓包有关的请求、message_plugin、hangup_webrtc和detach_handle。
例子:
POST /admin/12345678/98765432
{
"janus" : "handle_info",
"session_id" : 12345678,
"handle_id" : 98765432,
"transaction" : "<random alphanumeric string>",
"admin_secret" : "<password specified in janus.jcfg, if any>"
}
4、抓包未加密的WebRTC媒体流
你可以开启或禁止抓包一个handle发送和接收的RTP及RTCP包。这个功能在调试时会显得非常有用。需要注意的是如果要进行录制最好使用janus_recorder工具而不是开启抓包(它能实现录制)。
例子:
开始抓包
POST /admin/12345678/98765432
{
"janus" : "start_pcap", // Use start_text2pcap for a text file instead
"folder" : "<folder to save the dump to; optional, current folder if missing>",
"filename" : "<filename of the dump; optional, random filename if missing>",
"truncate" : "<number of bytes to truncate packet at; optional, truncate=0 (don't truncate) if missing>",
"transaction" : "<random alphanumeric string>",
"admin_secret" : "<password specified in janus.jcfg, if any>"
}
停止抓包
POST /admin/12345678/98765432
{
"janus" : "stop_pcap", // Use stop_text2pcap if you started a text-based capture
"transaction" : "<random alphanumeric string>",
"admin_secret" : "<password specified in janus.jcfg, if any>"
}