2017-07-18 72 views
0

我在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

請任何人都可以幫助我找出問題的根源。 謝謝

+0

解決方案的問題在於,如果您的視頻文件較大,則您的應用將耗盡內存。 只有當您使用正確的MIME類型返回文件內容時,您的方法纔有效,但這意味着您的代碼將文件加載到內存中,可能會導致內存不足異常... –

回答

0

我後來發現問題是返回文件內容的方法中的'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; 

}

後來我發現,當用戶試圖訪問與應用程序發生這種情況,運作方式過時的瀏覽器不符合預期返回視頻內容的條件之一。

換句話說,系統實際上按預期工作。

謝謝所有試圖以某種方式提供幫助的人。我感謝你們。