diff --git a/src/Zend/Media/Iso14496/Box/Pssh.php b/src/Zend/Media/Iso14496/Box/Pssh.php new file mode 100644 index 0000000..d23e52c --- /dev/null +++ b/src/Zend/Media/Iso14496/Box/Pssh.php @@ -0,0 +1,158 @@ +PSSH 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. + * + * 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. + * + * 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 + * shall match the SystemID field in this box to the SystemID(s) of the DRM + * System(s) they support, and select the matching Protection System Specific + * Header box(es) for retrieval of Protection System Specific information + * interpreted or created by that DRM system. + * + * @category Zend + * @package Zend_Media + * @subpackage ISO14496 + * @author Sven Vollbehr + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id$ + */ +final class Zend_Media_Iso14496_Box_Pssh extends Zend_Media_Iso14496_FullBox +{ + private $_systemId; + private $_data; + + /** + * Constructs the class with given parameters and reads box related data + * from the ISO Base Media file. + * + * @param Zend_Io_Reader $reader The reader object. + * @param Array $options The options array. + */ + public function __construct($reader = null, &$options = array()) + { + parent::__construct($reader, $options); + + if ($reader === null) { + return; + } + + $this->_systemId = $this->_reader->readGuid(); + $dataSize = $this->_reader->readUInt32BE(); + $this->_data = $reader->read($dataSize); + } + + /** + * Returns a UUID that uniquely identifies the content protection system + * that this header belongs to. + * + * @return string + */ + public function getSystemId() + { + return $this->_systemId; + } + + /** + * Sets a UUID that uniquely identifies the content protection system + * that this header belongs to. + * + * @param string $systemId The system ID. + */ + public function setSystemId($systemId) + { + $this->_systemId = $systemId; + } + + + /** + * Returns the content protection system specific data. + * + * @return string + */ + public function getData() + { + return $this->_data; + } + + /** + * Sets the content protection system specific data. + * + * @param string $data The data. + */ + public function setData($data) + { + $this->_data = $data; + } + + /** + * Returns the box heap size in bytes. + * + * @return integer + */ + public function getHeapSize() + { + return parent::getHeapSize() + 20 + strlen($this->_data); + } + + /** + * Writes the box data. + * + * @param Zend_Io_Writer $writer The writer object. + * @return void + */ + protected function _writeData($writer) + { + parent::_writeData($writer); + $writer->writeGuid($this->_systemId) + ->writeUInt32BE(strlen($this->_data)) + ->write($this->_data); + } +} diff --git a/src/Zend/Media/Iso14496/Box/Tenc.php b/src/Zend/Media/Iso14496/Box/Tenc.php new file mode 100644 index 0000000..6a499f3 --- /dev/null +++ b/src/Zend/Media/Iso14496/Box/Tenc.php @@ -0,0 +1,180 @@ +Track Encryption Box contains default values for the IsEncrypted + * flag, IV_size, and KID for the entire track. These values are used as the + * encryption parameters for the samples in this track unless overridden by the + * sample group description associated with a group of samples. For files with + * only one key per track, this box allows the basic encryption parameters to be + * specified once per track instead of being repeated per sample. + * + * @category Zend + * @package Zend_Media + * @subpackage ISO14496 + * @author Sven Vollbehr + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + * @version $Id$ + */ +final class Zend_Media_Iso14496_Box_Tenc extends Zend_Media_Iso14496_FullBox +{ + private $_defaultEncryption; + private $_defaultIVSize; + private $_defaultKID; + + /** + * Constructs the class with given parameters and reads box related data + * from the ISO Base Media file. + * + * @param Zend_Io_Reader $reader The reader object. + * @param Array $options The options array. + */ + public function __construct($reader = null, &$options = array()) + { + parent::__construct($reader, $options); + + if ($reader === null) { + return; + } + + $this->_defaultEncryption = $this->_reader->readUInt24BE(); + $this->_defaultIVSize = $this->_reader->readUInt8(); + $this->_defaultKID = $this->_reader->read(16); + } + + /** + * Returns the encryption flag which indicates the default encryption state + * of the samples in the track. + * + * This flag is the identifier of the encryption state of the samples in the + * track or group of samples. This flag takes the following values: + * + * o 0x0: Not encrypted + * o 0x1: Encrypted using AES 128-bit in CTR mode + * o 0x000002 – 0xFFFFFF: Reserved + * + * @return integer + */ + public function getDefaultEncryption() + { + return $this->_defaultEncryption; + } + + /** + * Sets the encryption flag which indicates the default encryption state + * of the samples in the track. + * + * @param integer $defaultEncryption The default encryption flag. + */ + public function setDefaultEncryption($defaultEncryption) + { + $this->_defaultEncryption = $defaultEncryption; + } + + /** + * Returns the default Initialization Vector size in bytes. + * + * This field is the size in bytes of the InitializationVector field. + * Supported values: + * + * o 0 – If the IsEncrypted flag is 0x0 (Not Encrypted). + * o 8 – Specifies 64-bit initialization vectors. + * o 16 – Specifies 128-bit initialization vectors. + * + * @return integer + */ + public function getDefaultIVSize() + { + return $this->_defaultIVSize; + } + + /** + * Sets the default Initialization Vector size in bytes. + * + * @param integer $defaultIVSize The default vector size in bytes. + */ + public function setDefaultIVSize($defaultIVSize) + { + $this->_defaultIVSize = $defaultIVSize; + } + + /** + * Returns the default key identifier used for samples in this track. + * + * @return string + */ + public function getDefaultKID() + { + return $this->_defaultKID; + } + + /** + * Sets the default key identifier used for samples in this track. + * + * @param string $defaultKID The default key identifier. + */ + public function setDefaultKID($defaultKID) + { + $this->_defaultKID = $defaultKID; + } + + /** + * Returns the box heap size in bytes. + * + * @return integer + */ + public function getHeapSize() + { + return parent::getHeapSize() + 20; + } + + /** + * Writes the box data. + * + * @param Zend_Io_Writer $writer The writer object. + * @return void + */ + protected function _writeData($writer) + { + parent::_writeData($writer); + $writer->writeUInt24BE($this->_defaultEncryption) + ->writeUInt8($this->_defaultIVSize) + ->write($this->_defaultKID); + } +}