laravel8で動画ストリーミングをやってみた。ただの分割ダウンロードのストリーミング(プログレッシブダウンロード)配信なので、普通に動画保存出来る。
1, laravel8を普通にインストール
2, storage/app/video/test.mp4に動画ファイルを配置する
3, 面倒なので、routes/web.phpのトップ画面で、いきなり動画配信!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Route::get('/', function () { //return view('welcome'); // ストリーミング再生する動画ファイルのパス // $file_path = 'audio/a.mp3'; $file_path = 'video/a.mp4'; // Storageを使用した場合は、ルートパスがstorage/appになる $path = storage_path('app/'. $file_path); // ファイルサイズ $file_size = filesize($path); // ファイルを開く $fp = fopen($path, 'rb'); // MIMEタイプをファイルから判定 $mimeType = \Storage::mimeType($file_path); // httpヘッダ作成 $headers = [ 'Content-type' => $mimeType, 'Accept-Ranges' => 'bytes', 'Content-Length' => $file_size, // どれ位分割するかの指定。0からファイルサイズなので分割してない! // bytes 先頭からファイルサイズ/ファイルサイズ 'Content-Range' => sprintf( 'bytes %d-%d/%d', 0, ($file_size-1), $file_size ) ]; // ブラウザにレスポンスを返す return response()->stream(function() use($fp) { fpassthru($fp); }, 206, $headers); // ストリーミングのように分割ダウンロードの成功コード。200だと駄目! }); |
ただの分割ダウンロードのストリーミング配信なので、普通に動画保存出来る。
youtubeみたいに気楽に保存できないようにしたい!