Simple Index Object. Additionally, the instances of the Simple * Index Object shall be ordered by stream number. * * Index entries in the Simple Index Object are in terms of * Presentation Times. The corresponding Packet Number field * values (of the Index Entry, see below) indicate the packet number of * the ASF Data Packet with the closest past key frame. Note that for * video streams that contain both key frames and non-key frames, the Packet * Number field will always point to the closest past key frame. * * @package php-reader * @subpackage ASF * @author Sven Vollbehr * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup * @license http://code.google.com/p/php-reader/wiki/License New BSD License * @version $Rev: 108 $ */ final class ASF_Object_SimpleIndex extends ASF_Object { /** @var string */ private $_fileId; /** @var integer */ private $_indexEntryTimeInterval; /** @var integer */ private $_maximumPacketCount; /** @var Array */ private $_indexEntries = array(); /** * Constructs the class with given parameters and reads object related data * from the ASF file. * * @param Reader $reader The reader object. * @param Array $options The options array. */ public function __construct($reader, &$options = array()) { parent::__construct($reader, $options); $this->_fileId = $this->_reader->readGUID(); $this->_indexEntryTimeInterval = $this->_reader->readInt64LE(); $this->_maximumPacketCount = $this->_reader->readUInt32LE(); $indexEntriesCount = $this->_reader->readUInt32LE(); for ($i = 0; $i < $indexEntriesCount; $i++) { $this->_indexEntries[] = array ("packetNumber" => $this->_reader->readUInt32LE(), "packetCount" => $this->_reader->readUInt16LE()); } } /** * Returns the unique identifier for this ASF file. The value of this field * should be changed every time the file is modified in any way. The value of * this field may be set to 0 or set to be identical to the value of the * File ID field of the Data Object and the Header * Object. * * @return string */ public function getFileId() { return $this->_fileId; } /** * Returns the time interval between each index entry in 100-nanosecond units. * The most common value is 10000000, to indicate that the index entries are * in 1-second intervals, though other values can be used as well. * * @return integer */ public function getIndexEntryTimeInterval() { return $this->_indexEntryTimeInterval; } /** * Returns the maximum Packet Count value of all Index Entries. * * @return integer */ public function getMaximumPacketCount() { return $this->_maximumPacketCount; } /** * Returns an array of index entries. Each entry consists of the following * keys. * * o packetNumber -- Specifies the number of the Data Packet associated * with this index entry. Note that for video streams that contain both * key frames and non-key frames, this field will always point to the * closest key frame prior to the time interval. * * o packetCount -- Specifies the number of Data Packets to send at * this index entry. If a video key frame has been fragmented into two * Data Packets, the value of this field will be equal to 2. * * @return Array */ public function getIndexEntries() { return $this->_indexEntries; } }