diff options
Diffstat (limited to 'web/script/player/mediacaps.ts')
-rw-r--r-- | web/script/player/mediacaps.ts | 18 |
1 files changed, 11 insertions, 7 deletions
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"); } |