koel/app/Services/Streamers/TranscodingStreamer.php
Torbjörn Lönnemark d487727fd5
Fix TranscodingStreamer for PHP 7.4 (#1189)
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.
2020-03-10 11:16:34 +01:00

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;
}
}