Raven Docs

Live Streaming Integration

The same Effects pipeline, applied to a stream host's camera — viewers never need the Effects SDK.

A live stream's camera is an ordinary @corvidhq/rtc Room underneath — stream.room — so effects attach exactly the way they do for a plain RTC call. Nothing effects-specific was built into Live Streaming to make this work.

Host
 ↓
Camera
 ↓
Effects
 ↓
Raven RTC
 ↓
Live Stream
 ↓
Viewers

Host-side setup

import { LiveStream } from '@corvidhq/client';
import { effects } from '@corvidhq/effects';
 
const stream = await LiveStream.join(credentials); // role: 'HOST' or 'CO_HOST'
const camera = await stream.room.enableCamera();
 
const pipeline = effects.createPipeline();
pipeline.applyPreset(effects.presets.vivid);
 
await camera.attachEffects(pipeline);

Viewers receive processed video automatically

A viewer subscribes to the host's track through the ordinary trackSubscribed event, same as any RTC participant — see Rooms & Participants. Because effects process the track before publish, the SFU forwards the already-filtered video: a viewer's RemoteTrack is indistinguishable from an unfiltered one, and viewers never install or import @corvidhq/effects.

What isn't affected

  • Live chat and reactions keep working — they're a separate ChatClient composed alongside the same Room; effects touch video only. See Live Chat.
  • Ending the stream / leavingstream.leave() behaves exactly as documented in Streams & Lifecycle, whether or not a pipeline is attached.
  • Co-hosts each attach their own pipeline to their own camera independently — one host's filter choice never affects another's video.