Skip to content

Overview

Browser-based broadcasting — camera, screen share, or both with audio mixing. No encoder software needed.

npm npm npm npm

PackageUse Case
@livepeer-frameworks/streamcrafter-reactReact 17+ apps
@livepeer-frameworks/streamcrafter-svelteSvelte 5 apps
@livepeer-frameworks/streamcrafter-wcWeb Components — Vue, Angular, CDN, plain HTML
@livepeer-frameworks/streamcrafter-coreVanilla JS, headless, or building custom integrations

Not sure which package to use? See the Integration Guide.

Direct WHIP Mode — pass the WHIP endpoint shown in the dashboard:

<StreamCrafter whipUrl="https://edge-ingest.frameworks.network/webrtc/your-stream-key" initialProfile="broadcast" />

Gateway Resolution Mode — where resolveIngestEndpoint is wired, the SDK can resolve the WHIP endpoint from a stream key:

import { StreamCrafter } from "@livepeer-frameworks/streamcrafter-react";
import "@livepeer-frameworks/streamcrafter-react/streamcrafter.css";
<StreamCrafter
gatewayUrl="https://bridge.frameworks.network/graphql"
streamKey="<YOUR_STREAM_KEY>"
initialProfile="broadcast"
/>;

The drop-in component includes video preview, camera/screen share controls, quality selection, Go Live button, source management, and auto-reconnection.

Your WHIP ingest URL is shown in the FrameWorks dashboard under Ingest URLs:

WHIP: https://edge-ingest.frameworks.network/webrtc/your-stream-key

FrameWorks uses MistServer’s /webrtc/{streamKey} path for WHIP ingest. Gateway resolution can hide the node URL when the ingest resolver is available; otherwise use the dashboard WHIP URL directly. For custom encoders or server-side publishing, use the DNS ingest name directly instead of resolving through your backend: edge-ingest.{tenant}.cdn.{base} when available, then the global root or cluster-concrete ingest domain shown in the dashboard.

StreamCrafter supports three levels of customization across all framework packages:

LevelWhat You GetWhen to Use
Drop-inFull built-in UIQuick integration, default look
ComposableUse framework sub-components, rearrange and mix with your own UICustom layouts, partial customization
HeadlessRaw controller/hooks/stores, build your own UI entirelyFull creative control

See the framework-specific pages for details on each level:

The drop-in UI exposes three quality presets. The lower-level core type also accepts auto for custom integrations that want browser-selected defaults:

ProfileResolutionUse Case
professional1920x1080High quality, good upload
broadcast1920x1080Balanced quality/bandwidth
conference1280x720Limited bandwidth, meetings
<StreamCrafter initialProfile="conference" />

StreamCrafter supports simultaneous camera + screen share with per-source volume control and audio mixing.

const { startCamera, startScreenShare, sources } = useStreamCrafterV2({ ... });
await startCamera();
await startScreenShare({ audio: true });
// Both sources now stream together with mixed audio

See Advanced Features for audio mixing details.

The compositor is enabled by default — multi-source layout control with scenes, layers, and transitions:

  • 15 layout presets (solo, PiP, split, grid, featured, and more)
  • Drag-and-drop layer ordering
  • Scene switching with animated transitions
  • GPU-accelerated rendering (WebGPU, WebGL, Canvas2D fallback)

See Compositor for full details.

StateDescription
idleReady, no capture active
requesting_permissionsWaiting for camera/mic permission
capturingMedia captured, not streaming
connectingEstablishing WHIP connection
streamingLive and streaming
reconnectingConnection lost, attempting reconnect
errorError occurred
destroyedCleanup complete
BrowserTested
Chrome 90+Full support
Firefox 90+Full support
Safari 14.1+Full support
Edge 90+Full support
  • Check permissions — Ensure the browser has camera/mic access
  • HTTPS required — MediaDevices API requires secure context
  • Device in use — Close other apps using the camera
  • Check WHIP URL — Verify the endpoint is correct
  • Firewall/NAT — WebRTC may need TURN servers for restrictive networks (pass iceServers in config)
  • Stream key — Ensure the stream key is valid
  • Upload bandwidth — Check your upload speed matches the profile bitrate
  • Profile mismatch — Try conference profile for limited bandwidth
  • System audio — Screen share audio only works with { audio: true }
  • Browser support — System audio capture requires Chrome/Edge (not Firefox/Safari)
  • User selection — User must check “Share audio” in the browser dialog