Everything between your upload button and the play button
Video storage, encoding, delivery, playback and analytics work as one system behind one API.
Storage
Video storage that keeps each file and its versions together
Each video is stored with its renditions, thumbnails, captions and access rules, and you manage all of it through the same API.
Uploads that survive bad networks
Chunked and resumable, sent straight from the client with a short-lived upload URL.
Automatic storage tiers
Videos nobody has watched for 90 days move to cold storage and still play as usual.
Control who can watch
Signed URLs, domain allowlists and expiring tokens keep private libraries private.
Choose your data region
Pick where your originals are stored to meet data residency rules.
Media library
1284 files
1.84 / 5 TB used
48:12Hot tierkeynote-2026.mp4
6.4 GB
04:31Hot tiercourse-intro.mov
820 MB
02:05Hot tierproduct-tour.mp4
410 MB
11:40Cold tierdrone-coast.mov
3.1 GB
06:18Hot tieraurora-timelapse.mp4
1.9 GB
09:02Cold tierdunes-b-roll.mov
2.6 GB
Example data for illustration, not live measurements.
Streaming
Video streaming that starts fast and stays sharp
Viewers leave when the spinner appears. We serve the first segment from nearby, and the player adjusts quality before anyone notices.
Adaptive bitrate
The player switches between 240p and 4K as the network changes, without pausing playback.
Multi-CDN edge
Each viewer's traffic goes through whichever CDN is performing best for them at that moment.
Low-latency live
LL-HLS for events, classes and auctions, where a few seconds of delay make a difference.
Protected content
Widevine, FairPlay and PlayReady DRM, plus token authentication on every request.
Bitrate ladder
- 240p0.4 Mbps
- 480p1.2 Mbps
- 720p3 Mbps
- 1080p6 Mbps
- 1440p10 Mbps
- 4K16 Mbps
Example data for illustration, not live measurements.
Analytics
See how playback went for your viewers
Track startup time, rebuffering, quality changes and drop-off for each video and region, so you catch problems before users report them.
| 00:00 | 0.52 s |
|---|---|
| 02:00 | 0.48 s |
| 04:00 | 0.45 s |
| 06:00 | 0.44 s |
| 08:00 | 0.47 s |
| 10:00 | 0.55 s |
| 12:00 | 0.62 s |
| 14:00 | 0.58 s |
| 16:00 | 0.49 s |
| 18:00 | 0.43 s |
| 20:00 | 0.41 s |
| 22:00 | 0.4 s |
| 24:00 | 0.42 s |
Example data for illustration, not live measurements.
From upload to playback in five steps
Each step runs on its own and reports its status, so you can always see where a video is.
24 / 24
1. Upload
Resumable, chunked uploads from the browser, a phone or your server. If the connection drops, the upload continues from where it stopped.
2. Encode
Video encoding builds an adaptive ladder from 240p to 4K in H.264, HEVC and AV1, tuned to the complexity of each scene.
3. Store
The original and every rendition sit in replicated object storage. Older videos move to a cheaper tier automatically.
4. Deliver
HLS and DASH segments are cached across several CDNs, so viewers in Hanoi and in Berlin both get a fast start.
5. Play
The player SDK picks the right quality for each viewer's network and sends playback data to your dashboard.
Player SDK
A working video player in about ten lines of code
Install the package and pass a playback ID. You get adaptive streaming, captions and analytics in a player your designers can restyle.
npm install @we11cloud/playerimport { createPlayer } from '@we11cloud/player'
const player = createPlayer('#video', {
playbackId: 'pl_8Hq2xK',
autoplay: 'muted',
captions: ['en', 'vi'],
})
player.on('qualitychange', ({ height }) => {
console.log(`Now playing ${height}p`)
})import { We11Player } from '@we11cloud/player/react'
export function Lesson({ id }: { id: string }) {
return (
<We11Player
playbackId={id}
accentColor="#5b8cff"
onEnded={() => markComplete(id)}
/>
)
}import We11Player
struct LessonView: View {
let playbackId: String
var body: some View {
We11PlayerView(playbackId: playbackId)
.captions([.english, .vietnamese])
.aspectRatio(16 / 9, contentMode: .fit)
}
}import com.we11cloud.player.We11Player
@Composable
fun LessonScreen(playbackId: String) {
We11Player(
playbackId = playbackId,
captions = listOf("en", "vi"),
modifier = Modifier.aspectRatio(16f / 9f),
)
}Build your video product on We11cloud
Tell us what you are building. We will set up your beta workspace and help you ship your first stream.
