aboutsummaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-02-02 12:31:44 +0100
committermetamuffin <metamuffin@disroot.org>2025-02-02 12:31:44 +0100
commit64c962b50d4fbd4605087fc97eac1a032bb826ce (patch)
treec032c9c01b61a267a1d81f38ccd093be56245aec /web
parent5970c8da7e2569429b2ef45c63157d0b6416259a (diff)
downloadjellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar
jellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar.bz2
jellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar.zst
consistent fragment naming
Diffstat (limited to 'web')
-rw-r--r--web/script/dangerbutton.ts5
-rw-r--r--web/script/player/jhls.d.ts2
-rw-r--r--web/script/player/player.ts21
-rw-r--r--web/script/player/track/create.ts5
-rw-r--r--web/script/player/track/mse.ts29
-rw-r--r--web/script/player/track/vtt.ts5
6 files changed, 44 insertions, 23 deletions
diff --git a/web/script/dangerbutton.ts b/web/script/dangerbutton.ts
index aabcdb9..a6d82d0 100644
--- a/web/script/dangerbutton.ts
+++ b/web/script/dangerbutton.ts
@@ -1,3 +1,8 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2025 metamuffin <metamuffin.org>
+*/
globalThis.addEventListener("DOMContentLoaded", () => {
document.querySelectorAll("input.danger").forEach(el => {
el.addEventListener("click", ev => {
diff --git a/web/script/player/jhls.d.ts b/web/script/player/jhls.d.ts
index b3b223d..c7325e4 100644
--- a/web/script/player/jhls.d.ts
+++ b/web/script/player/jhls.d.ts
@@ -5,7 +5,7 @@
*/
export interface JhlsTrackIndex {
- segments: TimeRange[],
+ fragments: TimeRange[],
extra_profiles: EncodingProfile[],
}
diff --git a/web/script/player/player.ts b/web/script/player/player.ts
index aefc5e6..4eb01d5 100644
--- a/web/script/player/player.ts
+++ b/web/script/player/player.ts
@@ -100,20 +100,22 @@ export class Player {
}
async fetch_meta() {
- this.set_pers("Loading node...")
- const res = await fetch(`/n/${encodeURIComponent(this.node_id)}`, { headers: { "Accept": "application/json" } })
- if (!res.ok) return this.error.value = "Cannot download node."
+ this.set_pers("Loading metadata...")
+ const [res, udres] = await Promise.all([
+ fetch(`/n/${encodeURIComponent(this.node_id)}`, { headers: { "Accept": "application/json" } }),
+ fetch(`/n/${encodeURIComponent(this.node_id)}/userdata`, { headers: { "Accept": "application/json" } })
+ ])
+
+ if (!res.ok || !udres.ok) return this.error.value = "Cannot download node."
+
let metadata!: NodePublic & { error: string }
try { metadata = await res.json() }
- catch (_) { this.set_pers("Error: Failed to fetch node") }
+ catch (_) { this.set_pers("Error: Node data invalid") }
if (metadata.error) return this.set_pers("server error: " + metadata.error)
- this.set_pers("Loading node user data...")
- const udres = await fetch(`/n/${encodeURIComponent(this.node_id)}/userdata`, { headers: { "Accept": "application/json" } })
- if (!udres.ok) return this.error.value = "Cannot download node."
let userdata!: NodeUserData & { error: string }
try { userdata = await udres.json() }
- catch (_) { this.set_pers("Error: Failed to fetch node user data") }
+ catch (_) { this.set_pers("Error: Node user data invalid") }
if (userdata.error) return this.set_pers("server error: " + metadata.error)
this.set_pers()
@@ -124,7 +126,6 @@ export class Player {
this.video.src = URL.createObjectURL(this.media_source)
this.media_source.addEventListener("sourceopen", async () => {
- this.set_pers("Downloading track indecies...")
let video = false, audio = false, subtitles = false;
for (let i = 0; i < this.tracks!.length; i++) {
const t = this.tracks![i];
@@ -137,7 +138,7 @@ export class Player {
subtitles = true, await this.set_track_enabled(i, true, false)
}
- this.set_pers("Downloading initial segments...")
+ this.set_pers("Buffering initial stream fragments...")
const start_time = get_query_start_time() ?? get_continue_time(userdata.watched);
this.update(start_time)
diff --git a/web/script/player/track/create.ts b/web/script/player/track/create.ts
index d63a9ce..1aaf12c 100644
--- a/web/script/player/track/create.ts
+++ b/web/script/player/track/create.ts
@@ -1,3 +1,8 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2025 metamuffin <metamuffin.org>
+*/
import { get_track_kind } from "../mediacaps.ts";
import { VttPlayerTrack } from "./vtt.ts";
import { MSEPlayerTrack } from "./mse.ts";
diff --git a/web/script/player/track/mse.ts b/web/script/player/track/mse.ts
index 803d562..b7a31e0 100644
--- a/web/script/player/track/mse.ts
+++ b/web/script/player/track/mse.ts
@@ -1,3 +1,8 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2025 metamuffin <metamuffin.org>
+*/
import { JhlsTrackIndex, SourceTrack } from "../jhls.d.ts";
import { OVar } from "../../jshelper/mod.ts";
import { profile_to_partial_track, track_to_content_type } from "../mediacaps.ts";
@@ -91,7 +96,7 @@ export class MSEPlayerTrack extends PlayerTrack {
});
}
for (const r of this.loading) {
- ranges.push({ ...this.index.segments[r], status: "loading" });
+ ranges.push({ ...this.index.fragments[r], status: "loading" });
}
this.buffered.value = ranges;
}
@@ -101,12 +106,12 @@ export class MSEPlayerTrack extends PlayerTrack {
this.update_buf_ranges(); // TODO required?
const blocking = [];
- for (let i = 0; i < this.index.segments.length; i++) {
- const seg = this.index.segments[i];
- if (seg.end < target) continue;
- if (seg.start >= target + TARGET_BUFFER_DURATION) break;
- if (!this.check_buf_collision(seg.start, seg.end)) continue;
- if (seg.start <= target + MIN_BUFFER_DURATION)
+ for (let i = 0; i < this.index.fragments.length; i++) {
+ const frag = this.index.fragments[i];
+ if (frag.end < target) continue;
+ if (frag.start >= target + TARGET_BUFFER_DURATION) break;
+ if (!this.check_buf_collision(frag.start, frag.end)) continue;
+ if (frag.start <= target + MIN_BUFFER_DURATION)
blocking.push(this.load(i));
else
this.load(i);
@@ -129,20 +134,20 @@ export class MSEPlayerTrack extends PlayerTrack {
await new Promise<void>(cb => {
if (!this.index) return;
if (this.abort.signal.aborted) return;
- this.append_queue.push({ buf, ...this.index.segments[index], index, cb });
+ this.append_queue.push({ buf, ...this.index.fragments[index], index, cb });
this.tick_append();
});
}
tick_append() {
if (this.source_buffer.updating || this.current_load) return;
if (this.append_queue.length) {
- const seg = this.append_queue[0];
+ const frag = this.append_queue[0];
this.append_queue.splice(0, 1);
- this.current_load = seg;
+ this.current_load = frag;
// TODO why is appending so unreliable?! sometimes it does not add it
this.source_buffer.changeType(track_to_content_type(this.track_from_profile())!);
- // this.source_buffer.timestampOffset = seg.start;
- this.source_buffer.appendBuffer(seg.buf);
+ console.log(`append track ${this.track_index}`);
+ this.source_buffer.appendBuffer(frag.buf);
}
}
diff --git a/web/script/player/track/vtt.ts b/web/script/player/track/vtt.ts
index 8301457..ea4951c 100644
--- a/web/script/player/track/vtt.ts
+++ b/web/script/player/track/vtt.ts
@@ -1,3 +1,8 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2025 metamuffin <metamuffin.org>
+*/
import { e } from "../../jshelper/src/element.ts";
import { SourceTrack, JvttCue } from "../jhls.d.ts";
import { Player } from "../player.ts";