mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-10 10:06:15 -08:00
docs: update docs about M3U archive/catch-up playback support
This commit is contained in:
1 parent
c2f5c62e82
commit
e7b57197c3
1 file changed
+41
@@ -252,6 +252,34 @@ class EpgService {
|
||||
- Multi-EPG modal view
|
||||
- Channel info overlay
|
||||
- External player support (MPV, VLC) in Electron
|
||||
- M3U archive/catch-up playback for supported replay schemes
|
||||
|
||||
### Archive / Catch-Up Playback
|
||||
|
||||
- The shared EPG UI only shows the archive replay badge when the host confirms
|
||||
that the selected M3U channel has a playable replay scheme. Archive days
|
||||
alone are not enough.
|
||||
- M3U catch-up support is resolved in `m3u-utils` from channel metadata and
|
||||
the archived program start time.
|
||||
- Supported replay precedence:
|
||||
1. `catchup.source` if it is an HTTP(S) URL. IPTVNator rewrites or appends
|
||||
standard `utc` and `lutc` query params on that URL.
|
||||
2. Legacy same-stream shift playback when `catchup.type === 'shift'`. In
|
||||
that case IPTVNator rewrites or appends `utc` and `lutc` on `channel.url`.
|
||||
3. Legacy same-stream shift fallback when no explicit catch-up mode is
|
||||
declared, archive-day metadata exists (`tvg.rec`, `timeshift`, or
|
||||
`catchup.days`), and `channel.url` itself is an HTTP(S) stream URL. This
|
||||
covers providers that only advertise archive retention such as
|
||||
`tvg-rec="7"` but still expect standard `utc` and `lutc` query params on
|
||||
the live URL.
|
||||
- `tvg.rec`, `timeshift`, and `catchup.days` still define the archive window
|
||||
shown in the EPG, but replay remains unavailable when the provider declares a
|
||||
different explicit catch-up scheme that IPTVNator does not understand or when
|
||||
the stream URL itself is not an HTTP(S) replay target.
|
||||
- Active replay is stored separately from the selected channel in
|
||||
`playlistState.activePlaybackUrl`. Inline and external players use
|
||||
`activePlaybackUrl ?? activeChannel.url`, and returning to live playback
|
||||
clears the override.
|
||||
|
||||
## Interfaces
|
||||
|
||||
@@ -272,6 +300,7 @@ interface Channel {
|
||||
epgParams?: string;
|
||||
timeshift?: string;
|
||||
catchup?: { type?: string; source?: string; days?: string };
|
||||
radio: string;
|
||||
http: {
|
||||
referrer: string;
|
||||
'user-agent': string;
|
||||
@@ -280,6 +309,18 @@ interface Channel {
|
||||
}
|
||||
```
|
||||
|
||||
### Playlist State Additions
|
||||
|
||||
```typescript
|
||||
interface PlaylistState {
|
||||
active: Channel | undefined;
|
||||
activePlaybackUrl: string | null;
|
||||
currentEpgProgram: EpgProgram | undefined;
|
||||
epgAvailable: boolean;
|
||||
channels: Channel[];
|
||||
}
|
||||
```
|
||||
|
||||
### EpgProgram Interface
|
||||
```typescript
|
||||
interface EpgProgram {
|
||||
|
||||
Reference in new issue
Block a user