Как воспроизвести видео из каталога laravel хранилища после проверки логина пользователя - PullRequest
0 голосов
/ 23 января 2020

Я занимаюсь разработкой сервиса, где пользователи смогут получать доступ только к контенту и только если они заплатили за контент. поэтому я загружаю контент в каталог хранилища и для доступа к контенту я создал такие маршруты, как это ..

Route::any('storage/course/videos/{video_id}',['uses'=>'StorageController@video','middleware'=>'auth']);

, а затем в контроллере хранилища я получаю файл и возвращаю его как ответ, подобный этому ...

public function video($video_id){
    //Some logic for subscription check goes here
        $path = storage_path('app/public/course/videos/'.$video_id);
        // return $path;
        if (!File::exists($path)) {
            abort(404);
        }

        $file = File::get($path);
        $type = File::mimeType($path);

        $response = Response::make($file, 200);
        $response->header("Content-Type", $type);
        // $response->header("Accept-Ranges", 'bytes');
         //$response->header("Content-Length", 51265590);
         // $response->header("Content-Disposition" ,"attachment");  //Triggers Download

        return $response;
    }

Этот прием работает, как и ожидалось, для изображений, но не для видео. Даже загрузка видео работает, но браузер не может воспроизводить видео каждый раз. Сначала я подумал, что может отсутствовать какой-то заголовок, но поэтому я попытался некоторые заголовки, но это не сработало.

Так же, кто-нибудь делает то, что я делаю неправильно, И даже возможно ли это сделать, ИЛИ любой другой метод для достижения этой цели

Заранее спасибо !!

1 Ответ

0 голосов
/ 23 января 2020

Это сработало после использования дополнительного класса VideoStream, который я получил отсюда https://gist.github.com/vluzrmos/d5682ad426525196d069

 public function video($video_id){

        $path = storage_path('app/public/course/videos/'.$video_id);

        if (!File::exists($path)) {
            abort(404);
        }

        $stream = new \App\Http\VideoStream($path);

        return response()->stream(function() use ($stream) {
            $stream->start();
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...