Skip to content

Instantly share code, notes, and snippets.

@vluzrmos
Last active February 14, 2024 22:00
Show Gist options
  • Save vluzrmos/993d400739dd2e9aa47d to your computer and use it in GitHub Desktop.
Save vluzrmos/993d400739dd2e9aa47d to your computer and use it in GitHub Desktop.
Laravel VideoStream.
<?php
Route::get('/player', function () {
$video = "video/os_simpsons_s25e22_720p.mp4";
$mime = "video/mp4";
$title = "Os Simpsons";
return view('player')->with(compact('video', 'mime', 'title'));
});
Route::get('/video/{filename}', function ($filename) {
// Pasta dos videos.
$videosDir = base_path('resources/assets/videos');
if (file_exists($filePath = $videosDir."/".$filename)) {
$stream = new \App\Http\VideoStream($filePath);
return response()->stream(function() use ($stream) {
$stream->start();
});
}
return response("File doesn't exists", 404);
});
<?php
namespace App\Http;
/**
* Description of VideoStream
*
* @author Rana
* @link https://gist.github.com/vluzrmos/d5682ad426525196d069
*/
class VideoStream
{
/* Visite o link https://gist.github.com/vluzrmos/d5682ad426525196d069 para ver o conteúdo desse arquivo. */
}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{$title}}</title>
<link href="//vjs.zencdn.net/4.12/video-js.css" rel="stylesheet">
</head>
<body>
<video id="example_video_1" class="video-js vjs-default-skin vjs-big-play-centered"
controls preload="auto" height="600" width="980">
<source src="{{url($video)}}" type="{{$mime}}" />
</video>
<script src="//vjs.zencdn.net/4.12/video.js"></script>
<script>
videojs(document.getElementById('example_video_1'), {}, function() {
// This is functionally the same as the previous example.
});
</script>
</body>
</html>
Copy link

ghost commented Oct 9, 2015

this is realy usefull. Thanks.

@noptongbai
Copy link

Thanks you

@huungnguyen
Copy link

thank you. it helped me a lot

@dioiwibisana
Copy link

Thank you so much, it helped me too

@ggary9424
Copy link

Thanks you. Very helpful.

@fendis0709
Copy link

Is this support for playing 'avi' video extension?

@MohammedAl-Mahdawi
Copy link

Thank you

@dropoutninja
Copy link

thanks a lot

@bvdzung
Copy link

bvdzung commented Sep 20, 2017

thanks a lot. very good.

@AlexandrBabich
Copy link

Hello guys. I had same error in IE11. To solve this issue you need add header("Accept-Ranges: bytes"); after 83 string in VideoStream class.
This header is important for IE browsers.

@savepong
Copy link

savepong commented Feb 27, 2018

Thank you so much.

@nteej
Copy link

nteej commented Jun 25, 2018

Thanks a lot.

@nerg4l
Copy link

nerg4l commented Nov 13, 2018

I would recommend to use \ResponseFactory::download or \Symfony\Component\HttpFoundation\BinaryFileResponse directly, because Content-Range header already supported by them.

Route::get('/video/{filename}', function ($filename) {
    $videosDir = base_path('resources/assets/videos');
    $filePath = $videosDir.'/'.$filename

    if (file_exists($filePath)) {
        return abort(404);
    }

    $name = basename($filePath);
    return response()->download($filePath, $name, [
        'Content-Type' => 'video/mp4',
    ]);
});
Route::get('/video/{filename}', function ($filename) {
    $videosDir = base_path('resources/assets/videos');
    $filePath = $videosDir.'/'.$filename

    if (file_exists($filePath)) {
        return abort(404);
    }

    $response = new BinaryFileResponse($filePath, 200, [
        'Content-Type' => 'video/mp4',
    ]);
    $name = basename($filePath);
    $response->setContentDisposition('attachment', $name, str_replace('%', '', Str::ascii($name)));

    return $response;
});

The second version is basicly just an unwrapped version of the first one.

@techmadeeasy
Copy link

Hey guys, this is working thank you for the help. Just one question how can you use this solution to stream a live video.. from a software like OBS or Wirecast. Basically you have a camera connected to your computer and you want to stream the video. thank you

@cmarixdev
Copy link

Hey guys, this is working thank you for the help. Just one question how can you use this solution to stream a live video.. from a software like OBS or Wirecast. Basically you have a camera connected to your computer and you want to stream the video. thank you

Please drop the solution here if you get it. I'm looking for the similar concept of live video streaming

@michaelcalayag
Copy link

This is really useful... thank you !

@dev-technoscore
Copy link

Very concise and efficient piece of codes!

@xx1196
Copy link

xx1196 commented Jul 1, 2021

nice

@chintanbawa
Copy link

Thank you. It helped me alot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment