#recording #capture #frame #bevy #events #frame-buffer #camera

nightly bevy_capture_media

基于事件的Bevy引擎截图与录制

2个版本

0.0.2 2022年8月12日
0.0.1 2022年8月12日

#559图像

Apache-2.0

44KB
972 代码行

bevy_capture_media

基于事件的Bevy图像和视频捕获

Bevy tracking Crates.io docs.rs

特性

  • 跟踪任意数量的摄像头进行录制
  • 分发事件以控制录制生命周期
  • 为每个录制器保留过去X帧的帧缓冲区(其中X是用户提供的任何Duration
  • 使用功能选择要录制的格式
  • wasm 支持

支持的格式

  • PNG截图
  • GIF录制
    • GIF录制功能正常,但需要工作

路线图

  • 透视相机支持
  • 更多格式
  • 更多控制帧走私
  • 截图水印
  • 改进的Web性能

简单示例

use std::time::Duration;
use bevy::prelude::*;
use bevy_capture_media::{MediaCapture, BevyCapturePlugin};

pub fn spawn_cameras(
    mut commands: Commands,
    mut capture: MediaCapture,
) {
    let camera_entity = commands
        .spawn_bundle(Camera2dBundle::default())
        .id();
        
    // The tracking ID (1357) is arbitrary, but uniquely identifies this tracker
    capture.start_tracking_camera(1357, camera_entity, Duration::from_secs(5));
}

pub fn take_screenshot(
    input: Res<Input<KeyCode>>,
    mut capture: MediaCapture,
) {
    if input.just_released(KeyCode::RShift) {
        // If you have many cameras, consider storing their IDs
        // in a resource
        capture.capture_png(1357);
    }
}

fn main() {
    app::new()
        .add_plugin(DefaultPlugins)
        .add_plugins(bevy_capture_media::BevyCapturePlugin)
        .add_startup_system(spawn_cameras)
        .add_system(take_screenshot);
}

https://user-images.githubusercontent.com/2522620/184448446-8cd5214b-81fa-41a3-bdbe-156412cc99cc.mp4

贡献

欢迎所有建议、问题和拉取请求。任何贡献都必须与该存储库兼容。

我想添加一个新格式!

是的!这很棒!任何新格式都需要满足以下清单才能被包括

  • 编码必须在纯Rust中完成。没有编译的C库,没有绑定到其他语言的库。
  • 格式必须对Web目标表现良好 - 如果有很好的理由绕过这一点,格式仍可能被接受。
  • 默认情况下,格式和任何依赖项必须是可选的并需要用户选择。
  • 不接受受专利限制或封闭的格式,除非此项目和任何最终用户都有免费和宽泛的许可证。

依赖项

~36–52MB
~728K SLoC