#屏幕捕获 #屏幕录制 #捕获 #屏幕 #录制 #图形

程序+库 scap

现代、高性能的 Rust 屏幕捕获库。跨平台。

3 个版本

0.0.5 2024年5月25日
0.0.4 2024年5月25日
0.0.3 2024年2月23日

#63 in 视频

每月下载 27 次

MIT 许可证

5MB
2K SLoC

Github banner

一个用于高质量屏幕录制的 Rust 库,利用原生操作系统 API 以实现最佳性能:macOS 上的 Apple 的 ScreenCaptureKit,Windows 上的 Graphics.Capture API 和 Linux 上的 Pipewire

🚧 WIP. 不适用于生产使用,API 正在迭代。

Discord


特性

  1. 跨平台支持:Windows、Mac 和 Linux!
  2. 检查支持和使用权限。
  3. 使用原生操作系统 API 进行屏幕捕获。
  4. 不同的捕获模式:显示或窗口。

贡献

我们发现 Rust 的屏幕捕获工具大多数性能不佳、过时或非常特定于平台。这个项目是我们试图改变这一点的一个尝试。贡献、PR 和问题都受到热烈欢迎!

如果您想进行开发,这里有一个启动指南

  1. 克隆仓库并使用 cargo run 运行它。
  2. lib.rs 中探索 API 和库代码。
  3. 特定于平台的代码在 winmaclinux 模块中。
  4. main.rs 中有一个小程序,用于开发和测试。

使用

use scap::{
    capturer::{Point, Area, Size, Capturer, Options},
    frame::Frame,
};

fn main() {
    // Check if the platform is supported
    let supported = scap::is_supported();
    if !supported {
        println!("❌ Platform not supported");
        return;
    } else {
        println!("✅ Platform supported");
    }

    // Check if we have permission to capture screen
    // If we don't, request it.
    if !scap::has_permission() {
        println!("❌ Permission not granted. Requesting permission...");
        if !scap::request_permission() {
            println!("❌ Permission denied");
            return;
        }
    }
    println!("✅ Permission granted");

    // Get recording targets (WIP)
    let targets = scap::get_targets();
    println!("🎯 Targets: {:?}", targets);

    // Create Options
    let options = Options {
        fps: 60,
        targets,
        show_cursor: true,
        show_highlight: true,
        excluded_targets: None,
        output_type: scap::frame::FrameType::BGRAFrame,
        output_resolution: scap::capturer::Resolution::_720p,
        source_rect: Some(Area {
            origin: Point { x: 0.0, y: 0.0 },
            size: Size {
                width: 2000.0,
                height: 1000.0,
            },
        }),
        ..Default::default()
    };

    // Create Recorder
    let mut capturer = Capturer::new(options);

    // Start Capture
    capturer.start_capture();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).unwrap();

    // Stop Capture
    capturer.stop_capture();
}

许可证

此仓库中的代码在 MIT 许可证下开源。然而,它可能依赖于不同许可的依赖项。请咨询它们的文档以获取确切条款。

贡献者

Pranav Joglekar
Pranav Joglekar

💻
Rohan Punjani
Rohan Punjani

💻
Siddharth
Siddharth

💻
NiiightmareXD
NiiightmareXD

💻
MAlba124
MAlba124

💻
Anubhav Singhal
Anubhav Singhal

💻

鸣谢

此项目建立在 @svtlabs@NiiightmareXD 的出色工作之上。

依赖项

~6–49MB
~761K SLoC