{"record":{"id":"99779105e4dc3040","repo":"remotion-dev/remotion","slug":"live-streams-are-not-currently-supported-by-remoti-997791","errorCode":null,"errorMessage":"Live streams are not currently supported by Remotion. Sorry! Source: ${this.src}","messagePattern":"Live streams are not currently supported by Remotion\\. Sorry! Source: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media/src/media-player.ts","lineNumber":309,"sourceCode":"\t\t\tif (this.isDisposalError()) {\n\t\t\t\treturn {type: 'disposed'};\n\t\t\t}\n\n\t\t\tthis.totalDuration = durationInSeconds;\n\n\t\t\tconst audioTrack = await resolveAudioTrack({\n\t\t\t\tvideoTrack,\n\t\t\t\taudioTracks,\n\t\t\t\taudioStreamIndex: this.audioStreamIndex,\n\t\t\t});\n\n\t\t\tif (!videoTrack && !audioTrack) {\n\t\t\t\treturn {type: 'no-tracks'};\n\t\t\t}\n\n\t\t\tif (videoTrack && this.tagType === 'video') {\n\t\t\t\tif (await videoTrack.isLive()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Live streams are not currently supported by Remotion. Sorry! Source: ' +\n\t\t\t\t\t\t\tthis.src,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (await videoTrack.isRelativeToUnixEpoch()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Streams with UNIX timestamps are not currently supported by Remotion. Sorry! Source: ' +\n\t\t\t\t\t\t\tthis.src,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst canDecode = await videoTrack.canDecode();\n\n\t\t\t\tif (!canDecode) {\n\t\t\t\t\tif (videoTrack.codec === 'prores') {\n\t\t\t\t\t\treturn {type: 'cannot-decode-prores'};\n\t\t\t\t\t}","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media/src/media-player.ts#L291-L327","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Use a finite, recorded media file (MP4, WebM) or a VOD HLS playlist instead of a live stream.","Convert the live stream to a static file before feeding it to Remotion.","If you must use HLS, ensure the playlist is a complete VOD playlist (has EXT-X-ENDLIST) and is not marked live."],"exampleFix":"// before\n<Video src={'https://example.com/live/stream.m3u8'} />\n\n// after\n<Video src={staticFile('recorded-clip.mp4')} />","handlingStrategy":"validation","validationCode":"null","typeGuard":null,"tryCatchPattern":"// Not generally recoverable at runtime; validate the source type up front.\n// If you must guard, catch and fall back to a static file:\ntry {\n  return <Video src={src} />;\n} catch (e) {\n  if (e instanceof Error && e.message.includes('Live streams')) {\n    return <Video src={staticFile('fallback.mp4')} />;\n  }\n  throw e;\n}","preventionTips":["Disallow live/HLS URLs at the input boundary of your video pipeline.","Validate that sources are finite files (MP4/WebM) before passing to <Video>.","Document accepted source formats for any user-supplied media."],"tags":["video","live-stream","hls","media","unsupported"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}