types.ts
⎇
Raw
1import type {
2 AudioCodec,
3 MediaContainer,
4 MediaFile,
5 VideoCodec,
6 VideoEncodingSetting,
7 VideoExtras,
8} from "music-server-shared/types";
9
10export type { Chapter, SubtitleTrack, VideoExtras } from "music-server-shared/types";
11
12export interface PlaylistItem extends MediaFile {
13 id: string; //used for determining currently playing item
14 path: string;
15}
16
17export interface LoadedVideoExtras extends VideoExtras {
18 subtitleSources: Record<number, string>;
19}
20
21export interface Playlist {
22 name: string;
23 items: Omit<PlaylistItem, "id">[];
24}
25
26export interface PlayerState {
27 isPlaying: boolean;
28 currentTrack: PlaylistItem | null;
29 currentTime: number;
30 volume: number;
31 buffered: { start: number; end: number }[];
32 rate: number;
33 waitingForStart: boolean;
34}
35
36export enum StreamingMode {
37 mse = "mse",
38 progressive = "progressive",
39 // same as progressive, but disables chunked transcoding, to workaround some browser issues
40 buffered = "buffered",
41}
42
43//probably support doesn't vary over bitrates/levels (tested for chromium/linux) but is cheap so do it anyway
44export const AUDIO_BITRATES = [32_000, 48_000, 64_000, 96_000, 128_000, 192_000, 320_000];
45export const VIDEO_BITRATES = [
46 210_000, 420_000, 720_000, 1_500_000, 3_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000, 15_000_000, 20_000_000,
47 30_000_000, 40_000_000,
48];
49
50export enum FileDisplay {
51 FILENAME = 0,
52 TITLE = 1,
53 TRACKNO_TITLE = 2,
54}
55
56export interface AppOptions {
57 enableTranscoding: boolean;
58 languages: string;
59 audioLanguagePreference: string;
60 maxTranscodes: number;
61 maxDownloads: number;
62 transcodeCovers: boolean;
63
64 hideVolume: boolean;
65 hideCover: boolean;
66 hidePlaylistCover: boolean;
67 filebrowserDisplay: FileDisplay;
68 playlistDisplay: FileDisplay;
69 controlsDisplay: FileDisplay;
70 fontResolution: number;
71 progressBarHeight: number;
72
73 rememberDir: boolean;
74 duplicateWarning: boolean;
75
76 videoSettings: {
77 streamingMode: StreamingMode;
78 container: MediaContainer;
79 videoCodec: VideoCodec;
80 videoEncodingSetting: VideoEncodingSetting;
81 videoBitrate: number;
82 audioCodec: AudioCodec;
83 audioBitrate: number;
84 };
85 audioSettings: {
86 streamingMode: StreamingMode;
87 container: MediaContainer;
88 audioCodec: AudioCodec;
89 audioBitrate: number;
90 };
91}
92