diff options
author | metamuffin <metamuffin@disroot.org> | 2025-02-02 12:31:44 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-02-02 12:31:44 +0100 |
commit | 64c962b50d4fbd4605087fc97eac1a032bb826ce (patch) | |
tree | c032c9c01b61a267a1d81f38ccd093be56245aec /web | |
parent | 5970c8da7e2569429b2ef45c63157d0b6416259a (diff) | |
download | jellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar jellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar.bz2 jellything-64c962b50d4fbd4605087fc97eac1a032bb826ce.tar.zst |
consistent fragment naming
Diffstat (limited to 'web')
-rw-r--r-- | web/script/dangerbutton.ts | 5 | ||||
-rw-r--r-- | web/script/player/jhls.d.ts | 2 | ||||
-rw-r--r-- | web/script/player/player.ts | 21 | ||||
-rw-r--r-- | web/script/player/track/create.ts | 5 | ||||
-rw-r--r-- | web/script/player/track/mse.ts | 29 | ||||
-rw-r--r-- | web/script/player/track/vtt.ts | 5 |
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"; |