From 436825bdec10774111e9c2df2edb8cb07021aaae Mon Sep 17 00:00:00 2001 From: 4gray <4gray@users.noreply.github.com> Date: Sun, 6 Sep 2026 11:00:09 +0200 Subject: [PATCH] fix(xtream): try advertised TS after initial web HLS HTTP failure (#1558) * fix(xtream): try advertised TS after initial web HLS HTTP failure * refactor(playback): extract fullscreen channel panel state * test(xtream): keep synthetic media within the mock project --- .changes/xtream-auto-live-ts-fallback.md | 7 + AGENTS.md | 12 + CLAUDE.md | 12 + .../src/xtream-live-format.e2e.ts | 88 ++++++ .../src/xtream-live-format.fixture.ts | 79 +++++ apps/web-e2e/src/xtream-live-format.e2e.ts | 146 +++++++++ .../web-e2e/src/xtream-live-format.fixture.ts | 79 +++++ apps/web/src/assets/i18n/de.json | 2 +- apps/web/src/assets/i18n/en.json | 2 +- apps/web/src/assets/i18n/ru.json | 2 +- .../src/app/live-format-fixture.ts | 54 ++++ apps/xtream-mock-server/src/app/scenarios.ts | 11 + .../xtream-mock-server/src/app/server.spec.ts | 25 ++ apps/xtream-mock-server/src/app/server.ts | 2 + .../xtream-mock-server/src/fixtures/README.md | 15 + .../src/fixtures/live.mpegts | Bin 0 -> 310952 bytes docs/architecture/embedded-inline-playback.md | 9 +- .../xtream-portal-compatibility.md | 52 ++++ .../lib/services/xtream-url.service.spec.ts | 42 +++ .../src/lib/services/xtream-url.service.ts | 23 ++ .../live-stream-layout.component.spec.ts | 11 + .../live-stream-layout.component.ts | 23 ++ .../src/lib/portal-playback.interface.ts | 2 + .../art-player/art-player-video-session.ts | 8 +- .../lib/art-player/art-player.component.ts | 2 + .../html-video-element-session.ts | 8 +- .../html-video-player.component.ts | 2 + .../lib/vjs-player/vjs-player.component.ts | 35 ++- .../vjs-player/vjs-video-element-session.ts | 13 +- .../web-player-channel-panel-state.ts | 30 ++ .../web-player-live-auto-format.spec.ts | 184 +++++++++++ .../web-player-live-auto-format.ts | 171 +++++++++++ .../web-player-recovery-controller.ts | 7 + .../web-player-view.component.html | 3 + ...-player-view.component.live-format.spec.ts | 288 ++++++++++++++++++ .../web-player-view.component.ts | 72 +++-- .../web-player-view.spec-stubs.ts | 3 + 37 files changed, 1457 insertions(+), 67 deletions(-) create mode 100644 .changes/xtream-auto-live-ts-fallback.md create mode 100644 apps/electron-backend-e2e/src/xtream-live-format.e2e.ts create mode 100644 apps/electron-backend-e2e/src/xtream-live-format.fixture.ts create mode 100644 apps/web-e2e/src/xtream-live-format.e2e.ts create mode 100644 apps/web-e2e/src/xtream-live-format.fixture.ts create mode 100644 apps/xtream-mock-server/src/app/live-format-fixture.ts create mode 100644 apps/xtream-mock-server/src/fixtures/README.md create mode 100644 apps/xtream-mock-server/src/fixtures/live.mpegts create mode 100644 libs/ui/playback/src/lib/web-player-view/web-player-channel-panel-state.ts create mode 100644 libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.spec.ts create mode 100644 libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.ts create mode 100644 libs/ui/playback/src/lib/web-player-view/web-player-view.component.live-format.spec.ts diff --git a/.changes/xtream-auto-live-ts-fallback.md b/.changes/xtream-auto-live-ts-fallback.md new file mode 100644 index 000000000..097814030 --- /dev/null +++ b/.changes/xtream-auto-live-ts-fallback.md @@ -0,0 +1,7 @@ +--- +type: fix +area: xtream +issues: [1513] +--- + +Xtream Live TV in Auto can try advertised TS once when HLS initially fails with an HTTP error in a web player. The selected player and stream headers are kept. Settings explain the manual TS workaround for external players, Embedded MPV, and HLS retries that never report a terminal failure. diff --git a/AGENTS.md b/AGENTS.md index 4177fc024..87948701d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -272,6 +272,18 @@ scrollbar and guarded initial page focus. Contracts: `docs/architecture/iptvnator-ui-guidelines.md` and `docs/architecture/portal-detail-navigation.md`. +## Xtream Live Auto Format + +The routed Xtream live host supplies `liveAutoTsUrl` only for Auto with explicit +HLS+TS account evidence, using the canonical URL builder and original headers. +The same web player may try TS once after an owned initial terminal HTTP failure, +before `playing`; the old transport unmounts before the guarded render callback +starts TS. No player preference or playlist cache changes. Manual formats, +unknown formats, DRM, VOD/catch-up and stale sessions are excluded. External +MPV/VLC and Embedded MPV retain manual TS; Video.js segment retry cycles without +a terminal diagnostic also need manual TS. Contract and full support matrix: +`docs/architecture/xtream-portal-compatibility.md` (Initial Auto HLS failure). + ## Radio / Audio Player M3U playlists can contain radio channels identified by the `radio="true"` attribute on `#EXTINF` lines. When a radio channel is selected: diff --git a/CLAUDE.md b/CLAUDE.md index 299ff6ab8..52769fda7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -782,6 +782,18 @@ categories by provider ID and type. See `docs/architecture/category-management.m ### Key Features +#### Xtream Live Auto Format + +The routed Xtream live host supplies `liveAutoTsUrl` only for Auto with explicit +HLS+TS account evidence, using the canonical URL builder and original headers. +The same web player may try TS once after an owned initial terminal HTTP failure, +before `playing`; the old transport unmounts before the guarded render callback +starts TS. No player preference or playlist cache changes. Manual formats, +unknown formats, DRM, VOD/catch-up and stale sessions are excluded. External +MPV/VLC and Embedded MPV retain manual TS; Video.js segment retry cycles without +a terminal diagnostic also need manual TS. Contract and full support matrix: +`docs/architecture/xtream-portal-compatibility.md` (Initial Auto HLS failure). + #### M3U URL User-Agent - The URL import form accepts an optional User-Agent and stores it as diff --git a/apps/electron-backend-e2e/src/xtream-live-format.e2e.ts b/apps/electron-backend-e2e/src/xtream-live-format.e2e.ts new file mode 100644 index 000000000..c4087421c --- /dev/null +++ b/apps/electron-backend-e2e/src/xtream-live-format.e2e.ts @@ -0,0 +1,88 @@ +import { + closeElectronApp, + expect, + launchElectronApp, + openSources, + openSourceEditor, + updateSourceDialog, + saveSourceDialog, + sourceRowByTitle, + test, +} from './electron-test-fixtures'; +import { + addLiveFormatPortal, + configureLiveFormat, + expectLiveFormatPlaying, + liveChannels, + observeLiveFormatMedia, +} from './xtream-live-format.fixture'; + +for (const player of ['html5', 'artplayer'] as const) { + test(`@electron @xtream Auto live format ${player}: failing segment to playable TS`, async ({ + dataDir, + }) => { + test.setTimeout(120_000); + const app = await launchElectronApp(dataDir, { + args: ['--autoplay-policy=no-user-gesture-required'], + }); + try { + const page = app.mainWindow; + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, player); + await addLiveFormatPortal(page); + await openSources(page); + const dialog = await openSourceEditor(page, 'Synthetic live'); + await updateSourceDialog(dialog, { + userAgent: 'IPTVnator-1513-fixture', + }); + await saveSourceDialog(page, dialog); + await sourceRowByTitle(page, 'Synthetic live').first().click(); + await page + .getByRole('link', { name: 'Live TV', exact: true }) + .click(); + await page.locator('.context-panel .category-item').first().click(); + const [tsResponse] = await Promise.all([ + page.waitForResponse( + (response) => response.url().endsWith('/10000.ts'), + { timeout: 60_000 } + ), + liveChannels(page).first().click(), + expectLiveFormatPlaying(page, player), + ]); + expect(await tsResponse.headerValue('x-fixture-user-agent')).toBe( + 'IPTVnator-1513-fixture' + ); + + expect(media).toContainEqual({ file: '10000.m3u8', status: 200 }); + expect(media).toContainEqual({ + file: 'denied-segment.ts', + status: 403, + }); + expect(media.filter((r) => r.file === '10000.ts')).toEqual([ + { file: '10000.ts', status: 200 }, + ]); + } finally { + await closeElectronApp(app); + } + }); +} + +test('@electron @xtream Video.js supports the manual TS workaround', async ({ + dataDir, +}) => { + const app = await launchElectronApp(dataDir, { + args: ['--autoplay-policy=no-user-gesture-required'], + }); + try { + const page = app.mainWindow; + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'videojs', 'ts'); + await addLiveFormatPortal(page); + await liveChannels(page).first().click(); + await expectLiveFormatPlaying(page, 'videojs'); + expect(media.some((r) => r.file.endsWith('.m3u8'))).toBe(false); + expect(media.filter((r) => r.file === '10000.ts')).toHaveLength(1); + } finally { + await closeElectronApp(app); + } +}); diff --git a/apps/electron-backend-e2e/src/xtream-live-format.fixture.ts b/apps/electron-backend-e2e/src/xtream-live-format.fixture.ts new file mode 100644 index 000000000..a86937ca7 --- /dev/null +++ b/apps/electron-backend-e2e/src/xtream-live-format.fixture.ts @@ -0,0 +1,79 @@ +import { expect, type Page } from '@playwright/test'; + +export const liveFormatMock = `http://localhost:${process.env['XTREAM_MOCK_PORT'] ?? '3211'}`; +export type LiveFormatPlayer = 'html5' | 'videojs' | 'artplayer'; + +export async function configureLiveFormat( + page: Page, + player: LiveFormatPlayer, + format = 'auto' +) { + await page.getByRole('link', { name: 'Open settings' }).click(); + await page.locator('[data-test-id="settings-section-playback"]').click(); + await page.locator('[data-test-id="select-video-player"]').click(); + await page + .getByRole('option', { + name: { + html5: 'HTML5 video player', + videojs: 'Video.js player', + artplayer: 'ArtPlayer', + }[player], + exact: true, + }) + .click(); + await page.locator('[data-test-id="select-stream-format"]').click(); + await page.getByRole('option', { name: format, exact: true }).click(); + if (player !== 'videojs' || format !== 'auto') { + const save = page.getByRole('button', { name: 'Save changes' }); + await expect(save).toBeVisible(); + await save.click(); + await expect(save).toBeHidden(); + } + await page.getByRole('button', { name: 'Back', exact: true }).click(); +} + +export async function addLiveFormatPortal(page: Page) { + await page.getByRole('button', { name: 'Add playlist' }).click(); + const dialog = page.getByRole('dialog'); + await dialog.getByRole('radio', { name: /Xtream credentials/i }).click(); + await dialog.locator('#title').fill('Synthetic live'); + await dialog.locator('#serverUrl').fill(liveFormatMock); + await dialog.locator('#username').fill('live-fallback'); + await dialog.locator('#password').fill('live-fallback'); + await dialog.getByRole('button', { name: 'Add', exact: true }).click(); + await page.waitForURL(/xtreams.*vod/); + await page.getByRole('link', { name: 'Live TV', exact: true }).click(); + await page.locator('.context-panel .category-item').first().click(); + await expect(liveChannels(page).first()).toBeVisible(); +} + +export const liveChannels = (page: Page) => + page.locator('app-live-stream-layout [data-test-id="channel-item"]'); +export function observeLiveFormatMedia(page: Page) { + const media: { file: string; status: number }[] = []; + page.on('response', (response) => { + if (response.url().startsWith(`${liveFormatMock}/live/`)) + media.push({ + file: new URL(response.url()).pathname.split('/').pop() ?? '', + status: response.status(), + }); + }); + return media; +} +export async function expectLiveFormatPlaying( + page: Page, + player: LiveFormatPlayer +) { + await expect( + page.locator( + `app-${player === 'html5' ? 'html-video' : player === 'videojs' ? 'vjs' : 'art'}-player` + ) + ).toBeVisible(); + const video = page.locator('app-web-player-view video').first(); + await expect + .poll(() => video.evaluate((v: HTMLVideoElement) => v.currentTime), { + timeout: 50_000, + }) + .toBeGreaterThan(0.5); + return video; +} diff --git a/apps/web-e2e/src/xtream-live-format.e2e.ts b/apps/web-e2e/src/xtream-live-format.e2e.ts new file mode 100644 index 000000000..71fe72182 --- /dev/null +++ b/apps/web-e2e/src/xtream-live-format.e2e.ts @@ -0,0 +1,146 @@ +import { expect, test } from './fixtures'; +import { interceptProviderTargetRegistration } from './provider-target-route'; +import { + addLiveFormatPortal, + configureLiveFormat, + expectLiveFormatPlaying, + liveChannels, + liveFormatMock, + observeLiveFormatMedia, +} from './xtream-live-format.fixture'; + +test.use({ + launchOptions: { args: ['--autoplay-policy=no-user-gesture-required'] }, + serviceWorkers: 'block', +}); +test.skip( + ({ browserName }) => browserName !== 'chromium', + 'Chromium media engines' +); +test.beforeEach(async ({ page }) => { + test.setTimeout(100_000); + await interceptProviderTargetRegistration(page); + await page.route('**/localhost:3000/xtream**', async (route) => { + const url = new URL(route.request().url()); + url.host = new URL(liveFormatMock).host; + await route.continue({ url: url.toString() }); + }); + await page.goto('/'); +}); + +for (const player of ['html5', 'artplayer'] as const) { + for (const channel of [0, 1]) { + test(`@web @xtream Auto live format ${player}: ${channel ? 'manifest' : 'segment'} 403 then playable TS`, async ({ + page, + }) => { + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, player); + await addLiveFormatPortal(page); + await liveChannels(page).nth(channel).click(); + await expectLiveFormatPlaying(page, player); + if (!channel) + expect(media).toContainEqual({ + file: '10000.m3u8', + status: 200, + }); + expect(media).toContainEqual({ + file: channel ? '10001.m3u8' : 'denied-segment.ts', + status: 403, + }); + expect( + media.filter((r) => r.file === `${10000 + channel}.ts`) + ).toEqual([{ file: `${10000 + channel}.ts`, status: 200 }]); + await expect( + page.locator('[data-test-id="playback-diagnostic-banner"]') + ).toBeHidden(); + }); + } +} + +test('@web @xtream Auto live format: TS failure is terminal without a cycle', async ({ + page, +}) => { + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'html5'); + await addLiveFormatPortal(page); + await liveChannels(page).nth(2).click(); + const banner = page.locator('[data-test-id="playback-diagnostic-banner"]'); + await expect(banner).toBeVisible({ timeout: 50_000 }); + expect(media.filter((r) => r.file === '10002.ts')).toEqual([ + { file: '10002.ts', status: 403 }, + ]); + await expect(banner).toContainText(/MPEG-TS|mpegts/i); +}); + +for (const format of ['ts', 'm3u8']) { + test(`@web @xtream Auto live format: manual ${format} wins`, async ({ + page, + }) => { + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'html5', format); + await addLiveFormatPortal(page); + await liveChannels(page).first().click(); + if (format === 'ts') { + await expectLiveFormatPlaying(page, 'html5'); + expect(media.some((r) => r.file.endsWith('.m3u8'))).toBe(false); + } else { + await expect( + page.locator('[data-test-id="playback-diagnostic-banner"]') + ).toBeVisible({ timeout: 50_000 }); + expect(media.some((r) => r.file === '10000.ts')).toBe(false); + } + }); +} + +test('@web @xtream Auto live format: channel switch cancels delayed HLS failure', async ({ + page, +}) => { + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'html5'); + await addLiveFormatPortal(page); + const pending = page.waitForRequest('**/delayed-segment.ts'); + await liveChannels(page).nth(3).click(); + await pending; + await liveChannels(page).nth(1).click(); + await expectLiveFormatPlaying(page, 'html5'); + expect(media.some((r) => r.file === '10003.ts')).toBe(false); + expect(media.filter((r) => r.file === '10001.ts')).toHaveLength(1); +}); + +test('@web @xtream Auto live format: no TS advertisement means no downgrade', async ({ + page, +}) => { + await page.route('**/localhost:3000/xtream**', async (route) => { + const url = new URL(route.request().url()); + url.host = new URL(liveFormatMock).host; + const response = await route.fetch({ url: url.toString() }); + const json = await response.json(); + if (json.payload?.user_info) + json.payload.user_info.allowed_output_formats = ['m3u8']; + await route.fulfill({ response, json }); + }); + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'html5'); + await addLiveFormatPortal(page); + await liveChannels(page).first().click(); + await expect( + page.locator('[data-test-id="playback-diagnostic-banner"]') + ).toBeVisible({ timeout: 50_000 }); + expect(media.some((r) => r.file === '10000.ts')).toBe(false); +}); + +test('@web @xtream Auto live format: leaving the host aborts pending media without TS', async ({ + page, +}) => { + const media = observeLiveFormatMedia(page); + await configureLiveFormat(page, 'html5'); + await addLiveFormatPortal(page); + const pending = page.waitForRequest('**/delayed-segment.ts'); + await liveChannels(page).nth(3).click(); + const request = await pending; + const aborted = page.waitForEvent('requestfailed', (r) => r === request); + await page.getByRole('link', { name: 'Open settings' }).click(); + await aborted; + expect(media.some((r) => r.file === '10003.ts')).toBe(false); + await expect(page.locator('app-web-player-view')).toHaveCount(0); +}); diff --git a/apps/web-e2e/src/xtream-live-format.fixture.ts b/apps/web-e2e/src/xtream-live-format.fixture.ts new file mode 100644 index 000000000..a86937ca7 --- /dev/null +++ b/apps/web-e2e/src/xtream-live-format.fixture.ts @@ -0,0 +1,79 @@ +import { expect, type Page } from '@playwright/test'; + +export const liveFormatMock = `http://localhost:${process.env['XTREAM_MOCK_PORT'] ?? '3211'}`; +export type LiveFormatPlayer = 'html5' | 'videojs' | 'artplayer'; + +export async function configureLiveFormat( + page: Page, + player: LiveFormatPlayer, + format = 'auto' +) { + await page.getByRole('link', { name: 'Open settings' }).click(); + await page.locator('[data-test-id="settings-section-playback"]').click(); + await page.locator('[data-test-id="select-video-player"]').click(); + await page + .getByRole('option', { + name: { + html5: 'HTML5 video player', + videojs: 'Video.js player', + artplayer: 'ArtPlayer', + }[player], + exact: true, + }) + .click(); + await page.locator('[data-test-id="select-stream-format"]').click(); + await page.getByRole('option', { name: format, exact: true }).click(); + if (player !== 'videojs' || format !== 'auto') { + const save = page.getByRole('button', { name: 'Save changes' }); + await expect(save).toBeVisible(); + await save.click(); + await expect(save).toBeHidden(); + } + await page.getByRole('button', { name: 'Back', exact: true }).click(); +} + +export async function addLiveFormatPortal(page: Page) { + await page.getByRole('button', { name: 'Add playlist' }).click(); + const dialog = page.getByRole('dialog'); + await dialog.getByRole('radio', { name: /Xtream credentials/i }).click(); + await dialog.locator('#title').fill('Synthetic live'); + await dialog.locator('#serverUrl').fill(liveFormatMock); + await dialog.locator('#username').fill('live-fallback'); + await dialog.locator('#password').fill('live-fallback'); + await dialog.getByRole('button', { name: 'Add', exact: true }).click(); + await page.waitForURL(/xtreams.*vod/); + await page.getByRole('link', { name: 'Live TV', exact: true }).click(); + await page.locator('.context-panel .category-item').first().click(); + await expect(liveChannels(page).first()).toBeVisible(); +} + +export const liveChannels = (page: Page) => + page.locator('app-live-stream-layout [data-test-id="channel-item"]'); +export function observeLiveFormatMedia(page: Page) { + const media: { file: string; status: number }[] = []; + page.on('response', (response) => { + if (response.url().startsWith(`${liveFormatMock}/live/`)) + media.push({ + file: new URL(response.url()).pathname.split('/').pop() ?? '', + status: response.status(), + }); + }); + return media; +} +export async function expectLiveFormatPlaying( + page: Page, + player: LiveFormatPlayer +) { + await expect( + page.locator( + `app-${player === 'html5' ? 'html-video' : player === 'videojs' ? 'vjs' : 'art'}-player` + ) + ).toBeVisible(); + const video = page.locator('app-web-player-view video').first(); + await expect + .poll(() => video.evaluate((v: HTMLVideoElement) => v.currentTime), { + timeout: 50_000, + }) + .toBeGreaterThan(0.5); + return video; +} diff --git a/apps/web/src/assets/i18n/de.json b/apps/web/src/assets/i18n/de.json index b1dbcbd5c..3cc695184 100644 --- a/apps/web/src/assets/i18n/de.json +++ b/apps/web/src/assets/i18n/de.json @@ -358,7 +358,7 @@ "PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Dockt den Serienplayer in breiten Fenstern links an und zeigt daneben die kommenden Folgen an.", "FULLSCREEN_CHANNEL_PANEL": "Senderliste im Vollbild", "FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Bewege die Maus im Vollbild an den linken Rand oder drücke C, um die Senderliste einzublenden und den Sender zu wechseln, ohne das Vollbild zu verlassen.", - "STREAM_FORMAT_DESCRIPTION": "Standard-Streamformat auswählen (Xtream)", + "STREAM_FORMAT_DESCRIPTION": "Auto bevorzugt HLS. Schlägt Live-TV in MPV, VLC oder Embedded MPV fehl, den Player stoppen, ts wählen, speichern und den Sender erneut öffnen. Webplayer können bei einem anfänglichen HLS-HTTP-Fehler einmal angebotenes TS versuchen.", "LANGUAGE_DESCRIPTION": "Wählen Sie die Sprache der Anwendung aus", "THEME_DESCRIPTION": "Wählen Sie das visuelle Thema der Anwendung aus", "COVER_SIZE": "Cover-Größe", diff --git a/apps/web/src/assets/i18n/en.json b/apps/web/src/assets/i18n/en.json index ec0111811..a2c4f1b68 100644 --- a/apps/web/src/assets/i18n/en.json +++ b/apps/web/src/assets/i18n/en.json @@ -358,7 +358,7 @@ "PLAYER_UP_NEXT_RAIL_DESCRIPTION": "On wide windows, dock the series player to the left and show the upcoming episodes beside it.", "FULLSCREEN_CHANNEL_PANEL": "Channel list in fullscreen", "FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Rest the mouse on the left edge or press C while in fullscreen to slide in the channel list and switch channels without leaving fullscreen.", - "STREAM_FORMAT_DESCRIPTION": "Select default stream format (xtream)", + "STREAM_FORMAT_DESCRIPTION": "Auto prefers HLS. If live playback fails in MPV, VLC or Embedded MPV, stop the player, select ts, save and reopen the channel. Web players can try advertised TS once after an initial HLS HTTP failure.", "LANGUAGE_DESCRIPTION": "Select language of the application", "THEME_DESCRIPTION": "Select visual theme of the application", "COVER_SIZE": "Cover size", diff --git a/apps/web/src/assets/i18n/ru.json b/apps/web/src/assets/i18n/ru.json index 9c0550a57..2d871c185 100644 --- a/apps/web/src/assets/i18n/ru.json +++ b/apps/web/src/assets/i18n/ru.json @@ -358,7 +358,7 @@ "PLAYER_UP_NEXT_RAIL_DESCRIPTION": "В широких окнах закреплять плеер сериала слева и показывать следующие серии рядом с ним.", "FULLSCREEN_CHANNEL_PANEL": "Список каналов в полноэкранном режиме", "FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Подведите мышь к левому краю или нажмите C в полноэкранном режиме, чтобы выдвинуть список каналов и переключить канал, не выходя из полноэкранного режима.", - "STREAM_FORMAT_DESCRIPTION": "Выбрать формат потока по умолчанию (Xtream)", + "STREAM_FORMAT_DESCRIPTION": "Auto предпочитает HLS. При сбое в MPV, VLC или Embedded MPV остановите плеер, выберите ts, сохраните настройки и снова откройте канал. Веб-плееры могут один раз попробовать заявленный TS после первоначальной HTTP-ошибки HLS.", "LANGUAGE_DESCRIPTION": "Выбрать язык приложения", "THEME_DESCRIPTION": "Выбрать визуальную тему оформления", "COVER_SIZE": "Размер обложки", diff --git a/apps/xtream-mock-server/src/app/live-format-fixture.ts b/apps/xtream-mock-server/src/app/live-format-fixture.ts new file mode 100644 index 000000000..863b32ed9 --- /dev/null +++ b/apps/xtream-mock-server/src/app/live-format-fixture.ts @@ -0,0 +1,54 @@ +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import type { Express } from 'express'; + +/** Entirely local synthetic media. IDs exercise initial manifest and segment failures. */ +export function installLiveFormatFixture(app: Express): void { + app.get('/live/live-fallback/live-fallback/:file', (request, response) => { + const file = String(request.params['file']); + response.set('Cache-Control', 'no-store'); + response.set('X-Fixture-User-Agent', request.get('user-agent') ?? ''); + if (file.endsWith('.m3u8')) { + if (file === '10001.m3u8') { + response.status(403).end(); + return; + } + response + .type('application/vnd.apple.mpegurl') + .send( + [ + '#EXTM3U', + '#EXT-X-VERSION:3', + '#EXT-X-TARGETDURATION:6', + '#EXT-X-MEDIA-SEQUENCE:0', + '#EXTINF:6,', + file === '10003.m3u8' + ? 'delayed-segment.ts' + : 'denied-segment.ts', + '#EXT-X-ENDLIST', + '', + ].join('\n') + ); + return; + } + if (file === 'delayed-segment.ts') { + const timer = setTimeout(() => response.status(403).end(), 1500); + response.on('close', () => clearTimeout(timer)); + return; + } + if (file === 'denied-segment.ts' || file === '10002.ts') { + response.status(403).end(); + return; + } + response + .type('video/mp2t') + .send( + readFileSync( + join( + process.cwd(), + 'apps/xtream-mock-server/src/fixtures/live.mpegts' + ) + ) + ); + }); +} diff --git a/apps/xtream-mock-server/src/app/scenarios.ts b/apps/xtream-mock-server/src/app/scenarios.ts index 2452860c6..63b1b2dee 100644 --- a/apps/xtream-mock-server/src/app/scenarios.ts +++ b/apps/xtream-mock-server/src/app/scenarios.ts @@ -31,6 +31,17 @@ export interface ScenarioConfig { * Unknown credential pairs use a hash of "username:password" as seed. */ export const SCENARIOS: Record = { + 'live-fallback:live-fallback': { + name: 'live-format-fallback', + description: 'Local HLS failures and playable TS', + seed: 1513, + categoryCount: { live: 1, vod: 1, series: 1 }, + itemsPerCategory: 4, + seasonsPerSeries: 1, + episodesPerSeason: 1, + accountStatus: 'Active', + expiryDate: '2099-12-31', + }, 'user1:pass1': { name: 'default', description: 'Balanced portal — 8 categories, 40 items each', diff --git a/apps/xtream-mock-server/src/app/server.spec.ts b/apps/xtream-mock-server/src/app/server.spec.ts index 4a67b8194..82b65fd24 100644 --- a/apps/xtream-mock-server/src/app/server.spec.ts +++ b/apps/xtream-mock-server/src/app/server.spec.ts @@ -51,6 +51,31 @@ describe('Xtream mock server factory', () => { jest.restoreAllMocks(); }); + it('serves the synthetic manifest-success/segment-failure and TS alternatives locally', async () => { + const running = await startLoopbackServer( + createXtreamMockApp({ host: '127.0.0.1', port: 0 }) + ); + const base = `${running.origin}/live/live-fallback/live-fallback`; + try { + const manifest = await fetch(`${base}/10000.m3u8`); + expect(manifest.status).toBe(200); + expect(await manifest.text()).toContain('denied-segment.ts'); + expect((await fetch(`${base}/denied-segment.ts`)).status).toBe(403); + expect((await fetch(`${base}/10001.m3u8`)).status).toBe(403); + expect((await fetch(`${base}/10002.ts`)).status).toBe(403); + const ts = await fetch(`${base}/10000.ts`, { + headers: { 'User-Agent': 'synthetic' }, + }); + expect(ts.headers.get('x-fixture-user-agent')).toBe('synthetic'); + const bytes = new Uint8Array(await ts.arrayBuffer()); + expect(bytes.length).toBeGreaterThan(188); + expect(bytes[0]).toBe(0x47); + expect(bytes[188]).toBe(0x47); + } finally { + await running.close(); + } + }); + it('keeps performance controls absent unless explicitly enabled', async () => { const running = await startLoopbackServer( createXtreamMockApp({ host: '127.0.0.1', port: 0 }) diff --git a/apps/xtream-mock-server/src/app/server.ts b/apps/xtream-mock-server/src/app/server.ts index aac33a82d..95d80cd37 100644 --- a/apps/xtream-mock-server/src/app/server.ts +++ b/apps/xtream-mock-server/src/app/server.ts @@ -6,6 +6,7 @@ import express, { type Request, type Response, } from 'express'; +import { installLiveFormatFixture } from './live-format-fixture.js'; import { resetAll } from './data-store.js'; import { renderMarketingAssetSvg } from './generators/marketing.generator.js'; import { installPerformanceControlRoutes } from './performance-control-routes.js'; @@ -107,6 +108,7 @@ export function createXtreamMockApp( dispatchAction(request, response) ); }); + if (!controlEnabled) installLiveFormatFixture(app); installStreamRoutes(app, controlEnabled); app.get('/xtream', (request, response, next) => { dispatchWithControl(controller, request, response, next, 'proxy', () => diff --git a/apps/xtream-mock-server/src/fixtures/README.md b/apps/xtream-mock-server/src/fixtures/README.md new file mode 100644 index 000000000..330cf7f64 --- /dev/null +++ b/apps/xtream-mock-server/src/fixtures/README.md @@ -0,0 +1,15 @@ +# Synthetic playback fixtures + +`live.mpegts` is six seconds of generated color-pattern video and a sine wave, +H.264 baseline + AAC, used by the local Xtream live-format regression account. +No real provider media or credentials are included. + +Regenerate from the repository root with FFmpeg: + +```sh +ffmpeg -f lavfi -i testsrc2=size=160x90:rate=25 -f lavfi -i sine=frequency=440:sample_rate=48000 -t 6 -c:v libx264 -preset ultrafast -pix_fmt yuv420p -g 25 -c:a aac -b:a 48k -f mpegts apps/xtream-mock-server/src/fixtures/live.mpegts +``` + +The mock returns the fixture only for synthetic live-format account media; +manifest and denied-segment routes return controlled 200/403 responses. Web and +Electron E2E tests check advancing playback, not HTTP status alone. diff --git a/apps/xtream-mock-server/src/fixtures/live.mpegts b/apps/xtream-mock-server/src/fixtures/live.mpegts new file mode 100644 index 0000000000000000000000000000000000000000..22c6149ac775a60e9443b29ea2845894a17698f8 GIT binary patch literal 310952 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

n|iSRNpn0$hSJQ*dzr2f3_cOACwj3&-PM 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


ne~=-Xx#jSEQx9IQ9sP6CL` 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 z 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%0AX2Bre4q?Vw)K2wJfqu&Ui=~4FXpliaBW{ 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 bVIh`M9Q(#TBO@d0!utcsJ%um^)w}%%CTS|j literal 0 HcmV?d00001 diff --git a/docs/architecture/embedded-inline-playback.md b/docs/architecture/embedded-inline-playback.md index ed317b278..a2a4c8279 100644 --- a/docs/architecture/embedded-inline-playback.md +++ b/docs/architecture/embedded-inline-playback.md @@ -494,7 +494,7 @@ Video.js HTTP error is `network-error` and shows its status. Because an HTTP status is server/network evidence rather than decoding evidence, external decoding is not presented as a likely fix. -Video.js `8.23.9`, the default web player, runs HTTP streaming through bundled +Video.js `8.24.0`, the default web player, runs HTTP streaming through bundled VHS `3.17.5`. Its terminal `Player#error` crosses a separate allowlisted boundary built only from the public Video.js `MediaError` code/status, `metadata.errorType`, and the documented `player.tech().vhs` runtime property. @@ -841,7 +841,12 @@ original headers or credentials required to reconstruct a safe launch request. No recommendation mutates `Settings.player` or another persisted setting. Recovery recommendations never auto-switch a player or source and do not -replace the separate source-owner auto-failover feature. Attempts, overrides, +replace the separate source-owner auto-failover feature. The narrow Xtream +live Auto format contract is separate: a source owner may supply one advertised +TS transport to the same web player on an initial terminal HTTP failure. It +never chooses another engine, and its pending callback waits for the old +transport's render teardown. See [Initial Auto HLS failure](./xtream-portal-compatibility.md#initial-auto-hls-failure) +for eligibility, session ownership and the external/Embedded MPV/VHS limits. Attempts, overrides, resume handoff, and diagnostics are session-local: there is no persistent history, cross-session learning, correlation, or telemetry. diff --git a/docs/architecture/xtream-portal-compatibility.md b/docs/architecture/xtream-portal-compatibility.md index 71c1ce632..3dfc85bec 100644 --- a/docs/architecture/xtream-portal-compatibility.md +++ b/docs/architecture/xtream-portal-compatibility.md @@ -129,6 +129,58 @@ Manual `ts` and `m3u8` settings remain supported; when a manual setting is not allowed by the portal, URL construction falls back to the first provider-allowed format. +### Initial Auto HLS failure + +The routed Xtream Live TV host attaches `ResolvedPortalPlayback.liveAutoTsUrl` +only when the current user preference is Auto and the current account explicitly +advertises both HLS and TS. `XtreamUrlService.constructAutoLiveTsUrl` uses the +same credential encoding and provider-subpath URL builder as the initial URL; +no URL string replacement, manifest preflight, stream download, or API probe is +introduced. Unknown/empty formats and manual HLS/TS have no alternative. + +`WebPlayerLiveAutoFormat` may consume that alternative once per mounted logical +live session, in the same selected web player, after an owned terminal network +diagnostic with HTTP 4xx/5xx, before the native video element reports `playing`. +A successful manifest is not playback. HLS key/media/unknown-stage failures, +DRM payloads, content-info VOD/episodes, and catch-up are excluded. Generic +network failures, status zero, cancellation, timeouts without an HTTP response, +and decode errors keep the normal explicit recovery surface. + +The old application is first removed from the render tree. The next render +callback starts TS only after the web engine's synchronous loader teardown and +only while source, logical session and user intent still match. The TS payload +keeps the original headers, title and playback metadata; Electron applies them +through its existing scoped header handoff. HTTP-media requests retain the +existing transport/trust rules and do not feed new evidence or admission into +the separate portal-API host-connectivity guard. Recovery recommendations still +require a user action and never auto-switch engines. No settings or playlist +cache is changed. A TS failure displays normal recovery actions; Retry repeats +TS without rearming the automatic attempt. Changing the actual logical channel +or playlist, or mounting a new host, creates a new session; same-session metadata +or provider-source refresh does not rearm it. Same-channel replay and metadata +refresh preserve the chosen TS while the candidate URLs, headers and mode stay +the same; an actual transport/provider change discards that selection. This deliberately avoids a sticky +playlist preference and reevaluates advertised formats on the next channel. + +| Player/path | Initial Auto failure support | +| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| HTML5 / ArtPlayer, hls.js | One advertised TS attempt after terminal HLS manifest/level/segment HTTP failure; waits for the engine's own bounded retries | +| Video.js / VHS | Only an observable terminal HTTP diagnostic can trigger an attempt. A sole HLS rendition's failing segment can remain in VHS retry/exclusion cycles without such a diagnostic; use manual TS for that case | +| External MPV / VLC | Manual TS only. Process launch/exit and best-effort playing telemetry do not reliably identify the initial HLS media HTTP failure | +| Embedded MPV | Manual TS only; no equivalent structured HTTP diagnostic | +| Unified Favorites/Recent live resolution | Manual TS; it does not own fresh session account-format evidence | + +For manual recovery, stop the current player, choose **Settings > Playback > +Stream Format > ts**, save, and reopen the channel. This keeps the chosen player +and avoids a second uncorrelated external process. The settings description +explains this route. This is partial playback coverage of #1513, not a claim +that all external-player and VHS scenarios automatically recover. + +Synthetic regression media lives in the mock's `live-fallback:live-fallback` +account: HLS manifest 200 plus segment 403, manifest 403, a playable local +H.264/AAC TS alternative, a failing TS alternative, and a delayed HLS segment. +Tests assert actual video progress and the number of concrete TS requests. + If stored Xtream playback credentials contain an invalid server URL or blank username/password, stream URL construction returns an empty URL instead of throwing during playback. diff --git a/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.spec.ts b/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.spec.ts index a6599ab54..6dbdf3197 100644 --- a/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.spec.ts +++ b/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.spec.ts @@ -120,6 +120,48 @@ describe('XtreamUrlService', () => { expect(url).toBe('http://demo.example/live/demo/secret/101.ts'); }); + it('builds an Auto TS alternative with encoded credentials and the provider subpath', () => { + streamFormat.set(StreamFormat.AutoStreamFormat); + expect( + service.constructAutoLiveTsUrl( + { + serverUrl: + 'https://demo.example/panel/player_api.php?token=unused', + username: 'a/b', + password: 'x?y#z', + allowedOutputFormats: [' M3U8 ', ' TS '], + }, + 101 + ) + ).toBe('https://demo.example/panel/live/a%2Fb/x%3Fy%23z/101.ts'); + }); + + it.each([undefined, [], ['m3u8'], ['rtmp'], ['ts']])( + 'does not guess an HLS-to-TS alternative for %j', + (allowedOutputFormats) => { + streamFormat.set(StreamFormat.AutoStreamFormat); + expect( + service.constructAutoLiveTsUrl( + { ...credentials, allowedOutputFormats }, + 101 + ) + ).toBeUndefined(); + } + ); + + it.each([StreamFormat.TsStreamFormat, StreamFormat.M3u8StreamFormat])( + 'respects manual %s even with both formats advertised', + (format) => { + streamFormat.set(format); + expect( + service.constructAutoLiveTsUrl( + { ...credentials, allowedOutputFormats: ['m3u8', 'ts'] }, + 101 + ) + ).toBeUndefined(); + } + ); + it('constructs a VOD URL from catalog fields when metadata is empty', () => { const vodItem = { info: [], diff --git a/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.ts b/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.ts index b2c8650b6..9a60f698c 100644 --- a/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.ts +++ b/libs/portal/xtream/data-access/src/lib/services/xtream-url.service.ts @@ -113,6 +113,29 @@ export class XtreamUrlService { return `${normalizedCredentials.serverUrl}/live/${normalizedCredentials.username}/${normalizedCredentials.password}/${xtreamId}.${streamFormat}`; } + /** No probe: eligibility is explicit account evidence plus the user's Auto intent. */ + constructAutoLiveTsUrl( + credentials: XtreamCredentials, + xtreamId: number + ): string | undefined { + const requested = + this.settingsStore.streamFormat() ?? StreamFormat.AutoStreamFormat; + const formats = this.getNormalizedAllowedOutputFormats(credentials); + if ( + requested !== StreamFormat.AutoStreamFormat || + !formats?.includes('m3u8') || + !formats.includes('ts') + ) + return undefined; + return ( + this.constructLiveUrl( + credentials, + xtreamId, + StreamFormat.TsStreamFormat + ) || undefined + ); + } + /** * Construct VOD stream URL * Format: {serverUrl}/movie/{username}/{password}/{streamId}.{extension} diff --git a/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.spec.ts b/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.spec.ts index 0d4f486d5..49ecaa805 100644 --- a/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.spec.ts +++ b/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.spec.ts @@ -196,6 +196,7 @@ describe('LiveStreamLayoutComponent', () => { getFavorites: jest.fn().mockReturnValue(of([])), }; const xtreamUrlService = { + constructAutoLiveTsUrl: jest.fn(() => undefined), resolveCatchupUrl: jest .fn() .mockResolvedValue('https://example.com/timeshift.ts'), @@ -357,6 +358,16 @@ describe('LiveStreamLayoutComponent', () => { window.electron = originalElectron; }); + it('retires committed live playback when the playlist owner changes', () => { + fixture.detectChanges(); + component.playLive({ xtream_id: 10000, title: 'Synthetic' }); + expect(component.activePlayback()).not.toBeNull(); + currentPlaylist.set({ ...playlist, id: 'other-playlist' }); + fixture.detectChanges(); + expect(component.activePlayback()).toBeNull(); + expect(component.playbackSessionKey()).toBe(''); + }); + it('renders the controlled epg list for electron playback', () => { epgItems.set([ buildEpgItem( diff --git a/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.ts b/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.ts index e79e89b06..ad3d5cce4 100644 --- a/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.ts +++ b/libs/portal/xtream/feature/src/lib/live-stream-layout/live-stream-layout.component.ts @@ -372,6 +372,7 @@ export class LiveStreamLayoutComponent private unsubscribeRemoteChannelChange?: () => void; private unsubscribeRemoteCommand?: () => void; private playbackRequestId = 0; + private activePlaylistId: string | null = null; readonly usesEmbeddedPlayer = computed(() => this.portalPlayer.isEmbeddedPlayer() @@ -391,6 +392,16 @@ export class LiveStreamLayoutComponent favorites = new Map(); constructor() { + effect(() => { + const playlistId = this.xtreamStore.currentPlaylist()?.id ?? null; + if (this.activePlaylistId && this.activePlaylistId !== playlistId) { + this.playbackRequestId += 1; + this.activePlaylistId = null; + this.activePlayback.set(null); + this.activeLiveItemId.set(null); + this.activeCatchupProgram.set(null); + } + }); effect((onCleanup) => { const intervalId = window.setInterval(() => { this.currentTimeMs.set(Date.now()); @@ -547,8 +558,19 @@ export class LiveStreamLayoutComponent // store no-op. if (!remote) this.selectLiveItemCategory(item); this.activeLiveItemId.set(item.xtream_id); + const playlist = this.xtreamStore.currentPlaylist(); + this.activePlaylistId = playlist?.id ?? null; this.activePlayback.set({ streamUrl, + liveAutoTsUrl: playlist + ? this.xtreamUrlService.constructAutoLiveTsUrl( + playlist, + item.xtream_id + ) + : undefined, + userAgent: playlist?.userAgent, + referer: playlist?.referrer, + origin: playlist?.origin, title: item.title ?? item.name ?? '', thumbnail: item.poster_url ?? item.stream_icon ?? null, isLive: true, @@ -761,6 +783,7 @@ export class LiveStreamLayoutComponent return; } + this.activePlaylistId = playlist.id; this.activeCatchupProgram.set(program); this.activePlayback.set({ streamUrl: catchupUrl, diff --git a/libs/shared/interfaces/src/lib/portal-playback.interface.ts b/libs/shared/interfaces/src/lib/portal-playback.interface.ts index c06ebb8bc..9fdca6814 100644 --- a/libs/shared/interfaces/src/lib/portal-playback.interface.ts +++ b/libs/shared/interfaces/src/lib/portal-playback.interface.ts @@ -10,6 +10,8 @@ export interface PlayerContentInfo extends Omit< export interface ResolvedPortalPlayback { streamUrl: string; + /** Source-owner supplied, advertised TS alternative for Xtream live Auto only. */ + liveAutoTsUrl?: string; title: string; thumbnail?: string | null; isLive?: boolean; diff --git a/libs/ui/playback/src/lib/art-player/art-player-video-session.ts b/libs/ui/playback/src/lib/art-player/art-player-video-session.ts index c01485bf4..86570eb31 100644 --- a/libs/ui/playback/src/lib/art-player/art-player-video-session.ts +++ b/libs/ui/playback/src/lib/art-player/art-player-video-session.ts @@ -15,6 +15,7 @@ export interface ArtPlayerVideoSessionConfig { emitPlaybackIssue: (issue: PlaybackDiagnostic | null) => void; emitTimeUpdate: (value: { currentTime: number; duration: number }) => void; emitPlaybackEnded: () => void; + emitPlaybackStarted?: () => void; } /** Owns native video and ArtPlayer event listeners for one player instance. */ @@ -35,6 +36,11 @@ export class ArtPlayerVideoSession { ); }; + private readonly handlePlaying = (): void => { + this.clearPlaybackIssue(); + this.config.emitPlaybackStarted?.(); + }; + private readonly clearPlaybackIssue = (): void => { this.config.emitPlaybackIssue(null); }; @@ -73,7 +79,7 @@ export class ArtPlayerVideoSession { > = [ ['error', this.handleNativePlaybackError], ['loadeddata', this.clearPlaybackIssue], - ['playing', this.clearPlaybackIssue], + ['playing', this.handlePlaying], ['volumechange', this.handleVolumeChange], ['ended', this.handlePlaybackEnded], ]; diff --git a/libs/ui/playback/src/lib/art-player/art-player.component.ts b/libs/ui/playback/src/lib/art-player/art-player.component.ts index 88f7f629a..79903205f 100644 --- a/libs/ui/playback/src/lib/art-player/art-player.component.ts +++ b/libs/ui/playback/src/lib/art-player/art-player.component.ts @@ -66,6 +66,7 @@ export class ArtPlayerComponent implements OnInit, OnDestroy, OnChanges { }>(); readonly playbackIssue = output(); readonly playbackEnded = output(); + readonly playbackStarted = output(); readonly previousEpisodeRequested = output(); readonly nextEpisodeRequested = output(); @@ -187,6 +188,7 @@ export class ArtPlayerComponent implements OnInit, OnDestroy, OnChanges { emitPlaybackIssue: (issue) => this.playbackIssue.emit(issue), emitTimeUpdate: (value) => this.timeUpdate.emit(value), emitPlaybackEnded: () => this.playbackEnded.emit(), + emitPlaybackStarted: () => this.playbackStarted.emit(), }); this.videoSession = videoSession; videoSession.attach(); diff --git a/libs/ui/playback/src/lib/html-video-player/html-video-element-session.ts b/libs/ui/playback/src/lib/html-video-player/html-video-element-session.ts index ef9593c54..190fce46c 100644 --- a/libs/ui/playback/src/lib/html-video-player/html-video-element-session.ts +++ b/libs/ui/playback/src/lib/html-video-player/html-video-element-session.ts @@ -15,6 +15,7 @@ export interface HtmlVideoElementSessionConfig { emitPlaybackIssue: (issue: PlaybackDiagnostic | null) => void; emitTimeUpdate: (value: { currentTime: number; duration: number }) => void; emitPlaybackEnded: () => void; + emitPlaybackStarted?: () => void; } export class HtmlVideoElementSession { @@ -34,6 +35,11 @@ export class HtmlVideoElementSession { ); }; + private readonly handlePlaying = (): void => { + this.clearPlaybackIssue(); + this.config.emitPlaybackStarted?.(); + }; + private readonly clearPlaybackIssue = (): void => { this.config.emitPlaybackIssue(null); }; @@ -71,7 +77,7 @@ export class HtmlVideoElementSession { ['timeupdate', this.handleTimeUpdate], ['error', this.handleNativePlaybackError], ['loadeddata', this.clearPlaybackIssue], - ['playing', this.clearPlaybackIssue], + ['playing', this.handlePlaying], ['ended', this.handlePlaybackEnded], ]; diff --git a/libs/ui/playback/src/lib/html-video-player/html-video-player.component.ts b/libs/ui/playback/src/lib/html-video-player/html-video-player.component.ts index 13dd005fc..652651186 100644 --- a/libs/ui/playback/src/lib/html-video-player/html-video-player.component.ts +++ b/libs/ui/playback/src/lib/html-video-player/html-video-player.component.ts @@ -87,6 +87,7 @@ export class HtmlVideoPlayerComponent implements OnInit, OnChanges, OnDestroy { }>(); @Output() playbackIssue = new EventEmitter(); @Output() playbackEnded = new EventEmitter(); + @Output() playbackStarted = new EventEmitter(); @Output() previousEpisodeRequested = new EventEmitter(); @Output() nextEpisodeRequested = new EventEmitter(); @@ -382,6 +383,7 @@ export class HtmlVideoPlayerComponent implements OnInit, OnChanges, OnDestroy { emitPlaybackIssue: (issue) => this.playbackIssue.emit(issue), emitTimeUpdate: (value) => this.timeUpdate.emit(value), emitPlaybackEnded: () => this.playbackEnded.emit(), + emitPlaybackStarted: () => this.playbackStarted.emit(), }); return this.videoSession; } diff --git a/libs/ui/playback/src/lib/vjs-player/vjs-player.component.ts b/libs/ui/playback/src/lib/vjs-player/vjs-player.component.ts index a63b78131..5756d95cd 100644 --- a/libs/ui/playback/src/lib/vjs-player/vjs-player.component.ts +++ b/libs/ui/playback/src/lib/vjs-player/vjs-player.component.ts @@ -90,6 +90,7 @@ export class VjsPlayerComponent implements OnInit, OnChanges, OnDestroy { }>(); readonly playbackIssue = output(); readonly playbackEnded = output(); + readonly playbackStarted = output(); readonly previousEpisodeRequested = output(); readonly nextEpisodeRequested = output(); @@ -103,6 +104,7 @@ export class VjsPlayerComponent implements OnInit, OnChanges, OnDestroy { releasePictureInPicture: !this.sharedControls, clearPlaybackIssue: () => this.playbackIssue.emit(null), emitPlaybackEnded: () => this.playbackEnded.emit(), + emitPlaybackStarted: () => this.playbackStarted.emit(), }); private readonly mpegTsSession = new VjsMpegTsSession({ player: () => this.player, @@ -146,7 +148,7 @@ export class VjsPlayerComponent implements OnInit, OnChanges, OnDestroy { vjsOptions, this.handlePlayerReady ) as unknown as VideoJsPlayer; - this.bindPlayerEvents(); + this.bindPlayerEvents(true); initializeVjsPlugins(this.player); if (!this.sharedControls) { this.legacyShortcuts = attachVjsLegacyShortcuts({ @@ -220,7 +222,7 @@ export class VjsPlayerComponent implements OnInit, OnChanges, OnDestroy { this.mpegTsSession.destroy(); this.videoSession.destroy(); if (this.player) { - this.unbindPlayerEvents(); + this.bindPlayerEvents(false); this.player.dispose(); } } @@ -410,21 +412,18 @@ export class VjsPlayerComponent implements OnInit, OnChanges, OnDestroy { this.legacyTracks.bind(); } - private bindPlayerEvents(): void { - this.player.on('loadedmetadata', this.handleLoadedMetadata); - this.player.on('error', this.handleVideoJsError); - this.player.on('volumechange', this.handleVolumeChange); - this.player.on('timeupdate', this.handleTimeUpdate); - this.player.on('pause', this.handlePauseForReset); - this.player.on('playerreset', this.handlePlayerReset); - } - - private unbindPlayerEvents(): void { - this.player.off('loadedmetadata', this.handleLoadedMetadata); - this.player.off('error', this.handleVideoJsError); - this.player.off('volumechange', this.handleVolumeChange); - this.player.off('timeupdate', this.handleTimeUpdate); - this.player.off('pause', this.handlePauseForReset); - this.player.off('playerreset', this.handlePlayerReset); + private bindPlayerEvents(bind: boolean): void { + const events = { + loadedmetadata: this.handleLoadedMetadata, + error: this.handleVideoJsError, + volumechange: this.handleVolumeChange, + timeupdate: this.handleTimeUpdate, + pause: this.handlePauseForReset, + playerreset: this.handlePlayerReset, + }; + for (const [event, listener] of Object.entries(events)) { + if (bind) this.player.on(event, listener); + else this.player.off(event, listener); + } } } diff --git a/libs/ui/playback/src/lib/vjs-player/vjs-video-element-session.ts b/libs/ui/playback/src/lib/vjs-player/vjs-video-element-session.ts index 5d2189687..3f9292e59 100644 --- a/libs/ui/playback/src/lib/vjs-player/vjs-video-element-session.ts +++ b/libs/ui/playback/src/lib/vjs-player/vjs-video-element-session.ts @@ -4,12 +4,18 @@ export interface VjsVideoElementSessionConfig { releasePictureInPicture?: boolean; clearPlaybackIssue: () => void; emitPlaybackEnded: () => void; + emitPlaybackStarted?: () => void; } export class VjsVideoElementSession { private currentVideo: HTMLVideoElement | null = null; private destroyed = false; + private readonly handlePlaying = (): void => { + this.clearPlaybackIssue(); + this.config.emitPlaybackStarted?.(); + }; + private readonly clearPlaybackIssue = () => { this.config.clearPlaybackIssue(); }; @@ -28,7 +34,7 @@ export class VjsVideoElementSession { this.detach(); this.currentVideo = video; video.addEventListener('loadeddata', this.clearPlaybackIssue); - video.addEventListener('playing', this.clearPlaybackIssue); + video.addEventListener('playing', this.handlePlaying); video.addEventListener('ended', this.emitPlaybackEnded); } @@ -57,10 +63,7 @@ export class VjsVideoElementSession { 'loadeddata', this.clearPlaybackIssue ); - this.currentVideo.removeEventListener( - 'playing', - this.clearPlaybackIssue - ); + this.currentVideo.removeEventListener('playing', this.handlePlaying); this.currentVideo.removeEventListener('ended', this.emitPlaybackEnded); this.currentVideo = null; } diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-channel-panel-state.ts b/libs/ui/playback/src/lib/web-player-view/web-player-channel-panel-state.ts new file mode 100644 index 000000000..1c24754be --- /dev/null +++ b/libs/ui/playback/src/lib/web-player-view/web-player-channel-panel-state.ts @@ -0,0 +1,30 @@ +import { linkedSignal } from '@angular/core'; +import type { EmbeddedMpvSupport } from '@iptvnator/shared/interfaces'; + +/** + * The fullscreen channel panel is DOM content over the video. Embedded + * MPV's native-view engine paints a platform view above the page, where + * no DOM layer can show, so the panel exists only while the rendered + * engine is a web player or Embedded MPV's frame-copy canvas. Fails + * closed until frame-copy has been confirmed. Retain that confirmation + * while a replacement component probes support, so channel changes do + * not reset the panel. A confirmed native/unsupported result revokes it. + */ +export function createChannelPanelAvailability( + embedded: () => boolean, + support: () => EmbeddedMpvSupport | null +) { + return linkedSignal< + { embedded: boolean; support: EmbeddedMpvSupport | null }, + boolean + >({ + source: () => ({ embedded: embedded(), support: support() }), + computation: ({ embedded, support }, previous) => { + if (!embedded) return true; + if (support === null) { + return previous?.source.embedded ? previous.value : false; + } + return support.supported && support.engine === 'frame-copy'; + }, + }); +} diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.spec.ts b/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.spec.ts new file mode 100644 index 000000000..8e4d9479a --- /dev/null +++ b/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.spec.ts @@ -0,0 +1,184 @@ +import { Component, Injector, signal } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { + PlaybackDiagnosticCode, + PlaybackDiagnosticSource, + type PlaybackDiagnostic, +} from '@iptvnator/playback/util'; +import { + VideoPlayer, + type ResolvedPortalPlayback, +} from '@iptvnator/shared/interfaces'; +import { ErrorDetails } from 'hls.js'; +import { WebPlayerLiveAutoFormat } from './web-player-live-auto-format'; + +@Component({ template: '' }) +class Host {} + +const failure: PlaybackDiagnostic = { + code: PlaybackDiagnosticCode.NetworkError, + source: PlaybackDiagnosticSource.Vhs, + sourceUrl: '', + container: 'm3u8', + player: 'videojs', + httpStatus: 403, + audioCodecs: [], + videoCodecs: [], +}; +const source: ResolvedPortalPlayback = { + streamUrl: 'https://fixture.test/stream.php?token=synthetic&extension=m3u8', + liveAutoTsUrl: + 'https://fixture.test/other.php?token=synthetic&extension=ts', + title: 'Fixture', + isLive: true, + userAgent: 'fixture', + headers: { Authorization: 'Bearer synthetic' }, +}; + +describe('Auto live source-format attempt lifecycle', () => { + const playback = signal(source); + const sessionKey = signal('playlist-a/channel-1'); + const player = signal(VideoPlayer.VideoJs); + const intent = signal(0); + const autoEnabled = signal(true); + let controller: WebPlayerLiveAutoFormat; + let fixture: ReturnType>; + beforeEach(() => { + playback.set({ ...source }); + sessionKey.set('playlist-a/channel-1'); + player.set(VideoPlayer.VideoJs); + intent.set(0); + autoEnabled.set(true); + fixture = TestBed.createComponent(Host); + controller = new WebPlayerLiveAutoFormat({ + playback, + sessionKey, + player, + intent, + autoEnabled, + injector: fixture.debugElement.injector.get(Injector), + }); + fixture.detectChanges(); + }); + afterEach(() => { + controller.destroy(); + fixture.destroy(); + }); + async function render() { + fixture.detectChanges(); + await fixture.whenStable(); + fixture.detectChanges(); + } + + it('waits for the old transport render, preserves the whole payload and consumes only one attempt', async () => { + expect(controller.tryFallback(failure)).toBe(true); + expect(controller.pending()).toBe(true); + expect(controller.playback()).toBe(playback()); + expect(controller.tryFallback(failure)).toBe(false); + await render(); + expect(controller.playback()).toEqual({ + ...source, + streamUrl: source.liveAutoTsUrl, + liveAutoTsUrl: undefined, + }); + const mounted = controller.playback(); + controller.started(); + expect(controller.playback()).toBe(mounted); + expect(controller.tryFallback(failure)).toBe(false); + intent.update((n) => n + 1); + expect(controller.playback()?.streamUrl).toBe(source.liveAutoTsUrl); + player.set(VideoPlayer.Html5Player); + expect(controller.playback()?.streamUrl).toBe(source.liveAutoTsUrl); + }); + it('does not downgrade after actual playing', () => { + controller.started(); + expect(controller.tryFallback(failure)).toBe(false); + }); + it.each([0, 200, undefined])( + 'does not guess from HTTP status %s', + (httpStatus) => { + expect(controller.tryFallback({ ...failure, httpStatus })).toBe( + false + ); + } + ); + it.each([ + PlaybackDiagnosticCode.UnknownPlaybackError, + PlaybackDiagnosticCode.DrmOrEncryption, + PlaybackDiagnosticCode.MediaDecodeError, + ])('does not downgrade %s', (code) => { + expect(controller.tryFallback({ ...failure, code })).toBe(false); + }); + it.each(['key', 'media', 'unknown'] as const)( + 'does not downgrade HLS %s failures even with an HTTP status', + (stage) => { + expect( + controller.tryFallback({ + ...failure, + hls: { + engineType: 'unknown', + engineDetails: ErrorDetails.KEY_LOAD_ERROR, + disposition: 'fatal', + stage, + failure: 'http', + httpStatus: 403, + }, + }) + ).toBe(false); + } + ); + it('respects manual preference changes before the failure and before pending completion', async () => { + autoEnabled.set(false); + expect(controller.tryFallback(failure)).toBe(false); + autoEnabled.set(true); + expect(controller.tryFallback(failure)).toBe(true); + autoEnabled.set(false); + await render(); + expect(controller.playback()).toBe(playback()); + }); + it('ignores a delayed completion after another playlist or channel takes ownership', async () => { + controller.tryFallback(failure); + sessionKey.set('playlist-b/channel-1'); + playback.set({ ...source, title: 'Other playlist' }); + await render(); + expect(controller.playback()).toBe(playback()); + expect(controller.tryFallback(failure)).toBe(true); + await render(); + expect(controller.playback()?.streamUrl).toBe(source.liveAutoTsUrl); + }); + it('cancels on disposal and does not transfer attempts to another mounted session', async () => { + controller.tryFallback(failure); + controller.destroy(); + await render(); + expect(controller.playback()).toBe(playback()); + expect(controller.tryFallback(failure)).toBe(false); + }); + it('does not rearm when same-session source metadata refreshes', async () => { + controller.tryFallback(failure); + await render(); + playback.set({ ...source, title: 'Refreshed' }); + expect(controller.playback()?.streamUrl).toBe(source.liveAutoTsUrl); + expect(controller.playback()?.title).toBe('Refreshed'); + playback.set({ ...source, streamUrl: 'https://other.test/live.m3u8' }); + expect(controller.playback()?.streamUrl).toBe( + 'https://other.test/live.m3u8' + ); + expect(controller.tryFallback(failure)).toBe(false); + }); + it.each([ + { isLive: false }, + { liveAutoTsUrl: undefined }, + { drm: {} }, + { contentInfo: {} }, + ])( + 'excludes VOD, catchup, missing advertisement and DRM: %j', + (overrides) => { + playback.set({ ...source, ...overrides } as ResolvedPortalPlayback); + expect(controller.tryFallback(failure)).toBe(false); + } + ); + it('does not start an Embedded MPV attempt', () => { + player.set(VideoPlayer.EmbeddedMpv); + expect(controller.tryFallback(failure)).toBe(false); + }); +}); diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.ts b/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.ts new file mode 100644 index 000000000..9f70bfc81 --- /dev/null +++ b/libs/ui/playback/src/lib/web-player-view/web-player-live-auto-format.ts @@ -0,0 +1,171 @@ +import { + afterNextRender, + computed, + linkedSignal, + type AfterRenderRef, + type Injector, + type Signal, +} from '@angular/core'; +import { + type PlaybackDiagnostic, + resolvePlaybackUrlSourceKind, +} from '@iptvnator/playback/util'; +import { + type ResolvedPortalPlayback, + VideoPlayer, +} from '@iptvnator/shared/interfaces'; + +/** One source-format attempt per mounted logical live session, never an engine switch. */ +export class WebPlayerLiveAutoFormat { + private callback?: AfterRenderRef; + private destroyed = false; + // Metadata refreshes reuse the transport revision. The returned ownership + // value is opaque; URLs/headers remain solely in the canonical source input. + private readonly origin = linkedSignal({ + source: () => this.deps.playback(), + computation: ( + source, + previous?: { source: ResolvedPortalPlayback | null; value: symbol } + ) => + previous && sameLiveTransport(source, previous.source) + ? previous.value + : Symbol(), + }); + private readonly intent = computed(() => { + void this.deps.intent(); + void this.deps.player(); + void this.deps.autoEnabled(); + return Symbol(); + }); + private readonly state = linkedSignal({ + source: () => ({ key: this.deps.sessionKey(), origin: this.origin() }), + computation: ( + source, + previous?: { + source: { key: string; origin: symbol }; + value: { + attempted: boolean; + started: boolean; + pending: boolean; + useTs: boolean; + }; + } + ) => ({ + attempted: + previous?.source.key === source.key && + !!previous.value.attempted, + started: + previous?.source.key === source.key && !!previous.value.started, + pending: false, + useTs: false, + }), + }); + readonly pending = computed(() => this.state().pending); + private readonly useTs = computed(() => this.state().useTs); + readonly playback = computed(() => { + const playback = this.deps.playback(); + return this.useTs() && playback?.liveAutoTsUrl + ? { + ...playback, + streamUrl: playback.liveAutoTsUrl, + liveAutoTsUrl: undefined, + } + : playback; + }); + + constructor( + private readonly deps: { + playback: Signal; + sessionKey: Signal; + player: Signal; + intent: () => unknown; + autoEnabled: () => boolean; + injector: Injector; + } + ) {} + + started(): void { + this.state.update((state) => ({ ...state, started: true })); + } + + tryFallback(issue: PlaybackDiagnostic): boolean { + const source = this.deps.playback(); + const state = this.state(); + const status = issue.httpStatus; + if ( + this.destroyed || + !this.deps.autoEnabled() || + state.attempted || + state.started || + !this.deps.sessionKey() || + !source?.liveAutoTsUrl || + source.isLive !== true || + source.contentInfo || + source.drm || + this.deps.player() === VideoPlayer.EmbeddedMpv || + resolvePlaybackUrlSourceKind(source.streamUrl) !== 'hls' || + resolvePlaybackUrlSourceKind(source.liveAutoTsUrl) !== 'mpegts' || + issue.code !== 'network-error' || + status === undefined || + status < 400 || + status > 599 || + // Key/license requests must never cause a format downgrade. + (issue.hls && + !['manifest', 'level', 'segment'].includes(issue.hls.stage)) + ) + return false; + this.state.set({ ...state, attempted: true, pending: true }); + const origin = this.origin(); + const key = this.deps.sessionKey(); + const intent = this.intent(); + this.callback?.destroy(); + // Render an empty application first. All web transports synchronously destroy + // their loaders in ngOnDestroy before the TS header handoff may start. + this.callback = afterNextRender( + () => { + this.callback = undefined; + if ( + this.destroyed || + origin !== this.origin() || + key !== this.deps.sessionKey() + ) + return; + this.state.update((current) => ({ + ...current, + pending: false, + useTs: intent === this.intent(), + })); + }, + { injector: this.deps.injector } + ); + return true; + } + + destroy(): void { + this.destroyed = true; + this.callback?.destroy(); + this.callback = undefined; + } +} + +function sameLiveTransport( + a: ResolvedPortalPlayback | null, + b: ResolvedPortalPlayback | null +): boolean { + if (!a || !b) return a === b; + const headerKeys = new Set([ + ...Object.keys(a.headers ?? {}), + ...Object.keys(b.headers ?? {}), + ]); + return ( + a.streamUrl === b.streamUrl && + a.liveAutoTsUrl === b.liveAutoTsUrl && + a.isLive === b.isLive && + a.drm === b.drm && + a.contentInfo === b.contentInfo && + a.userAgent === b.userAgent && + a.referer === b.referer && + a.origin === b.origin && + [...headerKeys].every((key) => a.headers?.[key] === b.headers?.[key]) + ); +} diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-recovery-controller.ts b/libs/ui/playback/src/lib/web-player-view/web-player-recovery-controller.ts index 02245b692..5114f6ff5 100644 --- a/libs/ui/playback/src/lib/web-player-view/web-player-recovery-controller.ts +++ b/libs/ui/playback/src/lib/web-player-view/web-player-recovery-controller.ts @@ -40,6 +40,7 @@ export interface WebPlayerRecoveryControllerDeps { readonly playbackExternallyTransferable: Signal; readonly alternativeSourceCount: () => number; readonly managedExternalPlayersAvailable: () => boolean; + readonly tryAutoLiveFormat?: (issue: PlaybackDiagnostic) => boolean; readonly emitPlaybackFailed: (code: PlaybackDiagnosticCode) => void; readonly emitExternalFallbackRequested: ( request: PlaybackFallbackRequest @@ -120,6 +121,12 @@ export class WebPlayerRecoveryController { this.clearDiagnostic(); return; } + if (this.deps.tryAutoLiveFormat?.(issue)) { + applicationHandoff.invalidate(); + recoverySession.clearPlaybackBinding(); + this.clearDiagnostic(); + return; + } if (!recoverySession.recordFailure(binding)) { return; } diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-view.component.html b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.html index 304f8c04e..58c30608f 100644 --- a/libs/ui/playback/src/lib/web-player-view/web-player-view.component.html +++ b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.html @@ -14,6 +14,7 @@ [seriesNavigation]="seriesNavigation()" (timeUpdate)="handleTimeUpdate($event, application)" (playbackIssue)="handlePlaybackIssue($event, binding)" + (playbackStarted)="handlePlaybackStarted(binding)" (playbackEnded)="playbackEnded.emit()" (previousEpisodeRequested)=" previousEpisodeRequested.emit() @@ -42,6 +43,7 @@ [seriesNavigation]="seriesNavigation()" (timeUpdate)="handleTimeUpdate($event, application)" (playbackIssue)="handlePlaybackIssue($event, binding)" + (playbackStarted)="handlePlaybackStarted(binding)" (playbackEnded)="playbackEnded.emit()" (previousEpisodeRequested)=" previousEpisodeRequested.emit() @@ -70,6 +72,7 @@ [seriesNavigation]="seriesNavigation()" (timeUpdate)="handleTimeUpdate($event, application)" (playbackIssue)="handlePlaybackIssue($event, binding)" + (playbackStarted)="handlePlaybackStarted(binding)" (playbackEnded)="playbackEnded.emit()" (previousEpisodeRequested)=" previousEpisodeRequested.emit() diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-view.component.live-format.spec.ts b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.live-format.spec.ts new file mode 100644 index 000000000..ae3cfa5d3 --- /dev/null +++ b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.live-format.spec.ts @@ -0,0 +1,288 @@ +import { ClipboardModule } from '@angular/cdk/clipboard'; +import { + ComponentFixture, + DeferBlockBehavior, + TestBed, +} from '@angular/core/testing'; +import { DestroyRef, signal } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { By } from '@angular/platform-browser'; +import { StorageMap } from '@ngx-pwa/local-storage'; +import { TranslateModule } from '@ngx-translate/core'; +import { + PlaybackDiagnosticCode, + PlaybackDiagnosticSource, + type PlaybackDiagnostic, +} from '@iptvnator/playback/util'; +import { RuntimeCapabilitiesService, SettingsStore } from '@iptvnator/services'; +import { + type ExternalPlayerSession, + STORE_KEY, + VideoPlayer, +} from '@iptvnator/shared/interfaces'; +import { PORTAL_EXTERNAL_PLAYBACK } from '@iptvnator/portal/shared/util'; +import { VodSourceRowComponent } from '@iptvnator/ui/components'; +import { of } from 'rxjs'; +import { PlaybackDiagnosticPanelComponent } from '../playback-diagnostic-panel/playback-diagnostic-panel.component'; +import { + StubArtPlayerComponent, + StubEmbeddedMpvPlayerComponent, + StubFullscreenChannelPanelComponent, + StubHtmlVideoPlayerComponent, + StubVjsPlayerComponent, +} from './web-player-view.spec-stubs'; +import { ElectronStreamHeadersService } from './electron-stream-headers.service'; +import type { WebPlayerViewComponent as WebPlayerViewComponentInstance } from './web-player-view.component'; + +jest.unstable_mockModule('video.js', () => ({ default: jest.fn() })); +jest.unstable_mockModule('@yangkghjh/videojs-aspect-ratio-panel', () => ({})); +jest.unstable_mockModule('videojs-contrib-quality-levels', () => ({})); +jest.unstable_mockModule('videojs-quality-selector-hls', () => ({})); + +describe('WebPlayerViewComponent live format integration', () => { + let WebPlayerViewComponent: typeof import('./web-player-view.component').WebPlayerViewComponent; + let fixture: ComponentFixture; + let component: WebPlayerViewComponentInstance; + const storedSettings = { player: VideoPlayer.VideoJs }; + const storage = { + get: jest.fn((key: string) => + of(key === STORE_KEY.Settings ? storedSettings : undefined) + ), + }; + let runtime: { supportsManagedExternalPlayers: boolean }; + let activeExternalSession: ReturnType< + typeof signal + >; + let closeExternalSession: jest.Mock, [ExternalPlayerSession]>; + let holdHeaderHandoff: boolean; + let headerResolvers: Array<(stillCurrent: boolean) => void>; + let headerRejectors: Array<(reason?: unknown) => void>; + const streamHeaders = { + apply: jest.fn( + () => + (holdHeaderHandoff + ? new Promise((resolve, reject) => { + headerResolvers.push(resolve); + headerRejectors.push(reject); + }) + : null) as Promise | null + ), + clear: jest.fn(), + }; + + beforeAll(async () => { + ({ WebPlayerViewComponent } = + await import('./web-player-view.component')); + }); + + beforeEach(async () => { + runtime = { supportsManagedExternalPlayers: true }; + activeExternalSession = signal(null); + closeExternalSession = jest.fn(async (session) => { + activeExternalSession.set({ + ...session, + status: 'closed', + canClose: false, + updatedAt: '2026-08-08T10:00:02.000Z', + }); + }); + holdHeaderHandoff = false; + headerResolvers = []; + headerRejectors = []; + streamHeaders.apply.mockClear(); + streamHeaders.clear.mockClear(); + await TestBed.configureTestingModule({ + deferBlockBehavior: DeferBlockBehavior.Playthrough, + imports: [WebPlayerViewComponent, TranslateModule.forRoot()], + providers: [ + { provide: StorageMap, useValue: storage }, + { provide: RuntimeCapabilitiesService, useValue: runtime }, + { + provide: ElectronStreamHeadersService, + useValue: streamHeaders, + }, + { + provide: SettingsStore, + useValue: { + showCaptions: () => false, + webPlayerSharedControls: () => false, + }, + }, + { + provide: PORTAL_EXTERNAL_PLAYBACK, + useValue: { + activeSession: activeExternalSession, + visibleSession: activeExternalSession, + dismissActiveSession: jest.fn(), + closeSession: closeExternalSession, + }, + }, + ], + }) + .overrideComponent(WebPlayerViewComponent, { + set: { + imports: [ + ClipboardModule, + MatButtonModule, + MatIconModule, + MatTooltipModule, + PlaybackDiagnosticPanelComponent, + StubArtPlayerComponent, + StubEmbeddedMpvPlayerComponent, + StubFullscreenChannelPanelComponent, + StubHtmlVideoPlayerComponent, + StubVjsPlayerComponent, + TranslateModule, + VodSourceRowComponent, + ], + }, + }) + .compileComponents(); + + fixture = TestBed.createComponent(WebPlayerViewComponent); + component = fixture.componentInstance; + fixture.componentRef.setInput( + 'streamUrl', + 'https://example.com/live.m3u8' + ); + fixture.componentRef.setInput('title', 'Recovery stream'); + fixture.componentRef.setInput('playbackSessionKey', 'content-a'); + }); + + afterEach(() => fixture.destroy()); + + it('tries advertised TS once after initial terminal HLS HTTP failure', async () => { + fixture.componentRef.setInput('playback', { + streamUrl: 'https://example.com/live.m3u8', + title: 'Live', + isLive: true, + liveAutoTsUrl: 'https://example.com/live.ts', + headers: { 'User-Agent': 'fixture-agent' }, + }); + await render(); + const oldBinding = currentBinding(); + component.handlePlaybackIssue( + { ...networkIssue('videojs'), httpStatus: 403 }, + oldBinding + ); + await render(); + expect(component.resolvedPlayback().streamUrl).toBe( + 'https://example.com/live.ts' + ); + expect(component.resolvedPlayback().headers).toEqual({ + 'User-Agent': 'fixture-agent', + }); + expect(component.selectedPlayer()).toBe(VideoPlayer.VideoJs); + const tsBinding = currentBinding(); + component.handlePlaybackIssue(networkIssue('videojs'), tsBinding); + await render(); + expect(component.activeBinding()).toBe(tsBinding); + expect(component.visiblePlaybackDiagnostic()).not.toBeNull(); + component.handlePlaybackIssue(networkIssue('videojs'), oldBinding); + expect(component.activeBinding()).toBe(tsBinding); + }); + + it('uses actual playing output to suppress fallback after playback starts', async () => { + fixture.componentRef.setInput('playback', { + streamUrl: 'https://example.com/live.m3u8', + title: 'Live', + isLive: true, + liveAutoTsUrl: 'https://example.com/live.ts', + }); + await render(); + const player = fixture.debugElement.query( + By.directive(StubVjsPlayerComponent) + ).componentInstance as StubVjsPlayerComponent; + player.playbackStarted.emit(); + player.playbackIssue.emit({ + ...networkIssue('videojs'), + httpStatus: 403, + }); + await render(); + expect(component.resolvedPlayback().streamUrl).toBe( + 'https://example.com/live.m3u8' + ); + expect(component.visiblePlaybackDiagnostic()).not.toBeNull(); + }); + + it('destroys the previous transport before the TS header handoff', async () => { + fixture.componentRef.setInput('playback', { + streamUrl: 'https://example.com/live.m3u8', + title: 'Live', + isLive: true, + liveAutoTsUrl: 'https://example.com/live.ts', + }); + await render(); + const player = fixture.debugElement.query( + By.directive(StubVjsPlayerComponent) + ); + const events: string[] = []; + player.injector + .get(DestroyRef) + .onDestroy(() => events.push('destroy-hls')); + streamHeaders.apply.mockImplementationOnce(() => { + events.push('ts-headers'); + return null; + }); + (player.componentInstance as StubVjsPlayerComponent).playbackIssue.emit( + { ...networkIssue('videojs'), httpStatus: 403 } + ); + await render(); + expect(events).toEqual(['destroy-hls', 'ts-headers']); + }); + + it('ignores playing and failure from the old channel before the new render', async () => { + await render(); + const oldBinding = currentBinding(); + fixture.componentRef.setInput( + 'playbackSessionKey', + 'another-playlist/channel' + ); + fixture.componentRef.setInput('playback', { + streamUrl: 'https://example.com/new.m3u8', + title: 'Live', + isLive: true, + liveAutoTsUrl: 'https://example.com/new.ts', + }); + component.handlePlaybackStarted(oldBinding); + component.handlePlaybackIssue( + { ...networkIssue('videojs'), httpStatus: 403 }, + oldBinding + ); + await render(); + const binding = currentBinding(); + component.handlePlaybackIssue( + { ...networkIssue('videojs'), httpStatus: 403 }, + binding + ); + await render(); + expect(component.resolvedPlayback().streamUrl).toBe( + 'https://example.com/new.ts' + ); + }); + + function currentBinding() { + const current = component.activeBinding(); + if (!current) throw new Error('Expected a mounted playback binding'); + return current; + } + + async function render(): Promise { + fixture.detectChanges(); + await fixture.whenStable(); + fixture.detectChanges(); + } +}); +function networkIssue(player: 'videojs' | 'html5'): PlaybackDiagnostic { + return { + code: PlaybackDiagnosticCode.NetworkError, + source: PlaybackDiagnosticSource.Vhs, + sourceUrl: 'https://example.com/live.m3u8', + container: 'm3u8', + player, + audioCodecs: [], + videoCodecs: [], + }; +} diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-view.component.ts b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.ts index 75ac61ce2..362bc114f 100644 --- a/libs/ui/playback/src/lib/web-player-view/web-player-view.component.ts +++ b/libs/ui/playback/src/lib/web-player-view/web-player-view.component.ts @@ -1,8 +1,8 @@ import { Component, ElementRef, + Injector, OnDestroy, - type Signal, ViewEncapsulation, computed, effect, @@ -25,7 +25,6 @@ import { RuntimeCapabilitiesService, SettingsStore } from '@iptvnator/services'; import { VideoPlayer, type Channel, - type EmbeddedMpvSupport, type RecordingStartMetadata, type RecordingStoppedEvent, type ResolvedPortalPlayback, @@ -57,6 +56,8 @@ import { } from './web-player-application-ownership'; import { createWebPlayerApplicationState } from './web-player-application-state'; import { resolveWebPlayerMediaTitle } from './web-player-playback-state'; +import { createChannelPanelAvailability } from './web-player-channel-panel-state'; +import { WebPlayerLiveAutoFormat } from './web-player-live-auto-format'; import { WebPlayerRecoveryController } from './web-player-recovery-controller'; import { isPlaybackExternallyTransferable, @@ -65,11 +66,6 @@ import { toVideoPlayer, } from './web-player-recovery-policy'; -/** What the view needs from a rendered Embedded MPV player: its engine. */ -interface EmbeddedMpvEngineReporter { - readonly support: Signal; -} - function resolveWebPlayerSharedControls(): boolean { const storedValue = inject(SettingsStore).webPlayerSharedControls?.(); const fallback = WEB_PLAYER_SHARED_CONTROLS_ENABLED; @@ -113,34 +109,11 @@ export class WebPlayerViewComponent implements OnDestroy { readonly fullscreenSurface: HTMLElement = inject(ElementRef) .nativeElement; private readonly embeddedMpvPlayer = - viewChild('embeddedMpvPlayer'); - /** - * The fullscreen channel panel is DOM content over the video. Embedded - * MPV's native-view engine paints a platform view above the page, where - * no DOM layer can show, so the panel exists only while the rendered - * engine is a web player or Embedded MPV's frame-copy canvas. Fails - * closed until frame-copy has been confirmed. Retain that confirmation - * while a replacement component probes support, so channel changes do - * not reset the panel. A confirmed native/unsupported result revokes it. - */ - readonly channelPanelAvailable = linkedSignal< - { embedded: boolean; support: EmbeddedMpvSupport | null }, - boolean - >({ - source: () => ({ - embedded: this.renderedApplications().some( - (application) => application.embeddedMpv - ), - support: this.embeddedMpvPlayer()?.support() ?? null, - }), - computation: ({ embedded, support }, previous) => { - if (!embedded) return true; - if (support === null) { - return previous?.source.embedded ? previous.value : false; - } - return support.supported && support.engine === 'frame-copy'; - }, - }); + viewChild('embeddedMpvPlayer'); + readonly channelPanelAvailable = createChannelPanelAvailability( + () => this.renderedApplications().some((app) => app.embeddedMpv), + () => this.embeddedMpvPlayer()?.support() ?? null + ); private readonly runtime = inject(RuntimeCapabilitiesService); private readonly settingsStore = inject(SettingsStore); private readonly externalPlayback = inject(PORTAL_EXTERNAL_PLAYBACK, { @@ -223,8 +196,17 @@ export class WebPlayerViewComponent implements OnDestroy { const temporary = this.recoverySession.temporaryPlayerOverride(); return temporary ? toVideoPlayer(temporary) : this.renderablePlayer(); }); - private readonly applicationState = createWebPlayerApplicationState({ + private readonly liveAutoFormat = new WebPlayerLiveAutoFormat({ playback: this.playback, + sessionKey: this.playbackSessionKey, + player: this.selectedPlayer, + intent: this.reloadToken, + autoEnabled: () => + (this.settingsStore.streamFormat?.() ?? 'auto') === 'auto', + injector: inject(Injector), + }); + private readonly applicationState = createWebPlayerApplicationState({ + playback: this.liveAutoFormat.playback, streamUrl: this.streamUrl, title: this.title, startTime: this.startTime, @@ -243,7 +225,7 @@ export class WebPlayerViewComponent implements OnDestroy { externalRecovery: this.externalRecovery, applicationHandoff: this.applicationHandoff, playbackSessionKey: this.playbackSessionKey, - playback: this.playback, + playback: this.liveAutoFormat.playback, streamUrl: this.streamUrl, startTime: this.startTime, selectedPlayer: this.selectedPlayer, @@ -255,6 +237,7 @@ export class WebPlayerViewComponent implements OnDestroy { alternativeSourceCount: () => this.alternativeSources().length, managedExternalPlayersAvailable: () => this.runtime.supportsManagedExternalPlayers, + tryAutoLiveFormat: (issue) => this.liveAutoFormat.tryFallback(issue), emitPlaybackFailed: (code) => this.playbackFailed.emit(code), emitExternalFallbackRequested: (request) => this.externalFallbackRequested.emit(request), @@ -284,6 +267,7 @@ export class WebPlayerViewComponent implements OnDestroy { readonly renderedApplications = computed< readonly PlaybackApplicationOwnership[] >(() => { + if (this.liveAutoFormat.pending()) return []; const binding = this.activeBinding(); const embeddedMpv = this.selectedPlayer() === VideoPlayer.EmbeddedMpv && !binding; @@ -311,6 +295,7 @@ export class WebPlayerViewComponent implements OnDestroy { // Session sync may clear a temporary player override. Run it before // tracking intent so that reset is folded into this application. this.recovery.syncSession(); + if (this.liveAutoFormat.pending()) return; void this.recovery.diagnosticIntentToken(); const sourceRevision = this.playbackSourceRevisionToken(); untracked(() => @@ -349,6 +334,7 @@ export class WebPlayerViewComponent implements OnDestroy { } ngOnDestroy(): void { + this.liveAutoFormat.destroy(); this.externalRecovery.destroy(); this.applicationHandoff.destroy(); } @@ -360,6 +346,18 @@ export class WebPlayerViewComponent implements OnDestroy { this.recovery.handlePlaybackIssue(issue, binding); } + handlePlaybackStarted(binding: PlaybackBinding): void { + this.recovery.syncSession(); + if ( + this.applicationHandoff.owns( + binding, + this.playbackApplicationToken() + ) && + !this.liveAutoFormat.pending() + ) + this.liveAutoFormat.started(); + } + handleTimeUpdate( event: { currentTime: number; duration: number }, ownership: PlaybackApplicationOwnership diff --git a/libs/ui/playback/src/lib/web-player-view/web-player-view.spec-stubs.ts b/libs/ui/playback/src/lib/web-player-view/web-player-view.spec-stubs.ts index b82185f40..fb57beae0 100644 --- a/libs/ui/playback/src/lib/web-player-view/web-player-view.spec-stubs.ts +++ b/libs/ui/playback/src/lib/web-player-view/web-player-view.spec-stubs.ts @@ -27,6 +27,7 @@ export class StubVjsPlayerComponent { readonly seriesNavigation = input(null); readonly timeUpdate = output<{ currentTime: number; duration: number }>(); readonly playbackIssue = output(); + readonly playbackStarted = output(); readonly playbackEnded = output(); readonly previousEpisodeRequested = output(); readonly nextEpisodeRequested = output(); @@ -48,6 +49,7 @@ export class StubHtmlVideoPlayerComponent { readonly seriesNavigation = input(null); readonly timeUpdate = output<{ currentTime: number; duration: number }>(); readonly playbackIssue = output(); + readonly playbackStarted = output(); readonly playbackEnded = output(); readonly previousEpisodeRequested = output(); readonly nextEpisodeRequested = output(); @@ -69,6 +71,7 @@ export class StubArtPlayerComponent { readonly seriesNavigation = input(null); readonly timeUpdate = output<{ currentTime: number; duration: number }>(); readonly playbackIssue = output(); + readonly playbackStarted = output(); readonly playbackEnded = output(); readonly previousEpisodeRequested = output(); readonly nextEpisodeRequested = output();