Build the catchup manifest URL by appending begin/end (the requested
programme window) to the live manifest, letting the Broadpeak origin
serve a static, programme-bounded MPD (mediaPresentationDuration ==
programme length). end is clamped to now so a running programme does
not request beyond the live edge. This removes the need for any
client- or backend-side manifest rewriting to start at the programme.
Serve the live stream when start_time is in the future (Kodi auto-
advancing past the live edge of a running catchup programme to a not-
yet-aired slot) instead of returning 404.