首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从laravel仓库播放m3u8视频

从laravel仓库播放m3u8视频
EN

Stack Overflow用户
提问于 2020-01-18 18:58:19
回答 1查看 2.2K关注 0票数 1

我的问题和如何在laravel存储中播放m3u8视频一样,但这个问题没有得到答案。

如果我从公用文件夹播放这段视频,它就会毫无问题地播放。

但如果我想从仓库里播放它,这是行不通的。

代码语言:javascript
复制
    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/ disk ystems.php中我的磁盘的定义。

代码语言:javascript
复制
  'videos' => [
        'driver' => 'local',
        'root' => storage_path('app/videos'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

这是我的转换代码(作业)

代码语言:javascript
复制
     */
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();

}
EN

回答 1

Stack Overflow用户

发布于 2020-01-18 20:08:54

您的videos磁盘配置错误。试着用这种方式存储你的视频:

代码语言:javascript
复制
$episode->video = $request->file('video')->store('videos', 'local');

然后在routes/web.php上添加一个新的路由

代码语言:javascript
复制
Route::get('/episodes/{episode}/watch', 'EpisodeController@watch')->name('episodes.whatch');

在您的控制器上尝试此操作:

代码语言:javascript
复制
use Illuminate\Support\Facades\Storage

public function watch(Request $request, Episode $episode)
{
    return Storage::disk('local')->response(
        $episode->video,
        "optional_name_or_null",
        [
            'Content-Type' => 'application/x-mpegURL',
            'isHls' => true
        ]
    );

    //or alternatively use this one:
    /*
    return response()->file(
        Storage::disk('local')->path($episode->video),
        [
            'Content-Type' => 'application/x-mpegURL',
            'isHls' => true
        ]
    );
    */
}

现在您可以访问您的视频:'http://your-domain.com/episodes/1/watch

注意:大多数浏览器本机不支持播放HLS/DASH视频,尝试使用第三方插件就像这个来播放这些视频格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59803835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档