[Bug 705991] Adding support for DASH common encryption to qtdemux and dashdemux

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue Jan 14 03:23:09 PST 2014


https://bugzilla.gnome.org/show_bug.cgi?id=705991
  GStreamer | gst-plugins-good | git

--- Comment #37 from Chris Bass <floobleflam at gmail.com> 2014-01-14 11:23:01 UTC ---
We've been having a think about the different solutions suggested above for how
to support ISOBMFF streams that can be decrypted using any one of a number of
protection systems (i.e., the case where the stream contains multiple pssh
boxes), and would like to suggest an alternative solution:

In essence, the alternative is that qtdemux includes in its src pad caps the
protection system IDs from all pssh boxes contained in the input stream, and
leaves the task of choosing which of these systems to use to a downstream cenc
element.

There would be some flexibility around how this downstream cenc
selection/decryption is implemented; for example:
(i) The downstream element responsible for choosing which system to use could
be an "autocencdecrypt" element, which will scan the registry and internally
instantiate a suitable concrete decrypter element based upon the IDs in the
caps, in the same way that autovideosink instantiates a suitable video sink
based on its input caps. In this approach, the cenc decrypters for different
protection systems would also be separate elements.
(ii) The downstream element responsible for choosing which system to use could
also itself perform decryption for all supported protection systems by making
calls to the appropriate DRM system libraries. In this approach, there would be
only a single cenc element that handles both selection and decryption (for all
supported protection systems).

As to how qtdemux would include the IDs of multiple protection systems in its
src caps, I'd suggest that all the IDs are joined together into a single
delimiter-separated string field. In other words, the protection-system-id
field in the caps format suggested in previous comments would be renamed
protection-system-identifiers; if there is a single pssh box, this field would
contain the ID of the protection system identified in that pssh box, e.g.,
protection-system-identifiers=(string)"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95";
if there are multiple pssh boxes, their IDs would be combined in a single
string, with the individual IDs delimited by a special character (such as the
pipe character, '|'), e.g.,
protection-system-identifiers=(string)"urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95|urn:uuid:9a27dd82-fde2-4725-8cbc-4234aa06ec09".

Hopefully this would give us something that will enable multi-DRM cenc support
in the vast majority of realistic use-cases, while still maintaining a
reasonably clean caps format, and avoiding the overhead of having qtdemux
expose multiple src pads.

Would this be an acceptable solution?

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list