基于 Rust 开发的跨平台 VCD 3.0 与 VCD 2.0 交互式光盘播放器,无需配置旧版 Windows 或虚拟机,即可在现代 Windows、macOS 与 Linux 系统上直接播放。
VCD 3.0 是 20 世纪 90 年代末在传统 VCD 视频播放基础上扩展出的多媒体格式,增加了基于页面的交互能力。
与普通的线性视频 VCD 不同,VCD 3.0 光盘通常包含:
- 编译后的交互页面文件(
.CHM),包含页面排版与可点击热区 - 8 位调色板索引图像(
.YBM) - 页面流程控制脚本与跳转逻辑
- MPEG-1 格式音视频(
.DAT) - 背景音乐与按键音效(
.WAV) - 卡拉 OK 点歌及其他互动逻辑
原版播放软件依赖旧版 Windows 专有运行时与组件,在现代操作系统上无法直接运行。vcd30player 通过解析光盘底层文件格式并重写运行时,在现代系统上直接还原其交互播放能力。
- 光盘结构与启动识别:自动识别 VCD 3.0 目录规范,解析
AUTORUN.CLS与ENREACH.CLS启动配置,确定光盘首页与开场视频配置。 - 复合交互页面:解析
<COMPHTML>/.CHM二进制页面文件,支持页面图层排版、多边形与矩形热区交互、页面跳转表以及覆盖图层(Overlay)合成。 - 调色板图像渲染:解码
<YUVBMP>/.YBM8 位索引图像为 RGBA 纹理,支持色度抽样与 Alpha 通道透明度合成。 - VCDSCRIPT 脚本引擎:内置协程虚拟机,支持变量运算、条件分支(
IF...THEN...ELSE)、子程序调用(GOSUB)、伪随机数(CALL RAND)、按键等待(CALL IRKEY)与动画延时。 - 卡拉 OK 与多媒体调度:支持 MPEG-1 视频(
.DAT)、循环背景音乐(BGSOUND)、按键音效(.WAV)以及卡拉 OK 播放列表操作指令。
- 白皮书 PBC 状态机:解析
LOT.VCD(位置查找表)与PSD.VCD(播放序列描述表),支持PlayList、SelectionList与EndList交互流程。 - 菜单渲染:支持
/SEGMENT/ITEMxxxx.DAT静态高分辨率菜单帧解码,以及 MPEG-1 动态交互式视频菜单回放。 - 遥控器与键盘输入:支持多位曲目编号输入、2 秒超时自动确认、回车确认、物理音轨寻道与专属 PBC 返回按键。
- 播放模式识别:自动区分 VCD 2.0 PBC 交互光盘与 VCD 1.0 纯线性流媒体光盘,并支持模式切换。
- 入口点索引:解析
ENTRIES.VCD入口点列表,时间码按MM:SS.FF格式展示。
- 音视频分离与同步:支持 CD-XA 扇区解复用与基于 PTS 时间戳的音视频同步,画面保持 4:3 显示比例。
- 原生跨平台:基于 Rust 编写,无外部老旧运行时依赖,直接运行于 64 位 Windows、macOS 与 Linux。
| 功能分类 | 具体功能特性 | VCD 1.0 / 1.1 | VCD 2.0 (标准 PBC) | VCD 2.0 (扩展 PBC-X) | VCD 3.0 (互动版) | Super VCD (SVCD) |
|---|---|---|---|---|---|---|
| 光盘识别 | 目录规范与文件结构自动探测 | ✅ | ✅ | ✅ | ✅ | 🟡 (仅探测) |
系统信息总表解析 (INFO.VCD) |
✅ | ✅ | ✅ | ✅ | 🟡 (仅头部) | |
播放入口点与章节索引 (ENTRIES.VCD) |
✅ | ✅ | ✅ | ✅ | ❌ | |
互动启动配置解析 (AUTORUN.CLS) |
➖ | ➖ | ➖ | ✅ | ➖ | |
| 音视频解码 | CD-XA 扇区解复用 (Mode 2 Form 2) | ✅ | ✅ | ✅ | ✅ | ❌ |
| MPEG-1 视频流回放 (352×288 / 352×240) | ✅ | ✅ | ✅ | ✅ | ❌ (MPEG-2) | |
高清静态画面解码 (SEGMENT/ITEMxxxx.DAT) |
➖ | ✅ | ✅ | ✅ | ❌ | |
| MPEG-1 Audio Layer II 音频流解码 | ✅ | ✅ | ✅ | ✅ | ❌ | |
| 左右声道伴奏/原唱实时切换 | ✅ | ✅ | ✅ | ✅ | ❌ | |
| 静态画面段伴音频流同步回放 | ➖ | ✅ | ✅ | ➖ | ❌ | |
独立音效与背景音乐 (.WAV / BGSOUND) |
➖ | ➖ | ➖ | ✅ | ➖ | |
| 播放控制 | 线性音轨顺序回放与曲目导航 | ✅ | ✅ | ✅ | ✅ | ❌ |
白皮书交互状态机 (PlayList / SelectionList / EndList) |
➖ | ✅ | ✅ | 🟡 (兼容层) | ❌ | |
播放时长限制 (ptime) 与选单重播 (loop_count) |
➖ | ✅ | ✅ | ➖ | ❌ | |
等待延时 (wtime) 与超时自动推进 |
➖ | ✅ | ✅ | ➖ | ❌ | |
| 遥控器数字键缓冲选歌与 2 秒超时确认 | ✅ | ✅ | ✅ | ✅ | ❌ | |
| 专属 PBC 状态与选单层级返回按键 | ➖ | ✅ | ✅ | ➖ | ❌ | |
| 图形与交互 | 复合页面与图层排版 (<COMPHTML> / .CHM) |
➖ | ➖ | ➖ | ✅ | ➖ |
8 位调色板图像解码与 Alpha 混合 (.YBM) |
➖ | ➖ | ➖ | ✅ | ➖ | |
| 浮动视频控制栏与交互进度条 | ✅ | ✅ | ✅ | ✅ | ❌ | |
| 覆盖页面与弹窗图层合成 (Overlay) | ➖ | ➖ | ➖ | ✅ | ➖ | |
| 多边形与矩形热区命中检测 | ➖ | ➖ | ➖ | ✅ | ➖ | |
| 选单按钮热区鼠标悬停手型光标 | ➖ | ➖ | ✅ | ✅ | ➖ | |
| 选单按钮热区鼠标直接点击跳转 | ➖ | ➖ | ✅ | ✅ | ➖ | |
| 选单热区高亮框可视化辅助线 | ➖ | ➖ | ✅ | ✅ | ➖ | |
| 荧光绿 CRT 风格屏幕提示 (OSD / 时间码) | ✅ | ✅ | ✅ | ✅ | ❌ | |
| 脚本引擎 | VCDSCRIPT 抽象语法树与协程虚拟机 | ➖ | ➖ | ➖ | ✅ | ➖ |
变量数值运算与条件分支 (IF...THEN...ELSE) |
➖ | ➖ | ➖ | ✅ | ➖ | |
子程序调用 (GOSUB) 与动画延时调度 |
➖ | ➖ | ➖ | ✅ | ➖ | |
伪随机数生成 (CALL RAND) 与按键等待 (CALL IRKEY) |
➖ | ➖ | ➖ | ✅ | ➖ | |
| 卡拉 OK 点歌列表管理与自动连续播歌 | ➖ | ➖ | ➖ | ✅ | ➖ | |
| 互动答题计分与动态数字渲染 | ➖ | ➖ | ➖ | ✅ | ➖ |
图例说明:
- ✅ 支持:功能完全实现并通过自动化测试验证。
- 🟡 部分支持:支持格式探测识别,或作为底层兼容层运行。
- ❌ 未支持:当前未实现(例如 SVCD 的 MPEG-2 变码率视频解码)。
- ➖ 不适用:该版本标准规范本身未定义此特性。
Releases 页面提供免安装的发布包:
- Windows: 下载
vcd30player-v*-windows-x64.zip,解压后运行vcd30_player.exe。 - Linux: 下载
vcd30player-v*-linux-x64.tar.gz,解压后运行可执行文件。
- Rust 1.80+(2024 Edition)
- C 编译器:
- Windows: MSVC
- Linux / macOS: GCC 或 Clang
git clone --recurse-submodules https://github.com/NimitzDEV/vcd30player.git
cd vcd30player
cargo build --release如果克隆时未拉取子模块,可执行:
git submodule update --init --recursive启动图形界面:
cargo run --release直接指定光盘挂载盘符或提取目录:
cargo run --release -- "D:\"运行内置测试套件(使用脱敏测试样本,无需物理光驱):
cargo test针对本地光盘或光盘镜像目录运行测试:
Windows (PowerShell):
$env:VCD_TEST_DISC = "D:\"
cargo testLinux / macOS:
VCD_TEST_DISC="/media/cdrom" cargo test项目起源于一张原始播放程序已无法在现代系统运行的 VCD 3.0 光盘。播放器直接解析底层数据格式并执行交互语义,不依赖旧版操作系统环境。
数据流与处理流程:
VCD 3.0 光盘
│
├── CHM / COMPHTML (页面布局与热区)
├── YBM / YUVBMP (图像与调色板)
├── CLS / Java 字节码 (启动配置)
├── VCD 脚本 (交互与逻辑)
└── MPEG / CD-XA (视频与音频)
│
▼
现代 VCD 3.0 运行时引擎
vcd30player/
├── .github/
│ ├── ISSUE_TEMPLATE/ # Issue 反馈模板
│ ├── workflows/
│ │ ├── ci.yml # 持续集成与测试工作流
│ │ └── release.yml # 二进制发布打包工作流
│ └── PULL_REQUEST_TEMPLATE.md
├── src/
│ ├── assets/ # CHM / YBM / CLS 文件格式解析
│ ├── audio/ # 音频播放与混音
│ ├── core/ # 运行时状态机、脚本 AST 与虚拟机
│ ├── ui/ # egui 渲染界面与虚拟遥控器
│ └── video/ # CD-XA 解复用与 MPEG 视频播放
├── c_src/ # C 桥接层(pl_mpeg 解码绑定)
├── vendor/ # Git Submodule(上游 phoboslab/pl_mpeg)
├── tests/ # 单元测试、集成测试与测试样本
├── Cargo.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md # 中文说明文档
└── README_EN.md # 英文说明文档
VCD 3.0 相关的公开技术资料较少。欢迎提供以下帮助:
- VCD 3.0 光盘测试与兼容性反馈
- 相关技术规范或文档资料
- 格式解析与测试样本
- 问题反馈与补丁提交
提交前请阅读 CONTRIBUTING.md。
本项目不分发任何受版权保护的光盘媒体或商业内容。请在拥有合法授权的光盘或其备份副本上使用本播放器。
本项目采用双重开源协议授权,可任选其一: