mirror of
https://github.com/koel/koel
synced 2025-01-11 04:08:45 +00:00
d487727fd5
Passing the glue parameter after the pieces parameter when calling implode is deprecated as of PHP 7.4. This was the only remaining instance, all other implode calls already use the correct parameter order.
59 lines
1.4 KiB
PHP
59 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Streamers;
|
|
|
|
class TranscodingStreamer extends Streamer implements TranscodingStreamerInterface
|
|
{
|
|
/**
|
|
* Bit rate the stream should be transcoded at.
|
|
*
|
|
* @var int
|
|
*/
|
|
private $bitRate;
|
|
|
|
/**
|
|
* Time point to start transcoding from.
|
|
*
|
|
* @var float
|
|
*/
|
|
private $startTime;
|
|
|
|
/**
|
|
* On-the-fly stream the current song while transcoding.
|
|
*/
|
|
public function stream(): void
|
|
{
|
|
$ffmpeg = config('koel.streaming.ffmpeg_path');
|
|
abort_unless(is_executable($ffmpeg), 500, 'Transcoding requires valid ffmpeg settings.');
|
|
|
|
$bitRate = filter_var($this->bitRate, FILTER_SANITIZE_NUMBER_INT);
|
|
|
|
header('Content-Type: audio/mpeg');
|
|
header('Content-Disposition: attachment; filename="'.basename($this->song->path).'"');
|
|
|
|
$args = [
|
|
'-i '.escapeshellarg($this->song->path),
|
|
'-map 0:0',
|
|
'-v 0',
|
|
"-ab {$bitRate}k",
|
|
'-f mp3',
|
|
'-',
|
|
];
|
|
|
|
if ($this->startTime) {
|
|
array_unshift($args, "-ss {$this->startTime}");
|
|
}
|
|
|
|
passthru("$ffmpeg ".implode(' ', $args));
|
|
}
|
|
|
|
public function setBitRate(int $bitRate): void
|
|
{
|
|
$this->bitRate = $bitRate;
|
|
}
|
|
|
|
public function setStartTime(float $startTime): void
|
|
{
|
|
$this->startTime = $startTime;
|
|
}
|
|
}
|