diff options
Diffstat (limited to 'isoparser/src/main/java/com/googlecode/mp4parser/boxes/cenc/ProtectionSystemSpecificHeaderBox.java')
-rw-r--r-- | isoparser/src/main/java/com/googlecode/mp4parser/boxes/cenc/ProtectionSystemSpecificHeaderBox.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/boxes/cenc/ProtectionSystemSpecificHeaderBox.java b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/cenc/ProtectionSystemSpecificHeaderBox.java new file mode 100644 index 0000000..d6b653c --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/cenc/ProtectionSystemSpecificHeaderBox.java @@ -0,0 +1,89 @@ +package com.googlecode.mp4parser.boxes.cenc; + +import com.coremedia.iso.BoxParser; +import com.coremedia.iso.IsoFile; +import com.coremedia.iso.IsoTypeReader; +import com.coremedia.iso.IsoTypeWriter; +import com.coremedia.iso.boxes.Box; +import com.googlecode.mp4parser.AbstractFullBox; +import com.googlecode.mp4parser.util.UUIDConverter; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.UUID; + + + +/** + * This box contains information needed by a Content Protection System to play back the content. The + * data format is specified by the system identified by the ‘pssh’ parameter SystemID, and is considered + * opaque for the purposes of this specification. + * <p/> + * The data encapsulated in the Data field may be read by the identified Content Protection System to + * enable decryption key acquisition and decryption of media data. For license/rights-based systems, the + * header information may include data such as the URL of license server(s) or rights issuer(s) used, + * embedded licenses/rights, and/or other protection system specific metadata. + * <p/> + * A single file may be constructed to be playable by multiple key and digital rights management (DRM) + * systems, by including one Protection System-Specific Header box for each system supported. Readers + * that process such presentations must match the SystemID field in this box to the SystemID(s) of the + * DRM System(s) they support, and select or create the matching Protection System-Specific Header + * box(es) for storage and retrieval of Protection-Specific information interpreted or created by that DRM + * system. + */ +public class ProtectionSystemSpecificHeaderBox extends AbstractFullBox { + public static final String TYPE = "pssh"; + + public static byte[] OMA2_SYSTEM_ID = UUIDConverter.convert(UUID.fromString("A2B55680-6F43-11E0-9A3F-0002A5D5C51B")); + public static byte[] PLAYREADY_SYSTEM_ID = UUIDConverter.convert(UUID.fromString("9A04F079-9840-4286-AB92-E65BE0885F95")); + + byte[] content; + byte[] systemId; + + + public byte[] getSystemId() { + return systemId; + } + + public void setSystemId(byte[] systemId) { + assert systemId.length == 16; + this.systemId = systemId; + } + + public byte[] getContent() { + return content; + } + + public void setContent(byte[] content) { + this.content = content; + } + + public ProtectionSystemSpecificHeaderBox() { + super(TYPE); + } + + @Override + protected long getContentSize() { + return 24 + content.length; + } + + @Override + protected void getContent(ByteBuffer byteBuffer) { + writeVersionAndFlags(byteBuffer); + assert systemId.length == 16; + byteBuffer.put(systemId, 0, 16); + IsoTypeWriter.writeUInt32(byteBuffer, content.length); + byteBuffer.put(content); + } + + @Override + protected void _parseDetails(ByteBuffer content) { + parseVersionAndFlags(content); + systemId = new byte[16]; + content.get(systemId); + long length = IsoTypeReader.readUInt32(content); + this.content = new byte[content.remaining()]; + content.get(this.content); + assert length == this.content.length; + } +} |