diff options
Diffstat (limited to 'ui/client-scripts')
| -rw-r--r-- | ui/client-scripts/src/player/mediacaps.ts | 6 | ||||
| -rw-r--r-- | ui/client-scripts/src/player/mod.ts | 4 | ||||
| -rw-r--r-- | ui/client-scripts/src/player/player.ts | 2 | ||||
| -rw-r--r-- | ui/client-scripts/src/player/track/mse.ts | 10 | ||||
| -rw-r--r-- | ui/client-scripts/src/player/types_stream.ts | 2 |
5 files changed, 12 insertions, 12 deletions
diff --git a/ui/client-scripts/src/player/mediacaps.ts b/ui/client-scripts/src/player/mediacaps.ts index 4393fe9..ef39602 100644 --- a/ui/client-scripts/src/player/mediacaps.ts +++ b/ui/client-scripts/src/player/mediacaps.ts @@ -16,7 +16,7 @@ export async function test_media_capability(format: FormatInfo, container: Strea const cached = cache.get(cache_key); if (cached !== undefined) return cached const r = await test_media_capability_inner(format, container) - console.log(`media caps: codec=${format.codec} sup=${r}`); + console.log(`media caps: ${format.codec_param} -> ${r}`); cache.set(cache_key, r) return r } @@ -40,7 +40,7 @@ async function test_media_capability_inner(format: FormatInfo, container: Stream type: "media-source", video: { contentType: track_to_content_type(format, container), - framerate: format.samplerate ?? 60, + framerate: format.samplerate ?? 30, width: format.width ?? 1920, height: format.height ?? 1080, bitrate: format.bitrate @@ -62,6 +62,6 @@ const CONTAINER_TO_MIME_TYPE: { [key in StreamContainer]: string } = { webvtt: "text/webvtt", webm: "video/webm", matroska: "video/x-matroska", - mpeg4: "video/mp4", + mp4: "video/mp4", jvtt: "application/jellything-vtt+json" } diff --git a/ui/client-scripts/src/player/mod.ts b/ui/client-scripts/src/player/mod.ts index bb615dd..f46bf63 100644 --- a/ui/client-scripts/src/player/mod.ts +++ b/ui/client-scripts/src/player/mod.ts @@ -53,7 +53,7 @@ type Chapter = { time_start: number, time_end: number, labels: string[][] } function initialize_player(node_id: string, video: HTMLVideoElement): HTMLElement { const logger = new Logger<string>(s => e("p", s)) const start_time = get_query_start_time() ?? 0 // TODO get_continue_time(ndata.userdata.watched); - const player = new Player(video, `/n/${node_id}/stream`, start_time, logger) + const player = new Player(video, `/n/${node_id}/media`, start_time, logger) const show_stats = new OVar(false); const idle_inhibit = new OVar(false) const sync_state = new OVar<Playersync | undefined>(undefined) @@ -64,13 +64,13 @@ function initialize_player(node_id: string, video: HTMLVideoElement): HTMLElemen if (!res.ok) throw "a" return res.json() }) - .catch(() => logger.log_persistent("Node data failed to download")) .then(view => { console.log("got node page view", view); // const ndata = ndata_ as { node: NodePublic, userdata: NodeUserData } // console.log(ndata.node.media!.chapters); // chapters.value = ndata.node.media!.chapters }) + .catch(() => logger.log_persistent("Node data failed to download")) //@ts-ignore for debugging globalThis.player = player; diff --git a/ui/client-scripts/src/player/player.ts b/ui/client-scripts/src/player/player.ts index ab0313f..232b043 100644 --- a/ui/client-scripts/src/player/player.ts +++ b/ui/client-scripts/src/player/player.ts @@ -97,7 +97,7 @@ export class Player { async fetch_meta() { this.set_pers("Loading stream metadata...") - const res = await fetch(`${this.base_url}?info`, { headers: { "Accept": "application/json" } }) + const res = await fetch(`${this.base_url}/formats.json`, { headers: { "Accept": "application/json" } }) if (!res.ok) return this.error.value = "Cannot download stream info." let streaminfo!: StreamInfo & { error: string } diff --git a/ui/client-scripts/src/player/track/mse.ts b/ui/client-scripts/src/player/track/mse.ts index efcd0d5..faee825 100644 --- a/ui/client-scripts/src/player/track/mse.ts +++ b/ui/client-scripts/src/player/track/mse.ts @@ -35,7 +35,7 @@ export class MSEPlayerTrack extends PlayerTrack { async init() { this.buffered.value = [{ start: 0, end: this.player.duration.value, status: "loading" }] try { - const res = await fetch(`${this.base_url}?fragmentindex&t=${this.track_index}`, { headers: { "Accept": "application/json" } }); + const res = await fetch(`${this.base_url}/${this.track_index}/fragindex.json`, { headers: { "Accept": "application/json" } }); if (!res.ok) return this.player.error.value = "Cannot download index.", undefined; let index!: FragmentIndex & { error: string; }; try { index = await res.json(); } @@ -54,7 +54,7 @@ export class MSEPlayerTrack extends PlayerTrack { for (let i = 0; i < this.trackinfo.formats.length; i++) { const format = this.trackinfo.formats[i]; for (const container of format.containers) { - if (container != "webm" && container != "mpeg4") continue; + if (container != "webm" && container != "mp4") continue; if (await test_media_capability(format, container)) this.usable_formats.push({ container, format, format_index: i, usable_index: this.usable_formats.length }) } @@ -163,7 +163,7 @@ export class MSEPlayerTrack extends PlayerTrack { this.loading.add(index); this.update_buf_ranges() // TODO update format selection - const url = `${this.base_url}?fragment&t=${this.track_index}&f=${this.active_format.value!.format_index}&i=${index}&c=${this.active_format.value!.container}`; + const url = `${this.base_url}/${this.track_index}/${this.active_format.value!.format_index}/frag${index}.${this.active_format.value!.container}`; const buf = await this.player.downloader.download(url); await new Promise<void>(cb => { if (!this.index) return; @@ -180,10 +180,10 @@ export class MSEPlayerTrack extends PlayerTrack { 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.active_format.value!.format, this.active_format.value!.container)); - this.source_buffer.timestampOffset = this.active_format.value?.container == "mpeg4" ? frag.start : 0 + // this.source_buffer.timestampOffset = this.active_format.value?.container == "mpeg4" ? frag.start : 0 // this.source_buffer.timestampOffset = this.trackinfo.kind == "video" && !this.active_format.value!.format.remux ? frag.start : 0 // this.source_buffer.timestampOffset = this.active_format.value?.format.remux ? 0 : frag.start - // this.source_buffer.timestampOffset = 0 + this.source_buffer.timestampOffset = 0 this.source_buffer.appendBuffer(frag.buf); } } diff --git a/ui/client-scripts/src/player/types_stream.ts b/ui/client-scripts/src/player/types_stream.ts index 4719335..038b1ff 100644 --- a/ui/client-scripts/src/player/types_stream.ts +++ b/ui/client-scripts/src/player/types_stream.ts @@ -20,7 +20,7 @@ export interface TrackInfo { kind: TrackKind, formats: FormatInfo[] } -export type StreamContainer = "webm" | "matroska" | "mpeg4" | "jvtt" | "webvtt" +export type StreamContainer = "webm" | "matroska" | "mp4" | "jvtt" | "webvtt" export interface FormatInfo { codec: string, codec_param: string, |