7.4 Open the stream
https://<host>:<port><prefix>/<token>~<session_token>
No headers are needed: everything travels in the path. The URL has no
extension; tell your player the format (ts, m3u8, or the file's
container).
exponly matters for opening. Once open, keep using the same URL from the same device for seeking, reconnecting orRangerequests: you do not need a new token for that.- From another IP it does not work (a copied URL is useless to anyone else). A device with IPv4 and IPv6 may alternate between them (the URL is bound to one IPv4 address and one IPv6 /64). If the device moves to another network (Wi-Fi ↔ mobile), build a new token and reopen at the same position.
What the node answers:
| Status | Meaning | What the app does |
|---|---|---|
200/206 |
The stream | — |
403 |
Not in the line's package, line expired or disabled, signed out, or a line restriction | Retry once after ~2 s (the line may have just been re-enabled); then call get-playback-url once; if that fails too, show its error |
404 |
The content is not on this node; or the token is invalid, expired before opening, or used from another IP | Next node; if the network changed, build a new token |
429 |
Connection limit of the line reached (Retry-After) |
"Too many screens". Do not retry in a loop |
503 |
Node busy (Retry-After) |
Another node, or retry after Retry-After |
If the stream is cut right after it starts (in HLS, a 404 on the next
playlist refresh), reopen the original URL once: it then answers with the
real status (403/429). Never reopen in a loop.