diff --git a/src/main/resources/web/assets/app.js b/src/main/resources/web/assets/app.js
index c26b6ed..8d1af0c 100644
--- a/src/main/resources/web/assets/app.js
+++ b/src/main/resources/web/assets/app.js
@@ -257,7 +257,15 @@
function bindPlayerEvents() {
el.player.addEventListener("error", () => {
- setSettingsMessage("Playback failed in embedded player. Try Open stream directly.", "err");
+ const systemPlayerUrl = state.currentStreamInfo ? buildSystemPlayerHref(state.currentStreamInfo?.title, state.currentStreamInfo?.url, state.currentStreamInfo) : "";
+ if (systemPlayerUrl) {
+ setSettingsMessageHtml(
+ `Playback failed in embedded player. Open stream directly`,
+ "err"
+ );
+ } else {
+ setSettingsMessage("Playback failed in embedded player. Try Open stream directly.", "err");
+ }
});
el.player.addEventListener("loadedmetadata", updateStreamRuntimeInfo);
el.player.addEventListener("loadedmetadata", refreshEmbeddedSubtitleTracks);
@@ -2488,7 +2496,11 @@
return;
}
disposeHls();
- setSettingsMessage("HLS playback failed in embedded player. Try Open stream directly.", "err");
+ const systemPlayerUrl = buildSystemPlayerHref(state.currentStreamInfo?.title, state.currentStreamInfo?.url, state.currentStreamInfo);
+ setSettingsMessageHtml(
+ `HLS playback failed in embedded player. Open stream directly`,
+ "err"
+ );
if (state.currentStreamInfo) {
state.currentStreamInfo.playbackEngine = "native (HLS fallback failed)";
renderStreamInfo();
@@ -2504,8 +2516,9 @@
if (error?.name === "NotAllowedError") {
return;
}
- setSettingsMessage(
- `Playback could not start in embedded player: ${error?.message || "unknown error"}`,
+ const systemPlayerUrl = buildSystemPlayerHref(state.currentStreamInfo?.title, state.currentStreamInfo?.url, state.currentStreamInfo);
+ setSettingsMessageHtml(
+ `Playback failed in embedded player. Open in system player`,
"err"
);
});
@@ -3158,6 +3171,11 @@
el.settingsMessage.className = `message ${type}`.trim();
}
+ function setSettingsMessageHtml(html, type = "") {
+ el.settingsMessage.innerHTML = html || "";
+ el.settingsMessage.className = `message ${type}`.trim();
+ }
+
function showError(error) {
setSettingsMessage(error.message || String(error), "err");
}