alltube/classes/streams/YoutubeStream.php

40 lines
1.1 KiB
PHP

<?php
/**
* YoutubeStream class.
*/
namespace Alltube\Stream;
use Alltube\Video;
use GuzzleHttp\Psr7\AppendStream;
use Psr\Http\Message\StreamInterface;
/**
* Stream that downloads a video in chunks.
* This is required because Youtube throttles the download speed on chunks larger than 10M.
*/
class YoutubeStream extends AppendStream
{
/**
* YoutubeStream constructor.
*
* @param Video $video Video to stream
*/
public function __construct(Video $video)
{
parent::__construct();
$stream = $video->getHttpResponse();
$fileSize = $stream->getHeader('Content-Length');
$curSize = 0;
while ($curSize < $fileSize[0]) {
$newSize = $curSize + $video->downloader_options->http_chunk_size;
if ($newSize > $fileSize[0]) {
$newSize = $fileSize[0] - 1;
}
$response = $video->getHttpResponse(['Range' => 'bytes='.$curSize.'-'.$newSize]);
$this->addStream(new YoutubeChunkStream($response));
$curSize = $newSize + 1;
}
}
}