我在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}','[email protected]_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;
}
}
當我在筆記本電腦瀏覽器上播放它時,播放效果不錯,但是當我嘗試播放相同的視頻時手機瀏覽器(在這兩種情況下相同的Chrome瀏覽器),它拋出以下異常:
UnexpectedValueException:響應內容必須是一個字符串或者「布爾」給出的()對象實現__toString。在/home/username/domainname.com/vendor/symfony/http-foundation/Response.php:409
請任何人都可以幫助我找出問題的根源。 謝謝
解決方案的問題在於,如果您的視頻文件較大,則您的應用將耗盡內存。 只有當您使用正確的MIME類型返回文件內容時,您的方法纔有效,但這意味着您的代碼將文件加載到內存中,可能會導致內存不足異常... –