foxws / laravel-streamer
Encode video into several qualities and package it into HLS and DASH with Shaka Streamer, on top of foxws/laravel-media.
Fund package maintenance!
Requires
- php: ^8.4
- foxws/laravel-media: ^0.3.4
- illuminate/contracts: ^13.0
- illuminate/filesystem: ^13.0
- illuminate/support: ^13.0
Requires (Dev)
- larastan/larastan: ^3.9
- laravel/pint: ^1.29
- orchestra/testbench: ^11.0
- pestphp/pest: ^5.0
- pestphp/pest-plugin-laravel: ^5.0
- pestphp/pest-plugin-type-coverage: ^5.0.2
- phpstan/extension-installer: ^1.4
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Encode video into several qualities and package it into HLS and DASH with Shaka Streamer, on top of foxws/laravel-media. Read the source from any Laravel disk, and write the result to any disk.
See the full documentation: Installation, Usage, Testing, Configuration, Upgrading from 2.x.
Requirements
- PHP 8.4 or higher
- Laravel 13
- foxws/laravel-media 0.3.4 or higher
- Shaka Streamer, with FFmpeg and Shaka Packager
Installation
composer require foxws/laravel-streamer
Install Shaka Streamer with its bundled FFmpeg and Shaka Packager, then check the setup:
pip install shaka-streamer shaka-streamer-binaries php artisan media:info
See Installation to use your own FFmpeg and Shaka Packager instead.
Quick start
use Foxws\Media\Facades\Media; $result = Media::fromDisk('media') ->open('videos/clip.mp4') ->streamer() ->addStreamsFrom() ->withResolutions('1080p', '720p', '480p') ->withHlsPlaylist() ->withDashManifest() ->toDisk('s3') ->save('streams/clip');
This encodes three qualities, writes one set of segments with both an HLS playlist and a DASH manifest, and uploads them to streams/clip on the s3 disk. Run it in a queued job: encoding takes a while.
Serve private streams with laravel-media's signed playlists:
return Media::fromDisk('s3')->open('streams/clip/master.m3u8') ->hlsPlaylist() ->resolveMediaUrlsUsing(fn (string $path) => Storage::disk('s3')->temporaryUrl($path, now()->addHour())) ->toResponse($request);
Testing
composer test
Links
Credits
Used by Stry, a self-hosted video streaming app.
AI, specifically Claude, was used to help build this package. All AI-assisted output is reviewed by me, and I retain final say over everything that is implemented and released.
License
MIT. See License File.