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!
What it means
Thrown by use-probe when any input track reports isLive() === true. Remotion Convert (and Remotion's render pipeline) requires finite, seekable media; live streams have no determinable duration and cannot be seeked, so probing aborts.
Source
Thrown at packages/convert/app/components/use-probe.ts:71
source:
src.type === 'file' ? new BlobSource(src.file) : new UrlSource(src.url),
});
}, [src]);
const getStart = useCallback(() => {
const run = async () => {
input.getFormat().then((format) => setContainer(format));
input.source.getSize().then((s) => setSize(s));
getVideoFrameRate(input).then(setFrameRate);
getDurationOrCompute(input).then((duration) =>
setDurationInSeconds(duration),
);
input.getMetadataTags().then((tags) => setMetadata(tags));
const trx = await input.getTracks();
for (const track of trx) {
if (await track.isLive()) {
throw new Error(
'Live streams are not currently supported by Remotion. Sorry!',
);
}
if (await track.isRelativeToUnixEpoch()) {
throw new Error(
'Streams with UNIX timestamps are not currently supported by Remotion. Sorry!',
);
}
}
let hasAudioTrack = false;
let hasVideoTrack = false;
for (const track of trx) {
if (track.isVideoTrack()) {
hasVideoTrack = true;
const codec = await track.getCodec();
setVideoCodec(codec);View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Provide a finite, on-demand media file instead of a live stream.
- If the source is recorded-but-flagged-live, remux to set a finite duration and remove the live flag.
- Gate the input in the UI: reject URLs whose tracks report isLive() before initiating conversion.
Example fix
// before
const tracks = await input.getTracks();
for (const t of tracks) { /* throws if live */ }
// after
const tracks = await input.getTracks();
if (await Promise.any(tracks.map((t) => t.isLive()))) {
showError('Live streams are not supported. Upload a file instead.');
return;
} Defensive patterns
Strategy: validation
Validate before calling
const tracks = await input.getTracks();
const liveFlags = await Promise.all(tracks.map((t) => t.isLive()));
if (liveFlags.some(Boolean)) {
showError('Live streams are not supported. Please upload a file.');
return;
} Type guard
null
Try / catch
try { await probe(input); }
catch (e) {
if (e.message.includes('Live streams')) showError('Use a finite media file instead.');
else throw e;
} Prevention
- Reject live URLs at the input boundary.
- Remux live-flagged-but-recorded sources to clear the flag.
- Inform users that Remotion requires finite, seekable media.
When it happens
Trigger: Loading an HLS/DASH/RTMP/SRT live source, or any track whose container signals a live broadcast flag. The probe iterates every track and throws on the first live one.
Common situations: Pointing the Convert UI at a live stream URL; using an HLS playlist with `#EXT-X-PLAYLIST-TYPE:EVENT`/no ENDLIST that mediabunny classifies as live; accidentally capturing an m3u8 from a live encoder.
Related errors
- Live streams are not currently supported by Remotion. Sorry!
- Streams with UNIX timestamps are not currently supported by
- No supported configs
- Scale must be greater than 0
- Unsupported rotation: ${rotation}
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/9872d4eaa2ad6a00.
Report an issue: GitHub.