Capture, decrypt, and restream toolkit with compiled-in app modules (RTE, TG4, BBC), on-device MITM proxy, streamd control plane, and www. BBC module.yaml is published (clear streams); other module values stay local.
84 lines
2.9 KiB
HTML
84 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>streamd</title>
|
|
<link rel="stylesheet" href="/static/app.css" />
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>streamd</h1>
|
|
<div class="header-right">
|
|
<span id="uptime" class="muted"></span>
|
|
<label class="token-box">token <input id="token" type="password" placeholder="STREAMD_TOKEN" autocomplete="off" /></label>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="card">
|
|
<h2>Add stream</h2>
|
|
<form id="create-form" class="grid">
|
|
<label>name <input name="name" required placeholder="my-channel" /></label>
|
|
<label>title <input name="title" placeholder="My Channel" /></label>
|
|
<label>app
|
|
<select name="app" id="app-select"></select>
|
|
</label>
|
|
<label>channel
|
|
<select name="channel" id="channel-select"></select>
|
|
</label>
|
|
<label class="span2">mpd <input name="mpd" placeholder="https://…/manifest.mpd (optional until capture)" /></label>
|
|
<label class="span2">key <textarea name="key" rows="4" placeholder="KID:KEY (one per line; multi-key streams need every key)" spellcheck="false"></textarea></label>
|
|
<label class="span2">headers JSON <input name="headers_json" value="{}" /></label>
|
|
<div class="span2 actions">
|
|
<button type="submit">Create</button>
|
|
</div>
|
|
</form>
|
|
<p id="form-msg" class="msg"></p>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<div class="row-between">
|
|
<h2>Streams</h2>
|
|
<div class="row-actions">
|
|
<span id="agents-status" class="muted">agents: —</span>
|
|
<button type="button" id="refresh" class="ghost">Refresh</button>
|
|
</div>
|
|
</div>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>name</th>
|
|
<th>app / channel</th>
|
|
<th>health</th>
|
|
<th>claim</th>
|
|
<th>age</th>
|
|
<th>play</th>
|
|
<th>actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="rows"></tbody>
|
|
</table>
|
|
</div>
|
|
<p id="list-msg" class="msg muted">Loading…</p>
|
|
</section>
|
|
|
|
<dialog id="edit-dlg">
|
|
<form method="dialog" id="edit-form" class="grid">
|
|
<h2 class="span2">Edit stream</h2>
|
|
<input type="hidden" name="id" />
|
|
<label>title <input name="title" /></label>
|
|
<label>channel <input name="channel" /></label>
|
|
<label class="span2">mpd <input name="mpd" /></label>
|
|
<label class="span2">key <textarea name="key" rows="4" placeholder="KID:KEY (one per line)" spellcheck="false"></textarea></label>
|
|
<label class="span2">headers JSON <input name="headers_json" /></label>
|
|
<div class="span2 actions">
|
|
<button type="submit" value="save">Save</button>
|
|
<button type="button" id="edit-cancel" class="ghost">Cancel</button>
|
|
</div>
|
|
</form>
|
|
</dialog>
|
|
|
|
<script src="/static/app.js"></script>
|
|
</body>
|
|
</html>
|