如何在Laravel项目中观看视频?

时间:2018-11-16 15:15:27

标签: php laravel video video.js

我需要有关如何在Laravel项目中播放上传的视频的帮助。我可以上载它们,并且它们会显示在数据库中,但无法在视图中播放它们,并且会出现此错误“无法加载媒体,原因是服务器或网络出现故障或不支持该格式”。我正在使用Video.js。这是我的代码

控制器:

public function store(MovieRequest $request)
{
    DB::beginTransaction();
    try {
        $movie = new Movie;

        $movie->movie_name = $request->input('movie_name');

        if ($request->hasFile('uploaded_path')) {
            $filenameWithExt = $request->file('uploaded_path')->getClientOriginalName();
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            $extension = $request->file('uploaded_path')->getClientOriginalExtension();
            $fileNameToStore = $filename. '_'.time().'.'.$extension;
            $path = $request->file('uploaded_path')->storeAs('public/movies/', $fileNameToStore);
        } else {
            $fileNameToStore = 'novideo.mp4';
        }
        $movie->uploaded_path = $fileNameToStore;

        $movie->save();

        $movie->actors()->attach($request->input('actor_id'));
        $movie->categories()->attach($request->input('category_id'));

        DB::commit();
    } catch (\Exception $e) {
        DB::rollBack();
    }
    Session::flash('success', 'A movie was successfully UPLOADED in the database!');
    return redirect()->route('movies.index');
}

MovieRequest:

public function rules()
{
    return [
        'movie_name' => 'required|max:255',
        'uploaded_path' => 'mimetypes:video/avi,video/mpeg,video/mp4|required',
        'category_id' => 'required|exists:mysql.categories,id',
        'actor_id' => 'required|exists:mysql.actors,id'
    ];
}

查看:

<tbody>
    @foreach ($movies as $movie)
        <tr>
            <td>{{ $movie->id }}</td>
            <td>{{ $movie->movie_name }}</td>


            <td>
                <video id="my-video" class="video-js" controls preload="auto" width="200" height="100" data-setup="{}">
                   <source src="public/movies/{{$movie->uploaded_path}}" type='video/mp4'>
                </video>
            </td>


            <td>
            @foreach ($movie->actors as $actor)
                <a href="{{ route('actors.edit', $actor->id) }}">{{$actor->actor_name}} @unless($loop->last)
            , 
            @endunless</a>
            @endforeach
            </td>
            <td>
            @foreach ($movie->categories as $category)
                <a href="{{ route('categories.edit', $category->id) }}">{{$category->category_name}} @unless($loop->last)
                        , 
                        @endunless</a>
            @endforeach
            </td>
            <td>{{ date('M j, Y', strtotime($movie->created_at)) }}</td>
            <td><a href="{{ route('movies.edit', $movie->id) }}" class="btn btn-default btn-sm">Edit</a></td>
            </tr>
            @endforeach
            </tbody>

1 个答案:

答案 0 :(得分:0)

创建一个端点来投放电影:

Route::get('/movie/{id}', ['uses' => 'MovieController@downloadMovie']);

在控制器中添加方法:

public function downloadMovie($id)
{
    $movie = Movie::findOrFail($id);
    // download the movie
    return Response::download($movie->uploaded_path);
}

然后在您看来:

 <video id="my-video" class="video-js" controls preload="auto" width="200" height="100" data-setup="{}">
     <source src="/movie/{{$movie->getKey()}}" type='video/mp4'>
 </video>