FRAMEWORKS
React Native video
Video infrastructure for a React Native app built with Expo. Resumable uploads straight from the device, adaptive playback through expo-video, and analytics on top, 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 React Native 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 React Native video capability, from upload to AI
Pick a group, then a capability. Each one tells you whether the code runs on the device, in expo-video, or on the backend that signs for it.
Video upload API
Your backend creates the signed URL and the device uploads to it in chunks. Unlike a browser upload, a native upload does not want the X-Client-Type: web-browser header. Send it and every chunk fails with an HTTP 400.
Expo video player
There is no FastPix player for React Native, and there does not need to be. expo-video wraps AVPlayer on iOS and ExoPlayer on Android, and both play HLS natively. Playback is one thing: hand a FastPix stream URL to useVideoPlayer.
React Native analytics SDK
The React Native Data SDK is not a player. It is a wrapper that takes your existing video component and returns one that reports playback data, so playback stays exactly as it was and the tracking rides along.
Server-side AI processing
Every AI feature runs on the video after it is uploaded. Your backend asks for it and the result comes back on a webhook. None of it runs on the device, so none of it costs battery or ships in the binary.
Setup
Install and configure the React Native video packages
Install the React Native video packages
Playback needs only expo-video. Uploading adds the FastPix Uploads SDK and a picker. Use expo install rather than npm install so versions match your Expo SDK.
Configure the backend, not the app
There's no API key, and nothing FastPix issues belongs in the app. Your backend holds the Access Token ID and Secret Key and hands the device a signed upload URL.
Get your access tokenAn Expo project with upload and playback wired
The picker, the resumable upload with pause and resume, the backend route that signs it, and the expo-video player, in one project you can clone and run.
Behind the scenes
What happens after your Expo 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 Expo 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
React Native video questions, answered
expo-video or react-native-video?
Both wrap AVPlayer on iOS and ExoPlayer on Android, so playback is identical. expo-video is smaller and runs in Expo Go. react-native-video is what third-party SDKs integrate against, analytics included, so if you need playback metrics that decides it before anything else does.
Why is react-native-video showing a black screen?
Most often the view has no height. <Video> fills the space it is given, and flex: 1 inside a parent with no size resolves to zero. Add a temporary backgroundColor to check. If a rectangle appears, the layout is fine and the fault is the stream, the native build or an unhandled onError.
Does react-native-video support HLS?
Yes, natively on both platforms, because the underlying AVPlayer and ExoPlayer both play HLS. There is no extra library to install. Pass an .m3u8 URL as the source and adaptive bitrate switching is handled by the OS player rather than by JavaScript.
Why does uploading video fail in Expo Go?
Expo Go is a prebuilt app with a fixed set of native modules, and a chunked upload SDK is not among them. Playback works because expo-video is part of the Expo SDK. Create a development build and the upload screen works, with your usual npx expo start loop intact.
Go deeper
More on React Native 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 Uploads SDK gives you, explained.
Read moreHow to build a video upload feature in your iOS app
The native side of the same problem.
Read moreBuild a video upload feature in your Android app
The Android half, including the permission flow.
Read moreHow to monitor video playback performance in iOS using AVPlayer
What expo-video is wrapping on the iOS side.
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
How your backend learns the video is ready.
Read moreKey video metrics for engagement and QoE
The numbers worth watching per app release.
Read more