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: ${src} What it means
Thrown inside useWindowedAudioData() when mediabunny reports the source is a live stream (audioTrack.isLive() === true, line 136-141). Remotion needs deterministic, finite media to schedule frames, so live sources (HLS/DASH live, RTMP relays, radio streams) are rejected up front. The error includes the offending src and is forwarded through cancelRender().
Source
Thrown at packages/media-utils/src/use-windowed-audio-data.ts:137
});
const onAbort = () => {
input.dispose();
};
signal.addEventListener('abort', onAbort, {once: true});
try {
const durationInSeconds = await input.computeDuration();
const audioTrack = await input.getPrimaryAudioTrack();
if (!audioTrack) {
throw new Error('No audio track found');
}
if (await audioTrack.isLive()) {
throw new Error(
'Live streams are not currently supported by Remotion. Sorry! Source: ' +
src,
);
}
if (await audioTrack.isRelativeToUnixEpoch()) {
throw new Error(
'Streams with UNIX timestamps are not currently supported by Remotion. Sorry! Source: ' +
src,
);
}
const canDecode = await audioTrack.canDecode();
if (!canDecode) {
throw new Error('Audio track cannot be decoded');
}
View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Use a finite, recorded version of the media (VOD HLS playlist, downloadable MP4/MP3, downloaded file) instead of the live source.
- If you must react to live audio in a browser UI (not a Remotion render), do not use useWindowedAudioData; use a plain Web Audio analyser in client React.
- For HLS, switch from TYPE=LIVE to TYPE=VOD or TYPE=EVENT playlists, or render a segment list to a static file first.
- Download the live stream offline (e.g. streamlink/ffmpeg) to a finite file and point the hook at that file.
Example fix
// before (live radio stream -> rejected)
useWindowedAudioData({src: 'https://radio.example/live.m3u8', ...});
// after (record first, then render from the finite file)
// offline: streamlink --output radio.mp3 https://radio.example/live best
useWindowedAudioData({src: staticFile('radio.mp3'), ...}); Defensive patterns
Strategy: validation
Validate before calling
// Reject obvious live-stream URLs before handing them to the hook
function looksLikeLiveStream(src: string): boolean {
const s = src.toLowerCase();
return /(?:^|\/)live[._/-]/.test(s)
|| s.endsWith('.m3u8') && !s.includes('vod')
|| /^rtmp:|^rtsp:|^udp:/.test(s);
}
if (looksLikeLiveStream(src)) {
throw new Error(`Use a recorded/VOD source for Remotion; ${src} appears to be live.`);
} Type guard
async function isLiveMediabunny(src: string): Promise<boolean> {
const {Input} = await import('mediabunny');
const input = new Input({source: src});
try {
const track = await input.getPrimaryAudioTrack();
return track ? await track.isLive() : false;
} finally {
input.dispose();
}
} Try / catch
// Forwarded to cancelRender(); use an ErrorBoundary to fall back to a non-live asset:
// <ErrorBoundary fallback={<Waveform src={staticFile('fallback.mp3')} ... />}>
// <WindowedWaveform src={liveUrl} ... />
// </ErrorBoundary> Prevention
- Use VOD or recorded media (downloadable MP4/MP3, VOD HLS) instead of live sources for Remotion.
- For HLS, pick a TYPE=VOD or TYPE=EVENT playlist rather than TYPE=LIVE.
- Record live audio to a finite file with streamlink/ffmpeg before rendering.
- Avoid passing user-facing streaming service watch URLs to useWindowedAudioData.
When it happens
Trigger: Passing an HLS .m3u8 of a live event, an RTMP/RTSP radio relay URL, a DASH live manifest, a YouTube/Twitch stream URL, or any source whose container advertises LIVE.
Common situations: Mistakenly using a live endpoint (e.g. radio station stream) instead of a recorded VOD; using the live variant of an HLS playlist instead of the VOD/Event playlist; pulling a 'watch?v=' URL instead of a downloadable media URL; radio/podcast services that stream in real time.
Related errors
- Streams with UNIX timestamps are not currently supported by
- Audio track cannot be decoded
- No audio track found
- Invalid channel index ${channelIndex} for audio with ${audio
- Only supporting WAVE with PCM audio format, but got ${audioF
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/2b8d562ab8837e27.
Report an issue: GitHub.