Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将视频文件返回到laravel 5.4上的视图_Php_Video_Video Streaming_Laravel 5.4 - Fatal编程技术网

Php 将视频文件返回到laravel 5.4上的视图

Php 将视频文件返回到laravel 5.4上的视图,php,video,video-streaming,laravel-5.4,Php,Video,Video Streaming,Laravel 5.4,在Laravel 5.4中,将视频渲染到我的视图时遇到问题 我的看法如下: <main class="video-player"> @if(!empty($video)) <video id="my-video" class="video-js vjs-big-play-centered" controls data-setup="{}"> <source src="{{url('video/'.$token.'/'.$video)

在Laravel 5.4中,将视频渲染到我的视图时遇到问题

我的看法如下:

 <main class="video-player">
    @if(!empty($video))
      <video id="my-video" class="video-js vjs-big-play-centered" controls data-setup="{}">
      <source src="{{url('video/'.$token.'/'.$video)}}" type="{{$video_mime_type}}">
        <p class="vjs-no-js">
          Please upgrade your browser.
        </p>
        </video>
        @else
            <div class="alert alert-info"><span class='fa fa-info-circle'></span> Lesson video is unavailable!!! </div>
        @endif
    </main>
Route::get('video/{token}/{video}','ResourceController@show_video');
ResourceController类如下图所示:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Storage;
use Response;
use File;
use GuzzleHttp\Mimetypes;
use App\Mime;

class ResourceController extends Controller
{

 public function __construct()
{
   $this->middleware('auth')->only('show_video');
}
........
........
public function show_video($token,$filename)
{
    $token=\App\VideoPermission::where('token',$token)->first();
    if(!empty($token))
    { 
    $token->delete();    
    $mime_type=Mime::from_extension($filename);   
    return response()->file(storage_path('app/lesson-files/'.$filename),[
        'Content-Type' => $mime_type,
        'Content-Disposition' => 'inline; filename="Lesson-file"'
        ]);
    }
    return false;
  }
}

我后来发现问题是返回文件内容的方法中的“if”条件造成的。因此,当由于任何原因未满足该条件时,它将返回“false”作为响应,而不是视频文件,从而导致我收到的布尔响应

当所需的令牌丢失时,代码就是这样编写的,如下所示

if(!empty($token))
{ 
$token->delete();    
$mime_type=Mime::from_extension($filename);   
return response()->file(storage_path('app/lesson-files/'.$filename),[
    'Content-Type' => $mime_type,
    'Content-Disposition' => 'inline; filename="Lesson-file"'
    ]);
}
return false;
}

我后来发现,当用户试图使用过时的浏览器访问应用程序时,会发生这种情况,而浏览器不符合返回视频内容的预期条件之一

换言之,系统实际上正在按预期工作


感谢所有试图以这种或那种方式提供帮助的人。非常感谢大家。

解决方案的问题在于,如果您有更大的视频文件,您的应用程序将耗尽内存。您的方法只有在返回具有正确mime类型的文件内容时才有效,但这意味着您的代码要将文件加载到内存中,可能会导致内存不足异常。。。