What You Will Build
By the end of this tutorial, you will have a browser-based application that captures your camera or screen, streams it simultaneously to YouTube Live, Twitch, and LinkedIn Live through V100's multicast infrastructure, displays real-time stream health metrics (bitrate, dropped frames, latency per platform), overlays live captions on the outgoing stream, and produces a VOD recording when you stop. The entire backend is handled by V100 — you write zero server code.
Your Browser V100 Ingest Server Destinations | | | |--- MediaRecorder -------->| | | (WebM chunks via POST) | | | |--- RTMP ---- YouTube ---->| | |--- RTMP ---- Twitch ----->| | |--- RTMP ---- LinkedIn --->| | |--- RTMP ---- Custom ----->| | | | |<--- health beacon --------| | |<--- transcription --------| | | | | | [VOD recording saved to S3] |
Step 1 — Get Your Stream Keys
Before you start, you need RTMP stream keys from each platform. V100 uses these to push your video to each destination. Here is where to find them:
YouTube
- Go to YouTube Studio and click Go Live in the top right
- Select Stream tab (not Manage)
- Copy the Stream key and Stream URL (usually
rtmp://a.rtmp.youtube.com/live2)
Twitch
- Go to Twitch Dashboard > Settings > Stream
- Click Show under Primary Stream Key and copy it
- The ingest URL is
rtmp://live.twitch.tv/app(or your nearest ingest server)
- On your LinkedIn feed, click Start a post > Go Live
- Select Custom Stream under streaming tools
- Copy the Stream URL and Stream Key
Keep stream keys secret. Treat RTMP stream keys like passwords. Anyone with your stream key can broadcast to your channel. Store them in environment variables or a secrets manager — never commit them to source control.
Step 2 — Create a V100 Live Session
The POST /api/live/start endpoint creates a live session and tells V100 where to multicast. You pass an array of platform configurations, each with the RTMP URL and stream key. V100 returns an ingestUrl where you send your video chunks and a sessionId to reference the stream.
V100 handles all RTMP multiplexing server-side. Your browser sends video to one endpoint; V100 fans it out to every platform. This means you use your upstream bandwidth once, not three times. The wsUrl gives you a WebSocket connection for real-time health monitoring and transcription events.
Step 3 — Capture and Send Video
With the live session created, capture video from the browser using getUserMedia (camera) or getDisplayMedia (screen), encode it with MediaRecorder, and send chunks to V100's ingest endpoint as they become available. This approach works in any modern browser without plugins.
The MediaRecorder produces WebM chunks at one-second intervals. Each chunk is POSTed to V100's ingest server, which transcodes to H.264/AAC on the fly and pushes RTMP to each configured platform. The one-second interval balances latency (viewers see your stream with roughly 3-5 seconds of delay) against network efficiency (fewer HTTP requests than sub-second chunks).
Why not RTMP from the browser? Browsers do not support RTMP natively. The traditional approach requires OBS or a native application. V100's ingest endpoint accepts WebM over HTTPS, which works in any browser. V100 handles the RTMP conversion server-side. If you are building a native app, you can also push RTMP directly to rtmp://ingest.v100.ai/live/{sessionId}.
Step 4 — Monitor Stream Health
Once the stream is live, V100 sends real-time health telemetry over the WebSocket. This includes per-platform bitrate, dropped frames, latency, and connection state. Build a health dashboard to surface problems before your viewers notice them.
Health beacons arrive every 2 seconds. Each platform entry includes the current status (live, reconnecting, or failed), the actual bitrate being delivered, the droppedFrames count since the stream started, the round-trip latencyMs to the platform's ingest server, and total uptime in seconds. If a platform connection drops, V100 automatically reconnects with exponential backoff. You can display this data in a simple React component:
Step 5 — Add Live Captions
We enabled burnCaptions: true in Step 2, which tells V100 to overlay real-time captions directly into the outgoing video stream. Every viewer on every platform sees synchronized captions — no platform-specific caption integration needed. You also receive transcription events over the WebSocket so you can display them in your local UI.
V100 sends both interim (partial) and final transcription results. Interim results update in real-time as the speaker talks, giving the audience a responsive captioning experience. Final results replace the interim text once the phrase is complete. The burned-in captions appear as a semi-transparent overlay at the bottom of the video frame, styled to match YouTube's built-in caption format.
Captions improve discoverability. YouTube indexes caption text for search. Streams with live captions rank higher in YouTube search results and reach hearing-impaired audiences. V100 supports 40+ languages for caption generation.
Step 6 — Stop and Get Recording
When you are done streaming, call POST /api/live/stop. V100 gracefully terminates RTMP connections to all platforms, finalizes the VOD recording, and returns the download URL. The recording includes burned-in captions if they were enabled.
The response includes a summary for each platform with total dropped frames and average bitrate over the session. The recordingUrl is a signed S3 URL that expires after 7 days — download it or transfer it to your own storage. The transcriptUrl provides the complete transcript in JSON format with timestamps, which you can use for blog posts, show notes, or SEO content.
On the client side, stop the MediaRecorder and release the camera or screen track after calling the API to ensure a clean shutdown:
V100 vs OBS + Restream + StreamYard
The traditional multi-platform streaming stack involves OBS for encoding, Restream or StreamYard for multicast, and manual caption setup per platform. Here is how that compares to V100's API-driven approach:
| OBS + Restream | StreamYard | V100 API | |
|---|---|---|---|
| Setup time | 30–60 min per stream | 10–15 min per stream | One API call |
| Programmable | No (GUI-only) | No (GUI-only) | Yes (full REST API) |
| Browser-based capture | No (requires desktop app) | Yes | Yes |
| Live captions on stream | Manual (OBS plugin) | Limited | Automatic (40+ languages) |
| Health monitoring API | Not available | Not available | Real-time per-platform via WebSocket |
| VOD recording | Local disk only | Cloud | Cloud (S3 URL) |
| Transcript | Not included | Not included | Automatic (JSON + timestamps) |
| Embed in your app | Not possible | iframe only | Full control (your UI) |
| Pricing | $16–$49/mo (Restream Pro) | $25–$65/mo | Free tier, then usage-based |
| Custom RTMP destinations | Yes | Limited platforms | Unlimited RTMP destinations |
The critical difference is programmability. OBS and StreamYard are GUI tools for individual streamers. V100 is an API for developers building streaming into their products. If you are building a platform where users go live — an EdTech app, a virtual events platform, a gaming community — V100 lets you embed multi-platform streaming without asking users to install OBS or visit Restream.
Pricing
V100's free tier includes 100 API calls per month, which covers roughly 100 minutes of live streaming. That is enough for development and testing.
- Free — 100 API calls/month, 720p, 2 simultaneous platforms. No credit card required.
- Pro — Usage-based at $0.006/stream-minute per platform. 1080p, unlimited platforms, live captions, VOD recording, health API.
- Enterprise — Volume pricing, dedicated ingest servers, custom SLA, RTMPS support.
See the pricing page for full details.
Go Live on Every Platform Today
Get your free API key and start streaming to YouTube, Twitch, and LinkedIn with one API call. No OBS. No Restream. Just code.
Get Your Free API Key