aboutsummaryrefslogtreecommitdiff
path: root/web/script/player/mediacaps.ts
diff options
context:
space:
mode:
Diffstat (limited to 'web/script/player/mediacaps.ts')
-rw-r--r--web/script/player/mediacaps.ts18
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");
}