Start with the exact URL you actually need to validate
Do not replace the real stream with a cleaner demo URL if the real job depends on access context, short expiry, or source-specific restrictions. Your test has to respect the ugly parts of the real URL, not hide them.
Check whether the top response is real HLS
The first question is whether the response is actually an HLS manifest. A valid result usually includes EXTM3U and behaves like playlist text instead of returning HTML, a login page, or an origin block page.
Follow the child playlist and segment layer
A top-level manifest can succeed while the selected media playlist, key request, or segment path still fails later. HLS is a chain, not a single object, so the first 200 response is only the opening move.
Test browser playback in the context that matters
The browser can fail because of CORS, 403 rules, autoplay policy, media compatibility, or browser-specific playback differences. That is why opening the URL in a tab is not equivalent to confirming real playback.
Move to export only after playback intent is settled
If the live question is still “can the browser play this stream,” jumping into FFmpeg too early only mixes playback debugging with export debugging. Export is a later branch, not the first answer.
Use m3u8play.net as a layered test
Use the player to confirm manifest readability, playback attachment, and whether the failure looks like policy, access, or media trouble. That layered result is far more useful than saying the URL opened once.