-
Notifications
You must be signed in to change notification settings - Fork 0
/
HokifyDashboardReceiver.ts
81 lines (73 loc) · 1.83 KB
/
HokifyDashboardReceiver.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { DefaultMediaReceiver } from 'castv2-client';
import { autoPromiseTimeout } from './PromiseHelper';
export interface IPlayerStatus {
mediaSessionId: number;
playbackRate: number;
playerState: 'BUFFERING' | 'PLAYING' | 'IDLE' | 'STOPPED';
currentTime: number;
supportedMediaCommands: number;
volume: { level: number; muted: boolean };
activeTrackIds: string[];
media: {
contentId: string;
contentType: string;
streamType: 'LIVE' | 'BUFFERED';
mediaCategory: 'VIDEO';
duration: number;
tracks: any[];
breakClips: any[];
breaks: any[];
};
currentItemId: number;
items: {
itemId: number;
media: any[];
autoplay: boolean;
activeTrackIds: string[];
orderId: number;
}[];
repeatMode: 'REPEAT_OFF';
}
export class HokifyDashboardReceiverApp extends DefaultMediaReceiver {
static APP_ID = '62EFD2C1';
declare session: any;
on(event: 'error', listener: (err: Error) => void): this;
on(event: 'status', listener: (result: IPlayerStatus) => void): this;
on(event: any, listener: any) {
return super.on(event, listener);
}
seek(time, cb) {
return super.seek(time, cb);
}
async getStatus(): Promise<IPlayerStatus> {
return new Promise<IPlayerStatus>((resolve, reject) => {
super.getStatus((err, result) => {
if (err) {
reject(err);
return;
}
resolve(result);
});
});
}
async load(resource: { url: string; contentType: string }): Promise<IPlayerStatus> {
const media = {
contentId: resource.url,
contentType: resource.contentType || 'video/mp4',
streamType: 'LIVE'
};
return autoPromiseTimeout<IPlayerStatus>(
new Promise((resolve, reject) => {
super.load.call(this, media, { autoplay: true }, (err, result) => {
if (err) {
reject(err);
return;
}
resolve(result);
});
}),
60000,
'took too long to start playing'
);
}
}