An IDR frame — Instantaneous Decoder Refresh — is a special, stricter type of I-frame. A regular i-frame is self-contained: it can be decoded without earlier frames. But future frames after a regular I-frame might still reference frames from before that I-frame. An IDR frame says "not only am I self-contained, but all reference relationships are reset here — no frame after this point will look back beyond it". It's a clean break in the video, a true reset point.
Why this matters for streaming: HLS and DASH adaptive bitrate streaming chops video into independently-playable segments, and every segment must start with an IDR (not just any I-frame). Without an IDR at the segment boundary, a player switching between bitrate renditions in the middle of the stream might find that the next segment depends on frames from the previous segment in the old rendition — broken motion and corrupted display until the next clean point. With IDR boundaries, every segment is bulletproof: the player can switch renditions, jump in mid-stream from a live broadcast, or seek to any random position cleanly.
For a product team, the practical rule is simple: every segment of an HLS or DASH stream starts with an IDR, full stop. FFmpeg's -g (keyframe interval) sets how often IDRs occur, and -force_key_frames lets you put them at specific times. Typical configuration: IDR every 2 seconds for VOD (good compression), every 1 second or less for low-latency live (faster channel changes). The cost is roughly 2–5 % bitrate compared to using non-IDR I-frames, and that's the price of clean segmentation.

