remotion-dev/remotion · error · Error

Live streams are not currently supported by Remotion. Sorry!

Error message

Live streams are not currently supported by Remotion. Sorry! Source: ${this.src}

What it means

Thrown by MediaPlayer in @remotion/media when the resolved primary video track reports itself as a live stream. Remotion renders frame-by-frame and needs a finite, seekable file; live streams (e.g. HLS/DASH with ongoing segments) cannot be seeked to an arbitrary frame, so decoding is rejected. This check runs during the video-track decode path at media-player.ts:309.

Source

Thrown at packages/media/src/media-player.ts:309

			if (this.isDisposalError()) {
				return {type: 'disposed'};
			}

			this.totalDuration = durationInSeconds;

			const audioTrack = await resolveAudioTrack({
				videoTrack,
				audioTracks,
				audioStreamIndex: this.audioStreamIndex,
			});

			if (!videoTrack && !audioTrack) {
				return {type: 'no-tracks'};
			}

			if (videoTrack && this.tagType === 'video') {
				if (await videoTrack.isLive()) {
					throw new Error(
						'Live streams are not currently supported by Remotion. Sorry! Source: ' +
							this.src,
					);
				}

				if (await videoTrack.isRelativeToUnixEpoch()) {
					throw new Error(
						'Streams with UNIX timestamps are not currently supported by Remotion. Sorry! Source: ' +
							this.src,
					);
				}

				const canDecode = await videoTrack.canDecode();

				if (!canDecode) {
					if (videoTrack.codec === 'prores') {
						return {type: 'cannot-decode-prores'};
					}

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Use a finite, recorded media file (MP4, WebM) or a VOD HLS playlist instead of a live stream.
  2. Convert the live stream to a static file before feeding it to Remotion.
  3. If you must use HLS, ensure the playlist is a complete VOD playlist (has EXT-X-ENDLIST) and is not marked live.

Example fix

// before
<Video src={'https://example.com/live/stream.m3u8'} />

// after
<Video src={staticFile('recorded-clip.mp4')} />
Defensive patterns

Strategy: validation

Validate before calling

null

Try / catch

// Not generally recoverable at runtime; validate the source type up front.
// If you must guard, catch and fall back to a static file:
try {
  return <Video src={src} />;
} catch (e) {
  if (e instanceof Error && e.message.includes('Live streams')) {
    return <Video src={staticFile('fallback.mp4')} />;
  }
  throw e;
}

Prevention

When it happens

Trigger: Pointing <Video>/<OffthreadVideo> src at an HLS (.m3u8), DASH (.mpd), or media stream that the parser detects as live (e.g. contains EXT-X-ENDLIST absent, or a live playlist type). The track's isLive() promise resolves true.

Common situations: Using a live broadcast URL, a webcam stream, or an HLS playlist that is marked LIVE instead of VOD. Confusing a live HLS endpoint with a static recorded stream.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/99779105e4dc3040. Report an issue: GitHub.