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