搜索历史
清空
暂无搜索历史
论坛热搜
1
Jenny — 有趣的模拟女友模组|珍妮模组
热
3
上古老物 冒险者传说 by WhiteSword
新
5
洛心斗罗-福利|公会据点战|武魂||抽奖|最终版
2
乌托邦探险之旅3.2
热
4
幻虚斗罗V1.5
6
水星迫降——在未知的世界中挣扎
登陆 注册 QQ登陆
快捷导航
查看: 161|回复: 0

[模组分享] VideoLib (视频库)-MOD模组

[复制链接]

5021

主题

60

回帖

1万

积分

龙❁妻

Rank: 8Rank: 8

经验
10302 EP
金粒
5181 粒
绿宝石
20 块
爱心
0 点
发表于 2025-8-10 19:50:44 | 显示全部楼层 |阅读模式
VideoLib (视频库)Github |相关wiki |源站链接支持: fabric一个在 Minecraft 中实现视频播放的库

自从 Minecraft 诞生以来,其引擎一直…可以说是非常有趣。它似乎缺少许多标准功能,比如 GPU 网格缓存,在这种情况下,就是简单的视频播放。这个模组旨在弥补这一点,为模组制作者提供一个干净的 API,以在其模组中实现预渲染视频播放。

*注意:这个模组本身不提供任何功能。它只是其他模组可以利用的库。

设置

一旦设置好 Maven 依赖关系,就会提供一个安装指南。值得注意的是,默认实现需要用户系统中安装 VLC 媒体播放器。

使用方法

要使用 VideoLib,您必须获得一个 `VideoManager` 的引用。这个视频管理器是与该库所有交互的基础,对于模组的功能至关重要:

VideoManager videoManager = VideoLib.getInstance().getVideoManager();Copy已复制!

`VideoManager` 可以用于创建多个 `VideoPlayer`。由于视频播放的性能开销,每个视频播放器都使用唯一的 ID 在视频管理器中注册。只有视频管理器可以创建新的 `VideoPlayer` 实例。

VideoPlayer videoPlayer = videoManager.getOrCreate(new Identifier(\"mymod\", \"my_video_player\"));Copy已复制!

每个 `VideoPlayer` 都有一个 `getTexture()` 函数,返回一个 Minecraft 纹理标识符,可用于实体渲染器(或任何其他非图集纹理使用的地方)。这个纹理会为视频的每一帧自动更新,并且可以像任何其他纹理一样应用。

Identifier texture = videoPlayer.getTexture();
VertexConsumer consumer = vertexConsumers.getBuffer(RenderLayer.getEntityCutout(texture));
// render geometry however you wantCopy已复制!

视频指示

有许多方法可以指示视频播放,但大多数都与 `VideoHandle` 有关。视频指示本质上是指向存储在外部位置的视频文件的指针,无论是在本地磁盘还是在互联网上。要创建 `VideoHandle`,您需要一个 `VideoHandleFactory`。这可以从 `VideoManager` 获取。

需要注意的是,并非所有视频指示都适用于所有视频管理器。请确保只使用视频管理器工厂提供的视频指示。(大多数 API 函数已经做到了这一点)。

VideoHandleFactory factory = videoManager.getVideoHandleFactory();Copy已复制!

`VideoHandleFactory` 提供了两种主要功能:`getVideoHandle(Identifier)` 和 `getVideoHandle(URL)`。

-  `getVideoHandle(Identifier)` 需要视频文件的资源标识符来自任何模组。这个文件必须在你的资源包的 `videos` 文件夹中。(例如:`mymod:videos/myvideo.mp4`)
-  `getVideoHandle(URL)` 需要指定视频的 URL。这可以是在互联网上或本地文件系统上找到视频的 URL。(例如:`链接`)。这个文件必须可以通过 `GET` 请求直接访问。不允许使用谷歌云盘链接和其他用户必须导航到下载页面的服务。

然后可以将视频指示传递给视频播放器以进行播放。

VideoHandle idHandle = factory.getVideoHandle(new Identifier(\"mymod\", \"videos/myvideo.mp4\"))
VideoHandle urlHandle = factory.getVideoHandle(new URL(\"http://mywebsite.com/myvideo.mp4\"));
videoPlayer.getMediaInterface().play(idHandle);Copy已复制!

_媒体播放器还提供了 `play()` 的重载版本,直接接受标识符和 URL。这只是创建视频指示并播放它们的快捷方式。_

播放控制

视频播放器提供一组接口,允许对媒体播放进行更精细的控制:`MediaInterface`、`ControlsInterface` 和 `CodecInterface`。可以按如下方式访问这些接口:

MediaInterface mediaInterface = videoPlayer.getMediaInterface();
ControlsInterface controlsInterface = videoPlayer.getControlsInterface();
CodecInterface codecInterface = videoPlayer.getCodecInterface();Copy已复制!

这三个接口提供了多种必要功能,如 `pause`、`play` 和 `setTime`。关于这些 API 功能的详细信息可以在 javadoc 中找到。

事件

VideoLib 提供了许多在视频播放过程中在特定事件触发的回调。无论它们在本机代码中的触发位置如何,所有事件监听器都在 Minecraft 客户端线程上调用。

VideoEvents events = videoPlayer.getEvents();
events.onBuffering(e -> {
    LogManager.getLogger().info(\"缓冲中!\");
})Copy已复制!

和播放接口一样,事件函数在 javadoc 中有详细说明。

许可证说明

VideoLib 的默认实现依赖于 VLCJ,它是在 GNU GPL 下许可的。这意味着 `vlc` 包中的所有内容都是在 GPL 下许可的。然而,存储库的其余部分,只要不直接依赖于 `vlc` 包,都是根据 MIT 许可进行的。此外,`vlc` 包不被视为公共 API 的一部分,并且可能会在以后移动到一个单独的 Gradle 项目中。

计划功能

-  音频控制。
-  标准化支持的格式。
-  当 VideoLib 初始化失败时(通常是由于缺少本机文件),向用户发出警告。
-  渲染实用函数。

来自Modrinth所有游戏版本1.18.2所有类型fabricInitial Betavideolib-0.1.0.jar下载0.1.0#Releasevideolib-0.1.0-sources.jar下载0.1.0#Release展开版本: 0.1.0支持游戏: 1.18.2类型:FabricRelease下载次数: 339全部版本

markdown_parsed

文章类型:收录

layui.use([\'form\'], function(){
var form = layui.form;
});

游客,如果您要查看本帖隐藏内容请回复
VideoLib
楼主 2025-8-10 19:50:44 回复 收起回复
小僵尸论坛感谢有你~
回复 论坛版权

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则



介绍

我的世界(Minecraft)小僵尸论坛
收录了来自各地的我的世界(MC)爱好者们的各种资源

须知: 切勿滥用举报,任何与举报相关的信息必须属实!

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

官方

新浪微博 腾讯微博 微信公众号 投稿规则 版权声明 捐助我们

官方QQ①群: 291907844 (点击加群)
官方QQ②群: 421312192
官方QQ③群: 528726532

我的世界(Minecraft)小僵尸论坛

新会员

QQ|Archiver|手机版|小黑屋|Minecraft(我的世界)小僵尸论坛 |网站地图

GMT+8, 2026-2-12 02:47 , Processed in 0.222614 second(s), 133 queries .

快速回复 返回顶部 返回列表