public function parse($content) { $data = $this->content2Data($content); $version = 3; $mediaSequence = 0; extract($data); // to $version, $mediaSequence, $targetDuration $playlist = new Playlist(); foreach ($data['playlist'] as $index => $row) { $mediaSegment = new MediaSegment($row['uri'], $row['duration'], $mediaSequence + $index, !empty($row['isDiscontinuity'])); $playlist->add($mediaSegment); } return new M3u8($playlist, $version, $targetDuration); }
public function generate(ChannelInterface $channel, \DateTime $startsAt = null) { $targetDuration = $this->options['target_duration']; if (null === $startsAt) { $startsAt = new \DateTime(); } $segments = $this->manager->findPlaying($channel, $startsAt, $targetDuration * 3); $playlist = new Playlist($segments); $first = $playlist->getFirst(); if (null === $first) { return; } $age = $first->getEndsAt()->getTimestamp() - $startsAt->getTimestamp() + 1; $playlist->setAge($age); $discontinuitySequence = $first->getProgram()->getSequence(); if ($first->isDiscontinuity()) { --$discontinuitySequence; } return new M3u8($playlist, $this->options['version'], $targetDuration, $discontinuitySequence); }