2026-05-24 12:18:51 +08:00
2026-05-24 11:58:13 +08:00
2026-05-24 11:58:13 +08:00
2026-01-10 02:14:04 +08:00
2026-05-01 20:39:26 +08:00
2026-05-23 18:18:13 +08:00
2026-05-24 12:18:51 +08:00
2026-01-10 02:14:32 +08:00

这是一个专为 ComputerCraft (CC: Tweaked) 设计的视频播放器客户端。它依赖 Tom's Peripheralstm_gpu 进行画面解码与渲染,并通过远程服务器完成视频抽帧和音频转码,从而在 Minecraft 中播放网络视频。

1779595049579

主要功能

  • 在线转码:输入视频 URL 后,服务端异步创建任务,提取画面帧并生成 DFPWM 音频。
  • 任务重播:也可以直接传入已有 task_id,跳过重新提交任务的步骤。
  • GPU 渲染:使用 tm_gpu 解码并绘制每一帧图像。
  • 音频分轨播放:自动拉取主音频、左声道、右声道,并调用 speakerlib.lua 播放。
  • 前置预缓存:正式播放前先并发下载最多前 20 秒画面数据。
  • 边播边缓冲:播放过程中持续预取后续约 20 秒的帧包,并对失败请求自动重试。
  • 调试信息-debug 模式下会显示帧进度、实时 FPS、渲染耗时、当前分辨率和任务 ID。

🛠️ 环境要求

在运行此程序之前,请确保环境满足以下条件:

  1. 模组要求
    • CC: Tweaked
    • Tom's Peripherals
  2. 硬件要求
    • 一台 ComputerCraft 电脑。
    • 一个 tm_gpu 外设。默认会自动查找,也可以用 -gpu <id> 指定。
    • 与 GPU 相连的显示设备。
    • 扬声器外设,用于音频播放。
  3. 网络要求
    • 电脑需要可以访问默认 API 服务,或你自己指定的 -server 地址。

📥 安装

wget  https://git.liulikeji.cn/xingluo/computer_craft_video_play/raw/branch/main/play.lua

首次运行时,程序会在当前目录自动检查并下载以下依赖:

  • speakerlib.lua
  • cc_big_http.lua

🚀 使用方法

命令格式:

play <视频 URL 或 task_id> [options]

支持的参数:

  • -debug:开启调试信息显示。
  • -auto:根据 GPU 黑白分辨率自动计算合适的 Size
  • -h / -high:使用 rgb24 高彩模式,默认是 pal8 需要较大网络带宽。
  • -size <N>:手动指定 GPU Size范围 1-64,默认 64
  • -gpu <id>:指定要使用的 GPU 外设 ID。
  • -server <URL>:指定 API 服务地址,默认 https://newgmapi.liulikeji.cn
  • -help:显示帮助信息。

1. 播放新视频

直接传入视频链接:

play https://example.com/video.mp4

程序会先向服务端提交异步任务,然后轮询任务状态。服务端开始产出音频和视频帧后,客户端会先预缓存一段数据,再开始播放。

2. 通过 ID 重播

如果你已经有现成的 task_id,可以直接播放该任务:

play 20116713

程序不会重新创建任务,而是直接查询该任务状态并尝试播放。是否还能重播取决于服务端是否仍然保留这份任务数据。

3. Debug 调试模式

在 URL 或 ID 后添加 -debug

play https://example.com/video.mp4 -debug

Debug 信息说明:

  • 100/5000/3200:当前播放帧 / 总帧数 / 服务端当前已生成帧数。
  • A:20(50ms):最近一段时间内的平均 FPS 与平均单帧耗时。
  • L:15(66ms):最近一段时间内的最低 FPS 与最大单帧耗时。
  • %dx%d Size:%d:当前请求的视频分辨率和 GPU Size。

⚙️ 技术细节

  • API 服务端:默认连接 https://newgmapi.liulikeji.cn,可通过 -server 替换。
  • 提交参数:新任务固定以 20 FPS 请求服务端处理,并启用 pad_to_target = true
  • 分辨率策略
    • 默认先将 GPU Size 设为 64
    • 如果启用 -auto,程序会根据 GPU 的黑白尺寸估算更合适的 Size使目标分辨率尽量接近 640x360
    • 最终提交给服务端的是 GPU 当前实际像素宽高 wh
  • 预缓存机制
    • 播放前最多先下载 20 秒数据,也就是最多 400 帧。
    • 帧数据按每批 10 帧的 FramePack 二进制包获取。
  • 运行时缓冲
    • 播放时会持续保证当前帧后约 20 秒的缓存窗口。
    • 请求失败时会最多重试 3 次。
    • 过旧的批次会被直接丢弃,避免无意义回填。
  • 同步策略:根据播放时间计算理论帧位;当实际帧与理论帧偏差过大时会主动跳帧追赶。
  • 错误输出:任务状态变为 error 时如果为debug模式会在程序目录写出 error.log

常见问题

Q: 画面流畅,但声音卡顿或不同步? A: 扬声器播放本身受 Minecraft 服务器 TPS 和外设调度影响。play.lua 会根据播放时间自动追帧,偏差较大时直接跳帧以追上音频,但这不能消除服务端卡顿或扬声器端吞吐不足的问题。

Q: 如何获取任务 ID A: 视频播放完毕后,控制台会输出:The ID for playing the video is XXXXX 或直接查看屏幕左上角ID号

Q: 出现 Response is too large 怎么办? A: 这通常说明单次帧包超过了 ComputerCraft HTTP 的大小限制。优先尝试减小 -size,或者不要使用 -h 高彩模式。

Q: 播放过程中提示没有可用视频数据? A: 这表示缓冲持续跟不上播放速度。可以检查网络连通性,改用更低的 -size,或者切回默认 pal8 模式降低带宽压力。

Description
一个用于cc:t 和 Tom's Peripherals 播放视频的程序
Readme GPL-2.0 1.2 MiB
Languages
Lua 100%