19个版本 (12个破坏性更新)
0.13.0 | 2021年1月25日 |
---|---|
0.12.0 | 2020年4月1日 |
0.11.1 | 2018年8月1日 |
0.11.0 | 2018年6月19日 |
0.5.1 | 2017年11月17日 |
在Rust模式中排名第572
每月下载量316次
70KB
1.5K SLoC
janus-plugin-rs
用于创建Janus的Rust插件和事件处理程序的库。仍相对不稳定。
[dependencies]
janus-plugin = "0.13.0"
兼容性
目前与Janus版本 >= 0.10.9 兼容;Janus相对频繁地对插件API进行破坏性更改,因此预计此库需要更新和重新编译以使插件能够与新的Janus版本一起工作。
构建
需要Jansson本地库(Ubuntu: libjansson-dev
)来链接;已测试与版本 >= 2.5 兼容。
$ cargo build --all
测试
$ cargo test --all
基本用法
Janus期望动态链接插件作为库,然后在其上调用一个create
函数以返回一个具有各种函数指针的janus_plugin
结构体,当核心中发生与插件相关的事件时,Janus将调用这些函数指针。
这些绑定提供了一个接受插件元数据和一组Rust函数(extern C
)作为参数的build_plugin!
宏,它生成Rust版本的janus_plugin
结构体,以及一个定义create
函数以返回该结构的export_plugin!
宏。因此,要实现插件,您应该编写一些处理函数,然后像这样使用这些宏
use std::os::raw::c_char;
// helper macro for generating C-style strings from Rust string literals at compile time
macro_rules! c_str {
($lit:expr) => {
unsafe {
std::ffi::CStr::from_ptr(concat!($lit, "\0").as_ptr() as *const c_char)
}
}
}
extern "C" fn init(callbacks: *mut PluginCallbacks, config_path: *const c_char) -> c_int {
janus_info!("Plugin loaded!");
0
}
extern "C" fn destroy() {
janus_info!("Plugin destroyed!");
}
// ...other handlers omitted: see
// https://janus.conf.meetecho.com/docs/plugin_8h.html#details
const PLUGIN: Plugin = build_plugin!(
LibraryMetadata {
// The Janus plugin API version. The version compiled into the plugin
// must be identical to the version in the Janus which loads the plugin.
api_version: 15,
// Incrementing plugin version number for your own use.
version: 1,
// Human-readable metadata which Janus can query.
name: c_str!("My plugin name"),
package: c_str!("My plugin package name"),
version_str: c_str!(env!("CARGO_PKG_VERSION")),
description: c_str!(env!("CARGO_PKG_DESCRIPTION")),
author: c_str!(env!("CARGO_PKG_AUTHORS")),
},
init,
destroy,
// ...other handlers omitted: see
// https://janus.conf.meetecho.com/docs/plugin_8h.html#details
);
export_plugin!(&PLUGIN);
示例
以下是一些使用这些绑定的项目
依赖关系
~3–13MB
~124K SLoC