1 个不稳定版本
0.1.0 | 2024年4月1日 |
---|
#294 in 视频
15KB
237 代码行
Bevy H264
此插件是Bevy中播放.h264视频的一个非常基础的解决方案。请注意,这只能播放.h264视频,不支持b帧。没有音频支持!
这是对Bevy Video的延续
建议使用ffmpeg进行视频编码,并使用以下参数:-bf 0和x264-param slices=1
ffmpeg -i test.mkv -c:v libx264 -bf 0 -x264-params slices=1 test.h264
您的ffmpeg必须使用libx264编译
用法
使用以下方式创建组件
let decoder = H264Decoder::new(
&mut images, // ResMut<Assets<Images>>
asset_server.load("test.h264"), // The video file to load
false, // Repeat?
1.0 / 60.0, // Frame Time. This will play the video at 60 FPS
);
使用以下方式获取图像句柄
decoder.get_render_target();
建议将解码器组件插入到将使用渲染目标句柄的材料中的实体上。如果从文件加载视频,则插入H264DecoderLoading组件
H264DecoderLoading {}
由于图像更改只有在材料被可变访问后才会反映在材料上,因此请读取事件
fn modify_materials(
query: Query<&Handle<StandardMaterial>, With<H264Decoder>>,
mut update_ev: EventReader<H264UpdateEvent>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
for update in update_ev.read() {
if let Ok(asset_handle) = query.get(update.0) {
let _ = materials.get_mut(asset_handle);
}
}
}
并将系统添加到您的应用中
.add_systems(Update, modify_materials.after(decode_video))
通过在解码器实体上插入H264DecoderPause组件来暂停视频。如果decoder.repeat == false,则在视频结束时H264DecoderPause将被插入。
这完全不进行硬件加速。如果您想达到60+ FPS,请确保以发布模式编译
关于h264的专利和许可
以下内容不是法律建议,只是我对该主题的研究结果。h264编解码器与其相关的专利很多,在此列出 https://www.reddit.com/r/linux/comments/10v3op0/which_year_should_we_treat_h264_patents_as/
MPEG LA还要求在您将视频与应用程序捆绑销售时获得许可 https://www.via-la.com/licensing-2/avc-h-264/avc-h-264-license-fees/ 编码器本身随Windows和Mac一起发货,因此应用程序应关注的唯一费用是第2节标题。如果您发货不超过12分钟,则无需支付版税费。否则,费用为每标题0.02美元。我假设销售您的应用程序的1份副本算作1个“标题”。
如果您决定将带有h264视频的商业应用程序进行发货,我强烈建议您进行研究并联系律师
依赖项
~38–74MB
~1.5M SLoC