function ParseAfrtBox($afrt, $pos)
 {
     $fragTable = array();
     $version = ReadByte($afrt, $pos);
     $flags = ReadInt24($afrt, $pos + 1);
     $timescale = ReadInt32($afrt, $pos + 4);
     $qualityEntryCount = ReadByte($afrt, $pos + 8);
     $pos += 9;
     for ($i = 0; $i < $qualityEntryCount; $i++) {
         $qualitySegmentUrlModifiers[$i] = ReadString($afrt, $pos);
     }
     $fragEntries = ReadInt32($afrt, $pos);
     $pos += 4;
     LogDebug(sprintf(" %-12s%-16s%-16s%-16s", "Number", "Timestamp", "Duration", "Discontinuity"));
     for ($i = 0; $i < $fragEntries; $i++) {
         $firstFragment = ReadInt32($afrt, $pos);
         $fragEntry =& $fragTable[$firstFragment];
         $fragEntry['firstFragment'] = $firstFragment;
         $fragEntry['firstFragmentTimestamp'] = ReadInt64($afrt, $pos + 4);
         $fragEntry['fragmentDuration'] = ReadInt32($afrt, $pos + 12);
         $fragEntry['discontinuityIndicator'] = "";
         $pos += 16;
         if ($fragEntry['fragmentDuration'] == 0) {
             $fragEntry['discontinuityIndicator'] = ReadByte($afrt, $pos++);
         }
     }
     unset($fragEntry);
     foreach ($fragTable as $fragEntry) {
         LogDebug(sprintf(" %-12s%-16s%-16s%-16s", $fragEntry['firstFragment'], $fragEntry['firstFragmentTimestamp'], $fragEntry['fragmentDuration'], $fragEntry['discontinuityIndicator']));
     }
     LogDebug("");
     return $fragTable;
 }
 function ParseAfrtBox($afrt, $pos)
 {
     $version = ReadByte($afrt, $pos);
     $flags = ReadInt24($afrt, $pos + 1);
     $timescale = ReadInt32($afrt, $pos + 4);
     $qualityEntryCount = ReadByte($afrt, $pos + 8);
     $pos += 9;
     for ($i = 0; $i < $qualityEntryCount; $i++) {
         $qualitySegmentUrlModifiers[$i] = ReadString($afrt, $pos);
     }
     $fragEntries = ReadInt32($afrt, $pos);
     $pos += 4;
     LogDebug(sprintf("%s:\n\n %-8s%-16s%-16s%-16s", "Fragment Entries", "Number", "Timestamp", "Duration", "Discontinuity"));
     for ($i = 0; $i < $fragEntries; $i++) {
         $firstFragment = ReadInt32($afrt, $pos);
         $fragEntry =& $this->fragTable[$firstFragment];
         $fragEntry['firstFragment'] = $firstFragment;
         $fragEntry['firstFragmentTimestamp'] = ReadInt64($afrt, $pos + 4);
         $fragEntry['fragmentDuration'] = ReadInt32($afrt, $pos + 12);
         $fragEntry['discontinuityIndicator'] = "";
         $pos += 16;
         if ($fragEntry['fragmentDuration'] == 0) {
             $fragEntry['discontinuityIndicator'] = ReadByte($afrt, $pos++);
         }
     }
     unset($fragEntry);
     foreach ($this->fragTable as $fragEntry) {
         LogDebug(sprintf(" %-8s%-16s%-16s%-16s", $fragEntry['firstFragment'], $fragEntry['firstFragmentTimestamp'], $fragEntry['fragmentDuration'], $fragEntry['discontinuityIndicator']));
     }
     LogDebug("");
     // Use fragment table in case of single segment
     if (count($this->segTable) == 1) {
         $firstFragment = reset($this->fragTable);
         $lastFragment = end($this->fragTable);
         if ($this->fragStart === false) {
             if ($this->live) {
                 $this->fragStart = $lastFragment['firstFragment'] - 2;
             } else {
                 $this->fragStart = $firstFragment['firstFragment'] - 1;
             }
             if ($this->fragStart < 0) {
                 $this->fragStart = 0;
             }
         }
         if ($this->fragCount > 0) {
             $this->fragCount += $firstFragment['firstFragment'] - 1;
         }
         if ($this->fragCount < $lastFragment['firstFragment']) {
             $this->fragCount = $lastFragment['firstFragment'];
         }
     }
 }