#gpu #buffer #capturing #front #api #capture #bindings

nvfbc

用于从NVIDIA GPU捕获前缓冲区的NVIDIA API NVFBC的安全绑定

6个版本

0.1.5 2024年1月8日
0.1.4 2024年1月8日
0.1.3 2023年11月18日
0.1.2 2022年6月23日

#80 in 视频

BSD-2-Clause

155KB
4K SLoC

nvfbc

该库包含对NVIDIA的NVFBC的安全FFI

支持的GPU

由于使用的是专有NVIDIA API,支持的设备仅限于NVIDIA GPU。官方上,NVFBC API仅支持GRID、Tesla或Quadro X2000+ GPU。通过设置魔法私有数据,为GeForce GPU提供非官方支持,类似于https://github.com/keylase/nvidia-patch/blob/master/win/nvfbcwrp/nvfbcwrp_main.cpp

支持的捕获类型

目前仅支持CUDA和系统(RAM)捕获类型。

示例:保存图像。

use nvfbc::{SystemCapturer, BufferFormat};
use nvfbc::system::CaptureMethod;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut capturer = SystemCapturer::new()?;

    let status = capturer.status()?;
    println!("{:#?}", capturer.status()?);
    if !status.can_create_now {
        panic!("Can't create a system capture session.");
    }

    capturer.start(BufferFormat::Rgb, 30)?;

    let frame_info = capturer.next_frame(CaptureMethod::Blocking)?;
    println!("{:#?}", frame_info);

    let image = image::ImageBuffer::<image::Rgb<u8>, &[u8]>::from_raw(
        frame_info.width,
        frame_info.height,
        frame_info.buffer,
    ).unwrap();
    image.save("frame.png")?;
    println!("Saved frame to 'frame.png'.");

    capturer.stop()?;

    Ok(())
}

未来工作

对配置的支持目前有限,以保持代码简单和简洁。未来的版本将添加更多配置选项。

许可证:BSD-2-Clause

依赖项