FRAMEWORKS
Laravel video
Complete video infrastructure for a Laravel app. Install the package and you get uploads, adaptive playback, live streams, DRM, analytics and AI features, without building your own encoding, storage and delivery.
Free plan: 10 videos, 100K streaming minutes, 300 minutes of subtitles and moderation. No credit card.
TRUSTED BY PRODUCT TEAMS SHIPPING VIDEO AT SCALE






What you get
What you get from FastPix for Laravel video
Four things you don't have to build or run yourself.
One video API
Upload, storage, delivery, the player, analytics and AI all come from the same API. No Vite plugin, nothing added to your build.
Built-in encoding
FastPix turns each upload into several quality levels and packages them for streaming. No FFmpeg, no queue workers.
Analytics already on
The player sends view data on its own. Add a title and a viewer ID and you can see who watched what.
Secure video streaming and DRM
Sign a token on your server and pass it to the player. Widevine, PlayReady and FairPlay are all supported.
Functionality
Every Laravel video capability, from upload to AI
Pick a group, then a capability. Each one tells you whether the code goes in a Laravel controller, a Blade view or an Inertia page.
Video upload API
A controller action creates the signed URL. The browser then uploads the file straight to FastPix in chunks, so the bytes never pass through PHP and post_max_size stops mattering. If the connection drops, the upload picks up where it left off.
Laravel video player
The player is a web component, so it needs no React. Import it once in resources/js/app.js and the tag works in a plain Blade view. In an Inertia page, import it from an effect instead, because SSR has no customElements.
Video engagement analytics
The player sends view data on its own. No package to require, no service provider, no migration. It is the only capability here that needs nothing in your application at all.
Server-side AI processing
Every AI feature runs on the video after it's uploaded. You ask for it from the PHP SDK and the result comes back on a webhook. Nothing queues on your side, so Horizon stays idle and no worker holds a video in memory.
Setup
Install and configure the Laravel video package
Install the Laravel video packages
The PHP SDK runs on your server, where it creates upload URLs, signs playback tokens and asks for AI features. The uploader and the player run in the browser.
Configure the Laravel video package
There's no API key. You get two values, an Access Token ID and a Secret Key, and they work as a username and password. Read them through config, not env(), so they survive config:cache.
Get your access tokenA Laravel project with all of it wired
The controller, the Inertia upload page, the webhook route and the CSRF exemption, in one project you can clone and run. Everything in one place instead of four doc pages.
Behind the scenes
What happens after your Laravel app uploads a file
Here's what happens between the file leaving the browser and the video reaching a viewer. None of it is code you write, and none of it runs in your app.
Your Laravel app only touches the two ends. A server call hands over a signed URL and the player takes the playback ID. In between, a video.media.ready webhook tells your server the video is ready.
FAQ
Laravel video questions, answered
What is the best way to stream video in Laravel?
Not through a Laravel route, if you can avoid it. Serving video from PHP means either a byte-range StreamedResponse you maintain yourself or a controller that holds a worker open for the length of the view. Store the video outside your app, hand the browser a manifest URL, and let a CDN serve the segments. Laravel then does nothing during playback at all.
Do I need a byte-range StreamedResponse to serve video from Laravel?
Only if the file is being served by Laravel. Byte-range support is what makes seeking work, and every hand-rolled Laravel video streamer exists to implement it. An adaptive stream removes the requirement, because the video is already split into segments and the player requests them individually over ordinary HTTP.
How do I upload a video in Laravel?
Create a signed upload URL in a controller and let the browser send the file straight to storage. Your route returns JSON and finishes in milliseconds, so upload_max_filesize and post_max_size never come into it. The php.ini settings do not apply to a file that never reaches PHP.
How do I upload large video files past Laravel's limits?
The limits apply to request bodies PHP parses, so route the file around them. With a direct upload the browser uploads to a signed URL in chunks and resumes after a dropped connection, and the only request Laravel handles is a few hundred bytes of JSON.
Go deeper
More on Laravel video uploads and playback
Uploading large video files efficiently using chunking
The protocol detail behind chunk sizing and retry behaviour.
Read moreHow to allow users to upload large videos with pause and resume
The behaviour the uploader gives you, explained.
Read moreUsing a video API instead of FFmpeg
What leaves your server when encoding moves off it.
Read moreGuide to video playback in JavaScript
What the browser is doing underneath the player tag.
Read moreABR vs MBR: adaptive and multi-bitrate streaming
Why one upload becomes several quality levels.
Read moreHow to protect video content with signed URLs
The access model behind private playback.
Read moreWebhooks for video: live events and UGC pipelines
The events that matter, and verifying a signature properly.
Read moreHow to set up monitoring for video player errors
Catching playback failures before support tickets do.
Read moreKey video metrics for engagement and QoE
The numbers worth putting on a dashboard.
Read more