17个版本

0.4.1 2022年9月27日
0.4.0 2022年9月22日
0.3.4 2022年9月13日
0.3.0 2021年12月6日
0.1.5 2020年3月13日

#141 in 视频

每月48次下载

GPL-2.0许可协议

1MB
29K SLoC

Rust OBS包装器

Build Status Wrapper Docs

围绕OBS API的安全包装,用于创建OBS源、滤镜和效果。包装器相当不完整,未来可能会看到API的重大变化。

此仓库还包括在/plugins文件夹中使用包装器创建的插件。

插件

文件夹 描述
/scroll-focus-filter 一个OBS滤镜,可以将当前聚焦的X窗口放大
/rnnoise-denoiser-filter 一个用于去除麦克风背景噪音的OBS滤镜

使用方法

在您的Cargo.toml文件中添加以下部分,将module-name>替换为模块名称

[dependencies]
obs-wrapper = "0.4"

[lib]
name = "<module-name>"
crate-type = ["cdylib"]

创建插件的过程

  1. 创建一个实现Module的结构体
  2. 创建一个将存储插件状态的结构体
  3. 实现模块所需的功能
  4. 在模块的load方法中启用已启用的功能
use obs_wrapper::{
    // Everything required for modules
    prelude::*,
    // Everything required for creating a source
    source::*,
    // Macro for registering modules
    obs_register_module,
    // Macro for creating strings
    obs_string,
};

// The module that will handle creating the source.
struct TestModule {
    context: ModuleContext
};

// The source that will be shown inside OBS.
struct TestSource;

// The state of the source that is managed by OBS and used in each trait method.
struct SourceData;

// Implement the Sourceable trait for TestSource, this is required for each source.
// It allows you to specify the source ID and type.
impl Sourceable for TestSource {
    fn get_id() -> ObsString {
        obs_string!("test_source")
    }

    fn get_type() -> SourceType {
        SourceType::FILTER
    }
}

// Allow OBS to show a name for the source
impl GetNameSource<SourceData> for TestSource {
    fn get_name() -> ObsString {
        obs_string!("Test Source")
    }
}

// Implement the Module trait for TestModule. This will handle the creation of the source and
// has some methods for telling OBS a bit about itself.
impl Module for TestModule {
    fn new(context: ModuleContext) -> Self {
        Self { context }
    }

    fn get_ctx(&self) -> &ModuleContext {
        &self.context
    }

    // Load the module - create all sources, returning true if all went well.
    fn load(&mut self, load_context: &mut LoadContext) -> bool {
        // Create the source
        let source = load_context
            .create_source_builder::<TestSource, SourceData>()
            // Since GetNameSource is implemented, this method needs to be called to
            // enable it.
            .enable_get_name()
            .build();

        // Tell OBS about the source so that it will show it.
        load_context.register_source(source);

        // Nothing could have gone wrong, so return true.
        true
    }

    fn description() -> ObsString {
        obs_string!("A great test module.")
    }

    fn name() -> ObsString {
        obs_string!("Test Module")
    }

    fn author() -> ObsString {
        obs_string!("Bennett")
    }
}

安装

  1. 运行cargo build --release
  2. /target/release/<module-name>.so复制到您的OBS插件文件夹(/usr/lib/obs-plugins/
  3. 插件应在OBS内部可用

许可协议

obs-studio一样,obs-wrapper采用GNU通用公共许可证v2.0。

有关详细信息,请参阅LICENSE

依赖关系

~0.6–3MB
~60K SLoC