remotion-dev/remotion · error · Error
Live streams are not currently supported by Remotion…
Error message
Live streams are not currently supported by Remotion. Sorry! Source: ${typeof src === 'string' ? src : `audio track ${src.id}`} What it means
loadWaveformPeaks extracts audio peaks for the Studio timeline using Mediabunny audio tracks. Live streams (isLive() === true) cannot be decoded into waveform peaks, so the function throws with the offending source (URL string or audio track id) in the message.
Solutions
- Use a static, downloadable audio file (MP3/WAV/AAC etc.) instead of a live stream URL.
- Record/snapshot the live stream to a file first, then reference the recorded asset.
- Check the source URL — if it is an HLS manifest or live endpoint, replace it with a VOD asset.
- If using a track object, verify isLive() is false before calling loadWaveformPeaks.
Example fix
// before
loadWaveformPeaks('https://example.com/live/stream.m3u8');
// after
loadWaveformPeaks('https://example.com/audio/episode-1.mp3'); Defensive patterns
Strategy: try-catch
Validate before calling
if (typeof src === 'string' && /\.(m3u8|mpd)(\?|$)/.test(src)) {
throw new Error('Refusing live/VOD-manifest source for waveform loading');
} Type guard
const isLiveTrack = async (t: AudioTrack) => await t.isLive();
Try / catch
try {
const {peaks} = await loadWaveformPeaks(src);
} catch (e) {
if (e.message.includes('Live streams are not currently supported')) {
peaks = emptyPeaks; // or use a pre-recorded snapshot of the stream
} else throw e;
} Prevention
- Only feed static audio files to the waveform loader.
- Detect HLS/DASH/live URLs up front and substitute recorded assets.
- Record live streams to files before using them in compositions.
- Check track.isLive() before requesting peaks when you have a track object.
When it happens
Trigger: Passing an <Audio>/OffthreadAudio source that resolves to a live stream (e.g. an HLS/DASH live URL or live radio stream) to the waveform loader; supplying an audio track object whose isLive() returns true.
Common situations: Pointing a composition at a live radio/TV feed, an event stream URL, or a CDN URL that serves live content instead of a static file.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Streams with UNIX timestamps are not currently supported by…
- The waveform sample rate must be a positive number.
- Audio data is not big enough to provide
- audio must be one of base, foreground, both, or none.
- Audio track cannot be decoded
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09).
Data as JSON: /api/errors/ff44f3b650852427.
Report an issue: GitHub.
Appendix: source
Thrown at packages/timeline-utils/src/audio-waveform/load-waveform-peaks.ts:72
onProgress: options?.onProgress,
});
return cached;
}
const input =
typeof src === 'string'
? new Input({formats: ALL_FORMATS, source: new UrlSource(src)})
: null;
try {
const audioTrack =
typeof src === 'string' ? await input!.getPrimaryAudioTrack() : src;
if (!audioTrack) {
return {peaks: new Float32Array(0), averageVolume: null};
}
if (await audioTrack.isLive()) {
throw new Error(
'Live streams are not currently supported by Remotion. Sorry! Source: ' +
(typeof src === 'string' ? src : `audio track ${src.id}`),
);
}
if (await audioTrack.isRelativeToUnixEpoch()) {
throw new Error(
'Streams with UNIX timestamps are not currently supported by Remotion. Sorry! Source: ' +
(typeof src === 'string' ? src : `audio track ${src.id}`),
);
}
const audioSampleRate = await audioTrack.getSampleRate();
const durationInSeconds =
(await audioTrack.getDurationFromMetadata({skipLiveWait: true})) ??
(await audioTrack.computeDuration({skipLiveWait: true}));
const totalPeaks = Math.ceil(durationInSeconds * waveformSampleRate);
const samplesPerPeak = Math.max(View on GitHub (pinned to b2f4e34732)