MapVideo
用物品展示框和地图,在 Minecraft 服务器里拼一面会播放视频的墙
MapVideo 让你像搭影院一样,用物品展示框 + 地图拼出任意大小的屏幕,播放本地视频、B 站视频或HTTP(S) 直链视频。声音通过 Simple Voice Chat 的临时语音组播放,附近玩家自动入组,停止后恢复原来的语音组。⬇ 下载 MapVideo-1.4.1.jar · 完整文档
为什么选择 MapVideo?
三种片源:本地 MP4、B 站 BV/链接、HTTP(S) 直链。
真正的游戏内屏幕:每个方块一个展示框、一张 128×128 地图,1×1 到 8×6(可配置)自由拼接。
最高 20 FPS:直接构造原版 Map 数据包,绕过 MapCanvas 每帧 16,384 次 setPixel,并只发送变化的矩形区域。
影院级声音:SVC 临时组 + Opus 高码率音频;音频是主时钟,画面主动追音频,不会为了画面去跳音频。
屏幕防破坏:展示框固定、无敌,拦截玩家破坏、爆炸、活塞和支撑墙破坏;只能 /mapvideo remove 删除。
防盗链直链:支持签名查询串、Referer、User-Agent、Cookie、自定义请求头;下载后缓存复用。
创世神式选区:木铲左键/右键两点选区,自动计算墙面、朝向和地图编号。
重启保留:屏幕、地图 ID、展示框 UUID 持久化到 screens.yml,重启自动补回缺失展示框。
<!-- 上传游戏内截图到 docs/screenshot.png 后取消下一行注释:  -->
环境要求
| 项目 | 要求 |
|---|---|
| 服务端 | Paper 或 Leaves 1.21.11 |
| Java | 21 或更高 |
| Simple Voice Chat | 必须安装:服务端插件 + 玩家客户端 |
| 视频格式 | MP4 / M4V / MOV,H.264 视频轨 + AAC 音频 |
| 内存/CPU | 建议至少 2 GB 空闲内存;视频解码是 CPU 密集型 |
安装
- 下载 MapVideo-1.4.1.jar,放入服务器 plugins/。
- 安装 Simple Voice Chat 服务端插件(玩家也需要装 SVC 客户端)。
- 重启服务器。
- 给玩家权限(默认 mapvideo.use / create / play 已开放)。
- 进入游戏,输入:
/mapvideo guide
快速开始
1. 创建屏幕
代码块/mapvideo guide
- 左键点击墙面:位置 1
- 右键点击对角墙面:位置 2
- 输入:
/mapvideo create livingroom
屏幕只会生成物品展示框,不会生成或破坏任何方块。墙面必须已经存在。
2. 播放本地视频
把视频放入:代码块
plugins/MapVideo/videos/
然后:
代码块
/mapvideo play livingroom demo.mp4
3. 播放 B 站视频
代码块/mapvideo play livingroom BV1GJ411x7h7
/mapvideo play livingroom ”[ MEDIA=bilibilibv ]BILIBILIBV号[ /MEDIA ]“
支持 b23.tv 短链;首次下载并缓存,后续直接复用。
4. 播放 HTTP(S) 直链
代码块/mapvideo play livingroom https://cdn.example.com/video.mp4
/mapvideo play livingroom https://cdn.example.com/video.mp4?auth_key=...&expires=...
支持防盗链站点:
yaml
url:
referer: "https://example.com/page"
user-agent: "Mozilla/5.0 ..."
cookie: "session=..."
headers:
X-Requested-With: "XMLHttpRequest"
修改后 /mapvideo reload,再重新播放。直链下载后会缓存;聊天/日志只显示 host + 文件名,不会泄露签名 token。
5. 控制播放
代码块/mapvideo pause livingroom
/mapvideo resume livingroom
/mapvideo stop livingroom
/mapvideo remove livingroom
命令
主命令:/mapvideo别名:/mv、/mapv
| 命令 | 说明 | 权限 |
|---|---|---|
| /mapvideo guide | 获得选区木铲 | mapvideo.use |
| /mapvideo create <ID> | 用当前选区创建屏幕 | mapvideo.create |
| /mapvideo remove <ID> | 移除屏幕和展示框 | 所有者/管理员 |
| /mapvideo list | 列出所有屏幕 | mapvideo.use |
| /mapvideo info <ID> | 尺寸、朝向、Map ID、状态 | mapvideo.use |
| /mapvideo play <ID> <文件|BV号|URL> | 播放本地/B站/直链视频 | mapvideo.play |
| /mapvideo stop <ID> | 停止并保留最后一帧 | mapvideo.play |
| /mapvideo pause <ID> | 暂停 | mapvideo.play |
| /mapvideo resume <ID> | 继续 | mapvideo.play |
| /mapvideo files | 列出本地视频 | mapvideo.play |
| /mapvideo version | 查看版本和作者 | mapvideo.use |
| /mapvideo stopall | 停止全部播放 | mapvideo.admin |
| /mapvideo reload | 重载配置 | mapvideo.admin |
权限
| 权限 | 默认 | 说明 |
|---|---|---|
| mapvideo.use | true | 选区、列表、查看、版本 |
| mapvideo.create | true | 创建/删除自己的屏幕 |
| mapvideo.play | true | 播放和控制自己的屏幕 |
| mapvideo.admin | op | 管理所有屏幕、stopall、reload |
主要配置
完整配置见插件目录 config.yml,常用项:yaml
screen:
max-width: 8 # 最大宽度(方块/展示框)
max-height: 6 # 最大高度
max-tiles: 48 # 单屏最大地图数
view-distance: 48 # 画面推送距离
protect-support-blocks: true
video:
default-fps: 20
max-fps: 20
auto-fps: true
max-frame-lag-ms: 120
loop: false
keep-aspect-ratio: true
audio:
enabled: true
volume: 100
cache: true
high-quality: true
bitrate-kbps: 96
bilibili:
enabled: true
quality: 64
auto-quality: true
cookie: ""
cache-folder: cache/bilibili
url:
enabled: true
referer: ""
origin: ""
cookie: ""
headers: {}
max-size-mb: 2048
cache-folder: cache/url
voicechat:
auto-join: true
join-radius: 32
group-type: NORMAL
restore-previous-group: true
category-id: mapvideo
category-name: "MapVideo 视频"
group-name-format: "MapVideo-%s"
修改后执行 /mapvideo reload。voicechat.category-* 建议重启服务器生效。
性能与网络
代码块整图上限(未压缩) ≈ 地图数 × 帧率 × 16 KB / 秒
4×3 @ 20 FPS ≈ 3.8 MB/s / 每个观众
4×3 @ 10 FPS ≈ 1.9 MB/s / 每个观众
MapVideo 做了三层优化:
- tile 去重:完全没变化的地图不发。
- 变化矩形:只发变化像素的最小包围矩形,客户端立即应用。
- 原版 zlib:Minecraft Netty 自动压缩,客户端自动解压,不需要客户端 Mod。
常见问题
没有声音?- 服务端和玩家客户端都需要安装 Simple Voice Chat。
- 玩家要在 join-radius 内,且没有被手动切到别的语音组。
- 检查 SVC 客户端音量分类 MapVideo 视频。
- 视频没有 AAC 音轨时不会创建语音组。
- 可能是番剧、付费、地区限制或需要 Cookie。
- 在 bilibili.cookie 填入 SESSDATA=...。
- 确认服务器能访问 api.bilibili.com 和 B 站 CDN。
- 配置正确的 url.referer、url.user-agent、url.cookie。
- 部分站点还需要 url.origin 或自定义 url.headers。
- 修改后 /mapvideo reload,再重新播放。
- 确认 video.auto-fps: true、max-fps: 20。
- 降低源视频分辨率,或让 B 站使用 auto-quality。
- 大屏幕/多人服务器建议 8–10 FPS。
- 纯 Java JCodec 比 FFmpeg 更吃 CPU;这是软件解码的限制。
- 玩家攻击、爆炸、活塞、支撑墙破坏会被拦截。
- 只能 /mapvideo remove <屏幕ID> 删除。
- 不支持。目前只支持 MP4/M4V/MOV 的 H.264 + AAC,以及 B 站普通投稿。
更新日志
1.4.1
- 修复部分卡顿BUG。
- /mapvideo version / about 显示作者和版本。
1.4.0
- 新增 HTTP(S) 直链播放。
- 支持防盗链 Referer / User-Agent / Cookie / 自定义请求头。
- 支持签名查询串,直链缓存复用。
- 新增 /mapvideo version。
- 清理无用配置:voicechat.enabled、video.videos-folder、config-version。
1.3.0
- 超大屏幕网络优化:地图 tile 去重 + 变化矩形补丁。
- 差异只计算一次,不再为每个观众复制整屏像素。
1.2.2
- 同步策略改为音频主时钟:只跳视频帧/视频关键帧,不移动音频。
1.2.1
- 修复 YUV 直通渲染导致的负色/反色问题。
- 修复视频卡在第一帧的问题。
1.2.0
- B 站 BV/链接播放、缓存、WBI 兜底。
- 自适应清晰度 + 高质量音轨分离下载。
- 20 FPS、音画同步、快速地图包。
1.1.0 / 1.0.0
- 地图墙、选区、屏幕持久化、展示框保护。
- SVC 临时语音组、Opus 高码率音频。
技术栈
- Paper API 1.21.11
- Simple Voice Chat API 2.5.0(编译),测试 2.6.27
- JCodec 0.2.5(H.264/AAC 解码)
- Gson 2.11.0
- Java 21