aboutsummaryrefslogtreecommitdiff
path: root/web/script/player
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-26 03:46:05 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-26 03:46:05 +0100
commit2e41b2b373d5a057061a7694aa5e83001efeaf0f (patch)
treefd9c82fcaf7a8100698b162f9c21ba1852becc88 /web/script/player
parent9918784ba0b71b406e98e069a4e2be10bf72f02e (diff)
downloadjellything-2e41b2b373d5a057061a7694aa5e83001efeaf0f.tar
jellything-2e41b2b373d5a057061a7694aa5e83001efeaf0f.tar.bz2
jellything-2e41b2b373d5a057061a7694aa5e83001efeaf0f.tar.zst
fix a bunch of stupid things regarding subtitles. still doesnt work
Diffstat (limited to 'web/script/player')
-rw-r--r--web/script/player/jhls.d.ts20
-rw-r--r--web/script/player/mediacaps.ts18
2 files changed, 22 insertions, 16 deletions
diff --git a/web/script/player/jhls.d.ts b/web/script/player/jhls.d.ts
index 9030a88..9642c66 100644
--- a/web/script/player/jhls.d.ts
+++ b/web/script/player/jhls.d.ts
@@ -61,19 +61,21 @@ export interface SourceTrack {
codec: string,
language: string,
}
-export interface SourceTrackKind {
- video?: {
+export type SourceTrackKind = {
+ video: {
width: number,
height: number,
fps: number,
- },
- audio?: {
- channels: number,
- sample_rate: number,
- bit_depth: number,
- },
- subtitles?: boolean, // incorrect but lazy rn
+ }
}
+ | {
+ audio: {
+ channels: number,
+ sample_rate: number,
+ bit_depth: number,
+ }
+ } | "subtitles";
+
export interface EncodingProfile {
video?: {
codec: string,
diff --git a/web/script/player/mediacaps.ts b/web/script/player/mediacaps.ts
index 77a210e..ad1a037 100644
--- a/web/script/player/mediacaps.ts
+++ b/web/script/player/mediacaps.ts
@@ -21,13 +21,15 @@ export async function test_media_capability(track: SourceTrack): Promise<boolean
return r
}
async function test_media_capability_inner(track: SourceTrack) {
- if (track.kind.subtitles) {
- return track.codec == "V_TEXT/WEBVTT" // TODO: actually implement it
+ console.log(track);
+ if (track.kind == "subtitles") {
+ // TODO do we need to check this?
+ return track.codec == "V_TEXT/WEBVTT" || track.codec == "D_WEBVTT/SUBTITLES"
}
let res;
const codec = MASTROSKA_CODEC_MAP[track.codec]
if (!codec) return console.warn(`unknown codec: ${track.codec}`), false
- if (track.kind.audio) {
+ if ("audio" in track.kind) {
res = await navigator.mediaCapabilities.decodingInfo({
type: "media-source",
audio: {
@@ -38,7 +40,7 @@ async function test_media_capability_inner(track: SourceTrack) {
}
})
}
- if (track.kind.video) {
+ if ("video" in track.kind) {
res = await navigator.mediaCapabilities.decodingInfo({
type: "media-source",
video: {
@@ -54,6 +56,7 @@ async function test_media_capability_inner(track: SourceTrack) {
}
export function track_to_content_type(track: SourceTrack): string | undefined {
+ if (track.kind == "subtitles") return "video/webm"
const codec = MASTROSKA_CODEC_MAP[track.codec]
if (!codec) return
return `${get_track_kind(track.kind)}/webm; codecs="${codec}"`
@@ -76,7 +79,7 @@ export function profile_to_partial_track(profile: EncodingProfile): SourceTrack
} else if (profile.subtitles) {
return {
codec: FFMPEG_ENCODER_CODEC_MAP[profile.subtitles.codec],
- kind: { subtitles: true },
+ kind: "subtitles",
language: "en",
name: "test subtitle"
}
@@ -92,6 +95,7 @@ const MASTROSKA_CODEC_MAP: { [key: string]: string } = {
"A_OPUS": "opus",
"A_VORBIS": "vorbis",
"S_TEXT/WEBVTT": "webvtt",
+ "D_WEBVTT/SUBTITLES": "webvtt",
}
const FFMPEG_ENCODER_CODEC_MAP: { [key: string]: string } = {
@@ -104,10 +108,10 @@ const FFMPEG_ENCODER_CODEC_MAP: { [key: string]: string } = {
export type TrackKind = "audio" | "video" | "subtitles"
export function get_track_kind(track: SourceTrackKind): TrackKind {
- if (track.audio) return "audio"
- if (track.video) return "video"
//@ts-ignore // TODO clean this mess up please
// TODO why is the subtitle encoded diffenrently sometimes?!
if (track == "subtitles" || track["subtitles"]) return "subtitles"
+ if ("audio" in track) return "audio"
+ if ("video" in track) return "video"
throw new Error("invalid track");
}