The disc structure, signed JAR, and video are all valid. The menu never appeared because 'make run' opened the UDF .iso: libbluray's BD-J stack must copy BDMV/JAR/00000.jar out of the image into /tmp/libbluray-bdj-cache before the JVM can load it, and that write is refused by libbluray's BD-J SecurityManager (usingUdf=true / no disc root). With no JAR mounted the Xlet class isn't found (ClassNotFoundException: org.homebrew.MyXlet) and VLC falls back to the raw playlist -> video, no menu. Opening the build/disc BDMV folder instead lets libbluray read the JAR directly, so the Xlet loads and the menu overlay runs. The ISO is still built for burning; real players read the JAR from the disc filesystem directly. - run-vlc.sh: default to build/disc, accept folder or .iso, add --bluray-menu - Makefile: 'run' depends on the disc folder, not the ISO - README: document the folder-vs-ISO libbluray caveat Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.7 KiB
Markdown
50 lines
1.7 KiB
Markdown
# Adjustments Blu-ray
|
|
|
|
BD-J scaffold for the off-beat dark comedy `Adjustments`.
|
|
|
|
## Tooling
|
|
|
|
- `mise` pins Temurin JDK 8 for legacy BD-J bytecode.
|
|
- `vendor/bdj-sdk` contains the BD-J Linux SDK pieces used for signing,
|
|
template BD-J metadata, stubs, and UDF ISO generation.
|
|
- `tools/tsmuxer/tsMuxeR` authors the generated elementary streams into a
|
|
Blu-ray playlist, clipinfo, and `.m2ts`.
|
|
- `tools/vlc-plugins` can hold project-local Arch VLC Blu-ray plugins when the
|
|
system VLC package is split and `vlc-plugin-bluray` is not installed.
|
|
- `ffmpeg` generates the temporary feature clip.
|
|
- `vlc` opens the resulting ISO.
|
|
|
|
## Commands
|
|
|
|
```sh
|
|
make bootstrap
|
|
make
|
|
make inspect
|
|
make run
|
|
```
|
|
|
|
The ISO is written to:
|
|
|
|
```text
|
|
build/adjustments.iso
|
|
```
|
|
|
|
`make run` previews the disc by pointing VLC's Blu-ray access module at the
|
|
`build/disc` BDMV **folder**, not the ISO:
|
|
|
|
```sh
|
|
vlc --bluray-menu bluray:///absolute/path/to/build/disc
|
|
```
|
|
|
|
Why the folder and not the ISO: when libbluray opens a UDF `.iso`, its BD-J
|
|
runtime must copy `BDMV/JAR/00000.jar` out of the image into a temp cache dir
|
|
before the JVM can load it. On this setup that write is refused by libbluray's
|
|
BD-J `SecurityManager`, so the Xlet class is never found and VLC silently falls
|
|
back to playing the raw playlist with no menu. Reading the folder lets
|
|
libbluray load the JAR directly, so the menu Xlet runs. The ISO is still the
|
|
artifact you burn/distribute; real players read the JAR from the disc
|
|
filesystem directly and are unaffected.
|
|
|
|
The initial menu is a Java Xlet overlay with a few bonus-feature placeholders
|
|
and a hidden menu stub. The actual generated video is a short ffmpeg SMPTE bars
|
|
pattern with AC-3 audio, authored as playlist `00000`.
|