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

Returning Video file to a view on 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)}}" 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');

而ResourceControllerclass如下图:

<?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;
  }
}

当我在笔记本电脑浏览器上播放时,效果如预期,但当我尝试在移动 phone 浏览器(两种情况下使用相同的 Chrome 浏览器)上播放同一视频时,它引发以下异常:

UnexpectedValueException: The Response content must be a string or object implementing __toString(), "boolean" given. in /home/username/domainname.com/vendor/symfony/http-foundation/Response.php:409

谁能帮我找出问题的根源。 谢谢

我后来发现问题是 return 文件内容的方法中的 'if' 条件造成的。因此,当由于任何原因不满足条件时,它 returns '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;

}

我后来发现,当用户尝试使用不满足 return 视频内容预期条件之一的过时浏览器访问应用程序时,就会发生这种情况。

换句话说,系统实际上按预期工作。

感谢所有以某种方式提供帮助的人。谢谢大家。