Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions docs/media-showcase.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ The recording label sits with the source caption below the player. It does
not cover the picture or Safari’s native fullscreen control when controls
appear.

The player pins RelaySwarm source `25354e3cb843b606fc51cdb47a548e9d90d0d091`
([source change](https://github.com/forgesworn/relayswarm/commit/25354e3cb843b606fc51cdb47a548e9d90d0d091)).
The player pins RelaySwarm source `d4a1235b035b4244ea73b55b1da0d4f88f64c376`
([source change](https://github.com/forgesworn/relayswarm/commit/d4a1235b035b4244ea73b55b1da0d4f88f64c376)).
It retains the successful peer receipt's stats when hls.js disposes of the
losing HTTP loader, covered by ten regressions using the actual hls.js 1.7.3
loaders. It also retains a fully verified contiguous future prefix before considering
Expand All @@ -35,6 +35,12 @@ the original first-fragment load entry, clipped to a shorter parent load
deadline; ordinary speculative requests keep their eight-second expiry.
Authority checks and explicit refusal for insufficient capacity remain. The Rust/WASM
binary is unchanged.
Verified short peer pieces can now refresh an older throughput estimate by
forming a batch within the same transfer and connection. Both the existing
300 ms and 32 KiB observation floors still apply. The interval includes gaps
and verification time; origin bytes, duplicate credit, rejected responses
and other links cannot train it. This adds no requests or first-byte timing
sample. It corrects estimator inputs rather than proving faster playback.
Parsed fragment start positions can differ by floating-point roundoff between
playlist revisions. Startup now accepts that difference within a bounded machine-precision
tolerance, capped at one nanosecond, instead of falsely cancelling a matching context; sequence,
Expand All @@ -61,6 +67,14 @@ Earlier playback measurements below retain their captured revisions; this
update does not establish a bandwidth saving, smoother playback or a new
physical-phone result.

The 27 October 330-second public check on RelaySwarm `25354e3` and site
`acd26cd` started both fresh M4 Chrome profiles, then recorded 9 and 11
post-frame stalls respectively. Accepted peer shares were 30.96% and 15.98%;
these are not source traffic savings. Playback continued across a programme
wrap, but fewer than 60 seconds were observed afterwards. This failed
sustained-playback check remains failed; the estimator correction needs a
new check on its actual published assets.

The [27 October public pair attempt](evidence/public-pair-startup-red-20261027.json)
did not complete its planned observation: the first viewer presented 4K after
4.629 seconds, but the second viewer reached the one-shot startup buffer's
Expand Down
2 changes: 1 addition & 1 deletion scripts/build-media-peer-demo.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { tmpdir } from 'node:os';
import { dirname, join, resolve } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';

const SOURCE = '25354e3cb843b606fc51cdb47a548e9d90d0d091';
const SOURCE = 'd4a1235b035b4244ea73b55b1da0d4f88f64c376';
const sha = bytes => createHash('sha256').update(bytes).digest('hex');
const root = fileURLToPath(new URL('../', import.meta.url));

Expand Down
2 changes: 1 addition & 1 deletion site/live-media.html
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,6 @@
</main>
<!-- SHOWCASE_END -->
<footer class="site-footer"><div class="page-wrap"><div class="footer-inner"><a class="brand" href="/">Forge<span>Sworn</span></a><div class="footer-links"><a href="https://github.com/forgesworn">GitHub</a><a href="/live-media-benchmarks.html">Measured results</a><a href="https://github.com/sponsors/TheCryptoDonkey">Support the work ↗</a></div></div><p class="footer-note">Open-source media software, yours to run. The supplied mix is licensed for this demonstration; its media rights are separate from the MIT code. <a href="/media/dejavu-preview/NOTICE.txt">Media permission</a> · <a href="/llms.txt">For developers and LLMs</a></p></div></footer>
<script type="module" src="/media-lab.mjs?v=20261027-startup-bytes"></script>
<script type="module" src="/media-lab.mjs?v=20261028-verified-piece-flow"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion site/llms.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion site/media-lab.html
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,6 @@
</main>
<!-- SHOWCASE_END -->
<footer class="site-footer"><div class="page-wrap"><div class="footer-inner"><a class="brand" href="/">Forge<span>Sworn</span></a><div class="footer-links"><a href="https://github.com/forgesworn">GitHub</a><a href="/live-media-benchmarks.html">Measured results</a><a href="https://github.com/sponsors/TheCryptoDonkey">Support the work ↗</a></div></div><p class="footer-note">Open-source media software, yours to run. The supplied mix is licensed for this demonstration; its media rights are separate from the MIT code. <a href="/media/dejavu-preview/NOTICE.txt">Media permission</a> · <a href="/llms.txt">For developers and LLMs</a></p></div></footer>
<script type="module" src="/media-lab.mjs?v=20261027-startup-bytes"></script>
<script type="module" src="/media-lab.mjs?v=20261028-verified-piece-flow"></script>
</body>
</html>
4 changes: 2 additions & 2 deletions site/media-lab.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ async function initialise() {
publicRoom?.stop(); publicRoom = null;
const pending = (async () => {
const [{ createListenerSession }, { PUBLIC_SWARM_SOURCE_SHA256, PUBLIC_SWARM_RELAYS }] = await Promise.all([
import('./media-listener-session.mjs?v=20261027-startup-bytes'), import('./media-public-swarm.mjs?v=20261027-startup-bytes'),
import('./media-listener-session.mjs?v=20261028-verified-piece-flow'), import('./media-public-swarm.mjs?v=20261028-verified-piece-flow'),
]);
if (request !== publicRoomRequest || pageAbort.signal.aborted) return null;
const clock = createListenerSession({ room: `forgesworn-dejavu-listening-v${quality === 'full' ? 2 : 1}-${quality}`, source: PUBLIC_SWARM_SOURCE_SHA256,
Expand Down Expand Up @@ -1522,7 +1522,7 @@ async function initialise() {
if (player) {
let peer, setupEpoch;
try {
const { createPublicSwarm, prepareRecordedSource, createRecordedLive } = await import('./media-public-swarm.mjs?v=20261027-startup-bytes');
const { createPublicSwarm, prepareRecordedSource, createRecordedLive } = await import('./media-public-swarm.mjs?v=20261028-verified-piece-flow');
if (!owns() || s.hls !== player) return;
// These two exports share the exact helper module/recording brand.
// A cold first room prepares locally before publishing its clock.
Expand Down
2 changes: 1 addition & 1 deletion site/media-listener-session.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Signed, short-lived observations of a shared listening clock. This is an
// experimental public addressable event (NIP-01), not NIP-78 private app storage.
// Relay partitions and dishonest clients prevent an authoritative audience count.
import { finalizeEvent, generateSecretKey, verifyEvent } from './vendor/media-peer-demo.js?v=20261027-startup-bytes';
import { finalizeEvent, generateSecretKey, verifyEvent } from './vendor/media-peer-demo.js?v=20261028-verified-piece-flow';

export const LISTENER_SESSION_KIND = 30378;
export const LISTENER_TELEMETRY_KIND = 20378;
Expand Down
4 changes: 2 additions & 2 deletions site/media-public-swarm.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// A receiver's ephemeral key wraps that digest for the existing live-commitment
// verifier; this is local attestation, not a live broadcaster signing service.
import { createHlsSwarm, commitmentContent, commitmentPieceSize, segmentMediaContext, KIND_SEGMENT_COMMITMENT, finalizeEvent,
generateSecretKey, relayswarmBuild } from './vendor/media-peer-demo.js?v=20261027-startup-bytes';
generateSecretKey, relayswarmBuild } from './vendor/media-peer-demo.js?v=20261028-verified-piece-flow';
import { observeOriginLoader } from './media-transfer-stats.mjs?v=20261027-visual-provenance';
import { createPublicTurnCredentials } from './media-turn-credentials.mjs?v=20261025-prepared-room';
import { parseRecordedManifest, createRecordedLive } from './media-recorded-live.mjs?v=20261025-prepared-room';
Expand Down Expand Up @@ -479,7 +479,7 @@ export function createPublicSwarm({ Hls, hls, video, playlistUrl, quality, signa
swarm = createSwarm({ mode: 'peer-first', swarmId: plan.swarmId, relays: [...PUBLIC_SWARM_RELAYS],
streamEvent, getCommitment, serve: true, serveOnCellular: false,
coreWasm: new URL('./vendor/relayswarm-core.wasm?v=20261026-prepared-adoption', import.meta.url), multiHolder: true,
transferWorkerUrl: new URL('./vendor/relayswarm-transfer-worker.js?v=20261027-startup-bytes', import.meta.url),
transferWorkerUrl: new URL('./vendor/relayswarm-transfer-worker.js?v=20261028-verified-piece-flow', import.meta.url),
zeroBudgetPeerRace: true, lateHaveRace: true, sustainablePeerWait: true,
warmAhead: false,
startupBufferMaxBytes: (needsStartupBuffer ? 32 : 24) * 1024 * 1024,
Expand Down
2 changes: 1 addition & 1 deletion site/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -1985,6 +1985,6 @@ <h2 class="reveal">Pick a block and start</h2>
});
});
</script>
<script type="module" src="/media-lab.mjs?v=20261027-startup-bytes"></script>
<script type="module" src="/media-lab.mjs?v=20261028-verified-piece-flow"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion site/vendor/media-peer-demo.NOTICE.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
RelaySwarm 0.4.4
https://github.com/forgesworn/relayswarm/tree/25354e3cb843b606fc51cdb47a548e9d90d0d091
https://github.com/forgesworn/relayswarm/tree/d4a1235b035b4244ea73b55b1da0d4f88f64c376

MIT License

Expand Down
10 changes: 5 additions & 5 deletions site/vendor/media-peer-demo.build.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"schema": 1,
"project": "https://github.com/forgesworn/relayswarm",
"sourceCommit": "25354e3cb843b606fc51cdb47a548e9d90d0d091",
"sourceCommit": "d4a1235b035b4244ea73b55b1da0d4f88f64c376",
"version": "0.4.4",
"sourceArchiveSha256": "4e9819a3583fd13db28234f55cd4ce8dabb177cb14bbb92e7236b614dc979c85",
"sourceArchiveSha256": "441c3482cb43b0b250f439f40bb5457a8aa887e354acb4be8cedb0eb76aa385f",
"packageLockSha256": "18a91b8d697ebcab1d259d4de876167dcbd4d47fc3c82196d179c4c490adca4a",
"bundle": "media-peer-demo.js",
"bundleSha256": "d2c2d70ea64bfa99dcf80fa445aef7ab71ddd6c8345db1bce7d0b4eeb1d60746",
"bundleBytes": 261979,
"bundleSha256": "0678f84ada02ac7ec5d5585363670bdc77730af99c7488b61c61a1512c8a9dc5",
"bundleBytes": 263683,
"transferWorker": {
"file": "relayswarm-transfer-worker.js",
"bytes": 7074,
"sha256": "caeb0b7957e7d29955010f24566efb30ce17987053599ee58ae4cffaa799adbd",
"sha256": "e1e02f93345f28cdbf96f1a20593e1f65d7b115a7ee1dd0ced1f0ee4b81164ba",
"source": "src/browser/core-transfer-worker-runtime.mjs"
},
"sourceMap": false,
Expand Down
8 changes: 4 additions & 4 deletions site/vendor/media-peer-demo.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion site/vendor/relayswarm-core.NOTICE.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
RelaySwarm Rust/WebAssembly core
https://github.com/forgesworn/relayswarm/tree/25354e3cb843b606fc51cdb47a548e9d90d0d091
https://github.com/forgesworn/relayswarm/tree/d4a1235b035b4244ea73b55b1da0d4f88f64c376

MIT License

Expand Down
2 changes: 1 addition & 1 deletion site/vendor/relayswarm-transfer-worker.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading