Update on the Bluray open source stack: libbluray 1.4.0 and libudfread 1.2.0
It has been more than ten years since I last wrote about the Blu-ray libraries (So I bought a Blu-ray drive…, Disc libraries releases, Blu-Ray libraries update, Blu-Ray libraries releases), but the projects themselves have continued evolving with regular releases.
These days, with the growing limitations of the major streaming platforms, playback of actual physical discs is key for the preservation of media.
Today, I am happy to announce releases of the main Blu-ray libraries:
- libbluray 1.4.0, the reference open-source Blu-ray playback library.
- libudfread 1.2.0, its companion library for parsing UDF filesystem structures.
These releases, the first in three years, focus on miscellaneous fixes and build system changes.
libbluray 1.4.0
The 1.4.0 release is a large maintenance release, focusing on BD-J, library symbols and the buildsystem:
-
Support for newer Java versions
Blu-ray menus rely on BD-J, a Java-based interactivity system.After years of stagnation, the Java ecosystem is evolving quite a bit, and dropping older compilers. This makes it more complex to build the Java part of libbluray, which is based on a fixed version of Java.
libbluray 1.4.0 now supports more recent Java compilers and runtimes, ensuring that we can still compile and keep the Blu-ray menus functional. By the way, we did numerous improvements about Java compatibility in the 1.3.1 and 1.3.3 releases.
-
Meson build system migration
The library buildsystem has now moved to Meson, providing faster builds, simpler configuration, and easier integration into the rest of the VideoLAN libraries.Autotools support has been removed.
Going forward, I expect most VideoLAN libraries to migrate to Meson as well.
-
Better exported symbols
The library’s symbol exports have been completely reworked, now using-fvisibility=hidden
and dllexport on Windows. This should help us maintain proper ABI stability and reduce the risk of symbol collisions.
And we have other minor fixes including in this release.
Looking back: libbluray 1.3.x series
Since I did not blog about older major releases, here are a few important things that happened during the 1.3.x releases cycle.
-
Improved BSD support
The BSD (FreeBSD, NetBSD, OpenBSD, DragonFlyBSD) and Solaris ecosystems got the first true releases of libbluray, during the 1.3.x series, notably in 1.3.0 and 1.3.3. Those changes focused mostly on the Java integration, the filesystem support and thedlopen
support.This expands the official supported OS, beyond the usual Windows, Linux and macOS, making Blu-ray readable across all platforms.
-
Improved Java support
As I said, before, 1.3.x improved quite a bit the support for Java 13 through 18.
We also fixed quite a few cases of JVM detection and probing on various OSes, notably in 1.3.4 and 1.3.0.
- New APIs
In 1.3.0, we modified a bit the API, adding new calls like bd_event_name()
, and changing others like bd_refcnt_inc()
.
-
Improved BD-Plus support
During 1.3.2, we fixed playback issues with certain discs when used with recent versions of
libbdplus
.
Looking back: 1.2.x series (UHD foundations)
The 1.2.x releases cycle showed more features than 1.3.x while having less releases.
The most important release of the 1.2.x cycle is 1.2.1, which greatly improved UHD (Ultra HD Blu-ray) support, first introduced in 1.1.0.
UHD
UHD discs are not just higher capacity; they introduce significant technical differences:
- Video formats: UHD Blu-rays carry HEVC encoded video and often HDR metadata.
- Filesystem extensions: UHD discs use larger allocation tables and more complex UDF layouts.
- New BD-J menus: BD-J menus support now more features.
- New structures: additional playlist formats and navigation data have appeared.
- New encryption: the infamous AACS2 encryption is part of the UHD spec.
In libbluray 1.2.1, we improved the support for UHD discs, notably on the metadata handling, the playlist handling, the new files support and the BD-J compatibility.
Nota bene: libbluray does not perform the AACS nor the AACS2 decryption.
Other important things
Miscellaneous other things got added in 1.2.0 and 1.2.1 in addition to UHD:
- new functions to list and read BD-ROM files;
- OpenJDK 12 and 13 support and fixes for older versions;
- support for key pressed and AWT mouse events;
- numerous fixes on various discs;
- use of external libudfread when available.
libudfread 1.2.0
Alongside libbluray, the libudfread library also received an update: 1.2.0.
This library handles the UDF filesystem, which underpins Blu-ray discs, and is now a direct dependency of libbluray.
This new version is minor and similarly to libbluray, it moves to Meson and changes the visibility of symbols. There is also a leak fix.
Conclusion
After 3 years, I’ve cut new releases of the open source Blu-ray stack, so that features and fixes get pushed to all users.
As I said earlier, I plan to move more libraries to Meson, notably the DVD stacks and maybe others like libspatialaudio or libNDI. Stay tuned for more releases…
You can find the full changelogs here:
The code is, as always, open source. Patches are welcome.