180e95f74d
- Switch OBS output to RTMP; add FFmpeg AAC->Opus transcoding via MediaMTX runOnReady so WebRTC can carry audio (WebRTC requires Opus, not AAC) - Enable RTSP on localhost so FFmpeg reads game path without publisher conflict; viewers connect to game-opus path (H264+Opus) - Fix WHEP/HLS path prefix stripping in NPM advanced config; move all custom locations (/whep, /hls, /v3) out of NPM GUI and into advanced conf so trailing-slash proxy_pass correctly strips prefixes before hitting MediaMTX - Fix MediaMTX API port 49997->19997 (49997 was in Windows ephemeral range) - Add /status proxy endpoint to OBS HTTP server so frontend can poll stream readiness without hitting /v3/ through NPM where auth_request blocked it - Fix authInternalUsers: split publish (localhost only) from read (any IP) so WHEP viewers are not challenged with Basic Auth by MediaMTX - Remove muted attribute from video element; show unmute/play button on autoplay block so viewers get audio after one click - Fix webrtcAdditionalHosts to include LAN IP 192.168.50.254 - Fix hlsAllowOrigin->hlsAllowOrigins deprecation warning - Move MediaMTX/HTTP server startup to script_load (not streaming started) so MediaMTX is ready before OBS attempts RTMP connection - Log MediaMTX output to bin/mediamtx.log for easier debugging Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.4 KiB
HTML
40 lines
1.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="referrer" content="no-referrer">
|
|
<title>Game Stream</title>
|
|
<link rel="stylesheet" href="/css/style.css">
|
|
<!-- hls.js is only loaded if WebRTC fails and we need the HLS fallback. -->
|
|
</head>
|
|
<body>
|
|
<main id="stage">
|
|
<video id="video" autoplay playsinline></video>
|
|
|
|
<div id="overlay" class="overlay">
|
|
<div class="overlay-card">
|
|
<h1 id="overlay-title">Stream offline</h1>
|
|
<p id="overlay-message">Waiting for the streamer to start…</p>
|
|
<div class="spinner" aria-hidden="true"></div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<footer id="status-bar">
|
|
<span id="status-indicator" class="status offline">OFFLINE</span>
|
|
<span class="separator">|</span>
|
|
<span>Viewers: <b id="viewer-count">0</b></span>
|
|
<span class="separator">|</span>
|
|
<span>Latency: <b id="latency">--</b></span>
|
|
<span class="separator">|</span>
|
|
<span>Transport: <b id="transport">--</b></span>
|
|
<span class="spacer"></span>
|
|
<button id="unmute-btn" type="button" hidden>Click to unmute</button>
|
|
</footer>
|
|
|
|
<script src="/js/player.js"></script>
|
|
<script src="/js/app.js"></script>
|
|
</body>
|
|
</html>
|