mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-16 14:16:16 -08:00
Add browser playback diagnostics and MPV/VLC fallback (#921)
* feat(playback): add codec diagnostics fallback Entire-Checkpoint: f957cd9849e0 * fix(playback): address diagnostics review feedback Entire-Checkpoint: f957cd9849e0 * fix(playback): ignore recoverable hls diagnostics Entire-Checkpoint: f957cd9849e0 * fix(playback): polish diagnostic fallback banner Entire-Checkpoint: f957cd9849e0 * fix(xtream): preserve live category search scope Entire-Checkpoint: f957cd9849e0
This commit is contained in:
1 parent
5f4cf01467
commit
6305dcf00e
66 files changed
+2857
-206
No files matched your search
@@ -102,4 +102,43 @@ describe('PlayerService', () => {
|
||||
);
|
||||
expect(result).toEqual(session);
|
||||
});
|
||||
|
||||
it('forces external playback without changing the selected embedded player', async () => {
|
||||
const session: ExternalPlayerSession = {
|
||||
id: 'session-2',
|
||||
player: 'vlc',
|
||||
status: 'opened',
|
||||
title: 'Example Live',
|
||||
streamUrl: 'https://example.com/live.m3u8',
|
||||
startedAt: '2026-03-07T10:00:00.000Z',
|
||||
updatedAt: '2026-03-07T10:00:00.000Z',
|
||||
canClose: true,
|
||||
};
|
||||
settingsStore.player.mockReturnValue(VideoPlayer.VideoJs);
|
||||
dataService.sendIpcEvent.mockResolvedValue(session);
|
||||
|
||||
const result = await service.openExternalPlayback(
|
||||
{
|
||||
streamUrl: 'https://example.com/live.m3u8',
|
||||
title: 'Example Live',
|
||||
userAgent: 'IPTVnator Test',
|
||||
referer: 'https://referrer.example.com',
|
||||
origin: 'https://origin.example.com',
|
||||
},
|
||||
'vlc'
|
||||
);
|
||||
|
||||
expect(dataService.sendIpcEvent).toHaveBeenCalledWith(
|
||||
'OPEN_VLC_PLAYER',
|
||||
expect.objectContaining({
|
||||
url: 'https://example.com/live.m3u8',
|
||||
title: 'Example Live',
|
||||
'user-agent': 'IPTVnator Test',
|
||||
referer: 'https://referrer.example.com',
|
||||
origin: 'https://origin.example.com',
|
||||
})
|
||||
);
|
||||
expect(dialog.open).not.toHaveBeenCalled();
|
||||
expect(result).toEqual(session);
|
||||
});
|
||||
});
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
ResolvedPortalPlayback,
|
||||
VideoPlayer,
|
||||
} from 'shared-interfaces';
|
||||
import type { ExternalPlayerName } from 'shared-interfaces';
|
||||
import { SettingsStore } from './settings-store.service';
|
||||
|
||||
@Injectable({
|
||||
@@ -66,54 +67,18 @@ export class PlayerService {
|
||||
hideExternalInfoDialog = true
|
||||
): Promise<ExternalPlayerSession | void> {
|
||||
const player = this.settingsStore.player() ?? VideoPlayer.VideoJs;
|
||||
const {
|
||||
streamUrl,
|
||||
title,
|
||||
thumbnail,
|
||||
userAgent,
|
||||
referer,
|
||||
origin,
|
||||
headers,
|
||||
contentInfo,
|
||||
startTime,
|
||||
} = playback;
|
||||
const { streamUrl, title, contentInfo, startTime } = playback;
|
||||
|
||||
if (player === VideoPlayer.MPV) {
|
||||
if (!hideExternalInfoDialog) {
|
||||
this.dialog.open(ExternalPlayerInfoDialogComponent);
|
||||
}
|
||||
return await this.dataService.sendIpcEvent<ExternalPlayerSession>(
|
||||
OPEN_MPV_PLAYER,
|
||||
{
|
||||
url: streamUrl,
|
||||
title,
|
||||
thumbnail,
|
||||
'user-agent': userAgent,
|
||||
referer: referer,
|
||||
origin: origin,
|
||||
headers,
|
||||
contentInfo,
|
||||
startTime,
|
||||
}
|
||||
);
|
||||
return await this.openExternalPlayback(playback, 'mpv');
|
||||
} else if (player === VideoPlayer.VLC) {
|
||||
if (!hideExternalInfoDialog) {
|
||||
this.dialog.open(ExternalPlayerInfoDialogComponent);
|
||||
}
|
||||
return await this.dataService.sendIpcEvent<ExternalPlayerSession>(
|
||||
OPEN_VLC_PLAYER,
|
||||
{
|
||||
url: streamUrl,
|
||||
title,
|
||||
thumbnail,
|
||||
'user-agent': userAgent,
|
||||
referer: referer,
|
||||
origin: origin,
|
||||
headers,
|
||||
contentInfo,
|
||||
startTime,
|
||||
}
|
||||
);
|
||||
return await this.openExternalPlayback(playback, 'vlc');
|
||||
}
|
||||
|
||||
return import('@iptvnator/portal/xtream/feature').then(
|
||||
@@ -133,4 +98,27 @@ export class PlayerService {
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async openExternalPlayback(
|
||||
playback: ResolvedPortalPlayback,
|
||||
player: ExternalPlayerName
|
||||
): Promise<ExternalPlayerSession | void> {
|
||||
const ipcEvent =
|
||||
player === 'mpv' ? OPEN_MPV_PLAYER : OPEN_VLC_PLAYER;
|
||||
|
||||
return await this.dataService.sendIpcEvent<ExternalPlayerSession>(
|
||||
ipcEvent,
|
||||
{
|
||||
url: playback.streamUrl,
|
||||
title: playback.title,
|
||||
thumbnail: playback.thumbnail,
|
||||
'user-agent': playback.userAgent,
|
||||
referer: playback.referer,
|
||||
origin: playback.origin,
|
||||
headers: playback.headers,
|
||||
contentInfo: playback.contentInfo,
|
||||
startTime: playback.startTime,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "السمة الفاتحة",
|
||||
"SYSTEM_THEME": "سمة النظام"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "إخفاء قائمة القنوات",
|
||||
"SHOW_CHANNELS_LIST": "إظهار قائمة القنوات",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "المظهر الفاتح",
|
||||
"SYSTEM_THEME": "مظهر النظام"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "إخفاء قائمة القنوات",
|
||||
"SHOW_CHANNELS_LIST": "إظهار قائمة القنوات",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Светлая тэма",
|
||||
"SYSTEM_THEME": "Сістэмная тэма"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Схаваць спіс каналаў",
|
||||
"SHOW_CHANNELS_LIST": "Паказаць спіс каналаў",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Hell",
|
||||
"SYSTEM_THEME": "System"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Senderliste ausblenden",
|
||||
"SHOW_CHANNELS_LIST": "Senderliste einblenden",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Ανοιχτόχρωμο θέμα",
|
||||
"SYSTEM_THEME": "Θέμα συστήματος"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Απόκρυψη λίστας καναλιών",
|
||||
"SHOW_CHANNELS_LIST": "Εμφάνιση λίστας καναλιών",
|
||||
|
||||
@@ -358,6 +358,35 @@
|
||||
"LIGHT_THEME": "Light theme",
|
||||
"SYSTEM_THEME": "System theme"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Hide channels list",
|
||||
"SHOW_CHANNELS_LIST": "Show channels list",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Tema claro",
|
||||
"SYSTEM_THEME": "Tema del sistema"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Ocultar lista de canales",
|
||||
"SHOW_CHANNELS_LIST": "Mostrar lista de canales",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Thème clair",
|
||||
"SYSTEM_THEME": "Thème du système"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Masquer la liste des chaînes",
|
||||
"SHOW_CHANNELS_LIST": "Afficher la liste des chaînes",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Tema chiaro",
|
||||
"SYSTEM_THEME": "Tema di sistema"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Nascondi elenco canali",
|
||||
"SHOW_CHANNELS_LIST": "Mostra elenco canali",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "ライトテーマ",
|
||||
"SYSTEM_THEME": "システムテーマ"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "チャンネル一覧を非表示",
|
||||
"SHOW_CHANNELS_LIST": "チャンネル一覧を表示",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "밝은 테마",
|
||||
"SYSTEM_THEME": "시스템 테마"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "채널 목록 숨기기",
|
||||
"SHOW_CHANNELS_LIST": "채널 목록 표시",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Licht thema",
|
||||
"SYSTEM_THEME": "Systeemthema"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Zenderlijst verbergen",
|
||||
"SHOW_CHANNELS_LIST": "Zenderlijst tonen",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Jasny motyw",
|
||||
"SYSTEM_THEME": "Motyw systemowy"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Ukryj listę kanałów",
|
||||
"SHOW_CHANNELS_LIST": "Pokaż listę kanałów",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Tema claro",
|
||||
"SYSTEM_THEME": "Tema do sistema"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Ocultar lista de canais",
|
||||
"SHOW_CHANNELS_LIST": "Mostrar lista de canais",
|
||||
|
||||
@@ -356,6 +356,35 @@
|
||||
"LIGHT_THEME": "Светлая тема",
|
||||
"SYSTEM_THEME": "Системная тема"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "Контейнер потока, вероятно, не поддерживается встроенным браузерным плеером",
|
||||
"DESCRIPTION": "Chromium/Electron может не воспроизводить этот контейнер внутри приложения. Попробуйте MPV или VLC с более широкой поддержкой кодеков."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "Кодек потока, вероятно, не поддерживается встроенным браузерным плеером",
|
||||
"DESCRIPTION": "Поток сообщает кодеки, которые встроенный Chromium-плеер может не декодировать. MPV или VLC часто справляются с такими потоками."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "Браузерный плеер не смог декодировать этот поток",
|
||||
"DESCRIPTION": "Воспроизведение началось, но медиапайплайн завершился ошибкой декодирования. Внешний плеер может обработать этот поток лучше."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "Не удалось загрузить поток",
|
||||
"DESCRIPTION": "Плеер сообщил сетевую ошибку или ошибку загрузки у провайдера. Проверьте URL потока, заголовки или доступность провайдера."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "Поток может быть зашифрован или защищен DRM",
|
||||
"DESCRIPTION": "Браузерный плеер не может продолжить из-за ошибки ключа или шифрования. Внешний плеер тоже может не помочь, если требуется DRM провайдера."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "Браузерный плеер сообщил ошибку воспроизведения",
|
||||
"DESCRIPTION": "Поток не воспроизвелся во встроенном плеере, но ошибка не указала конкретную причину в кодеке, контейнере или сети."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Открыть в MPV",
|
||||
"ACTION_OPEN_VLC": "Открыть в VLC",
|
||||
"ACTION_COPY_URL": "Скопировать URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Скрыть список каналов",
|
||||
"SHOW_CHANNELS_LIST": "Показать список каналов",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "Açık tema",
|
||||
"SYSTEM_THEME": "Sistem teması"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "Kanal listesini gizle",
|
||||
"SHOW_CHANNELS_LIST": "Kanal listesini göster",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "明亮模式",
|
||||
"SYSTEM_THEME": "跟随系统"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "隐藏频道列表",
|
||||
"SHOW_CHANNELS_LIST": "显示频道列表",
|
||||
|
||||
@@ -352,6 +352,35 @@
|
||||
"LIGHT_THEME": "亮色主題",
|
||||
"SYSTEM_THEME": "跟隨系統"
|
||||
},
|
||||
"PLAYBACK_DIAGNOSTICS": {
|
||||
"UNSUPPORTED_CONTAINER": {
|
||||
"TITLE": "This stream container is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "Chromium/Electron may not decode this container inline. Try MPV or VLC for broader codec support."
|
||||
},
|
||||
"UNSUPPORTED_CODEC": {
|
||||
"TITLE": "This stream codec is likely unsupported by the browser player",
|
||||
"DESCRIPTION": "The stream advertises codecs that the built-in Chromium player may not decode. MPV or VLC can often play it."
|
||||
},
|
||||
"MEDIA_DECODE_ERROR": {
|
||||
"TITLE": "The browser player could not decode this stream",
|
||||
"DESCRIPTION": "Playback started but the media pipeline failed while decoding. An external player may handle this stream better."
|
||||
},
|
||||
"NETWORK_ERROR": {
|
||||
"TITLE": "The stream could not be loaded",
|
||||
"DESCRIPTION": "The player reported a network or provider loading error. Check the stream URL, headers, or provider availability."
|
||||
},
|
||||
"DRM_OR_ENCRYPTION": {
|
||||
"TITLE": "This stream may be encrypted or DRM-protected",
|
||||
"DESCRIPTION": "The browser player cannot continue with the reported encryption/key error. External playback may still fail if provider DRM is required."
|
||||
},
|
||||
"UNKNOWN_PLAYBACK_ERROR": {
|
||||
"TITLE": "The browser player reported a playback error",
|
||||
"DESCRIPTION": "The stream failed in the built-in player, but the error did not identify a specific codec, container, or network cause."
|
||||
},
|
||||
"ACTION_OPEN_MPV": "Open in MPV",
|
||||
"ACTION_OPEN_VLC": "Open in VLC",
|
||||
"ACTION_COPY_URL": "Copy URL"
|
||||
},
|
||||
"LAYOUT": {
|
||||
"HIDE_CHANNELS_LIST": "隱藏頻道列表",
|
||||
"SHOW_CHANNELS_LIST": "顯示頻道列表",
|
||||
|
||||
Reference in new issue
Block a user