【发布时间】:2020-05-05 07:32:46
【问题描述】:
我的问题和how to play m3u8 videos from laravel storage一样,但是这个问题没有得到答案。
如果我从公用文件夹播放视频,它会毫无问题地播放。
但如果我想从存储中播放它,这是行不通的。
public function watch(Request $request, Episode $episode)
{
$video = Storage::disk('videos')->get($episode->video);
return new Response($video, 200, ['Content-Type' => 'application/x-mpegURL', 'isHls' => true]);
}
这是我的磁盘在config/filesystems.php中的定义
'videos' => [
'driver' => 'local',
'root' => storage_path('app/videos'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
这是我的转换代码(工作)
*/
public function handle()
{
$path = $this->episode->id . '.m3u8';
$lowBitrate = (new X264 ('aac'))->setKiloBitrate(500)->setVideoCodec('libx264');
$midBitrate = (new X264 ('aac'))->setKiloBitrate(1000)->setVideoCodec('libx264');
$highBitrate = (new X264 ('aac'))->setKiloBitrate(3000)->setVideoCodec('libx264');
FFMpeg::fromDisk('tmp')->open($this->episode->video)
->exportForHLS()
->dontSortFormats()
->setSegmentLength(10)
->toDisk('local')
->addFormat($lowBitrate, function($media) {
$media->addFilter(function ($filters) {
$filters->resize(new \FFMpeg\Coordinate\Dimension(640, 480));
});
})
->addFormat($midBitrate, function($media) {
$media->addFilter(function ($filters) {
$filters->resize(new \FFMpeg\Coordinate\Dimension(1280, 960));
});
})
->addFormat($highBitrate, function($media) {
$media->addFilter(function ($filters) {
$filters->resize(new \FFMpeg\Coordinate\Dimension(1280, 960));
});
})
->save($path);
$this->episode->update([
'video' => $path,
]);
FFMpeg::cleanupTemporaryFiles();
}
【问题讨论】:
-
您使用
videos作为磁盘,您是否在config/filesystems.php文件上定义了videos磁盘? -
是的,当然是定义的
-
能发一下吗?
-
我已经将它添加到问题中
-
您如何存储视频?你也可以发布它的代码吗?
标签: laravel ffmpeg streaming http-live-streaming m3u8