 |
Disc organization_id vs. Xlet organization_id
Introduction
A Blu-ray disc may contain two different kinds of organization IDs.
The first, which appears in the id.bdmv file, is the disc
org ID. The second, which appears in the BDJO file and
in the xlet's PRF is the xlet org ID. In many discs these org IDs are the same,
but this is not always the case. For example, a disc might include an xlet
that comes from a third-party, and the disc maker might wish to keep the
org IDs distinct. In another usage scenario, a BD-Live xlet used for
testing might load a fairly complete disc image and do a VFS update, where
the disc image under test has a different org ID than the xlet that does the
vfs update.
This latter usage scenario occurs with the HD cookbook project's bridgehead xlet.
The Problem
A properly signed xlet is granted write access to the BUDA, in an organization-dependent
directory. This is normally where an xlet like the bridgehead xlet writes the elements it needs
before it does a VFS update. For a VFS update, the new contents need to appear in a
subdirectory determined by the disc org ID.
Unfortunately, as of this writing it was not clear which org ID is used to determine the directory
that the xlet has write access to. Is it determined by the disc org ID, or the xlet org ID? This
can be tested with the DataAreaAccessTest in the HD cookbook open-source project,
available under tests/functional. Running this test, we observed that writing
was allowed under the disc org ID on some players, and under the xlet org ID on others.
Earlier, we had heard reports that some players may treat xlets whose org ID differs from that of
the disc as being unsigned. We can't find any specification language that would support (or even
allow) this behavior, however; this behavior might just be a bug in pre-production players.
The BDA spec has been clarified to mandate that BUDA access be granted under the disc org
ID, whereas ADA access is granted under the xlet org ID. Some testing in October 2009 indicates
that the ADA works reliably, but that many players implement the wrong rule for BUDA writing.
That is, there are players where access to read and write the BUDA are granted under the xlet
org ID, and not the disc org ID, as mandated by the (now clarified) specification. Further, some
players allow writing under both.
The Solution
It may be simplest to ensure that an xlet that writes to the BUDA and does a VFS update is always
signaled in the BDJO with the same xlet org ID as the disc org ID of the disc it's carried on. This will
work on all players, even the pre-production players where the org IDs must match in order for an
xlet to be trusted. However, using the same org ID for both might not always be possible. When it isn't, We recommend that BD-J authors
include a credential with the xlet to guarantee that write permission will be granted to the
directory of the disc org ID in all cases. Further, the xlet should be tested on a player that
is known to automatically grant write access under the xlet org ID, and not the disc org ID,
so that the correctness of the credential is ensured.
Further, it's probably a good idea to avoid hard-coding organization IDs into an xlet.
The xlet's org ID can be read from the standard system property dvb.org.id
There is no system property for the disc's org ID, but it's easy enough to read it out of
the id.bdmv file. This is what we do in the DataAreaAccessTest code.
-- Main.billf - 04 Jul 2008
|