@clockworkdog/cogs-client 0.16.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -8
- package/dist/AudioPlayer.d.ts +9 -2
- package/dist/AudioPlayer.js +82 -47
- package/dist/AudioPlayer.js.map +1 -1
- package/dist/CogsConnection.d.ts +4 -0
- package/dist/CogsConnection.js +26 -22
- package/dist/CogsConnection.js.map +1 -1
- package/dist/VideoPlayer.d.ts +48 -0
- package/dist/VideoPlayer.js +287 -0
- package/dist/VideoPlayer.js.map +1 -0
- package/dist/browser/index.js +445 -89
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types/AllMediaClipStatesMessage.d.ts +5 -0
- package/dist/types/AllMediaClipStatesMessage.js +3 -0
- package/dist/types/AllMediaClipStatesMessage.js.map +1 -0
- package/dist/types/AudioState.d.ts +1 -0
- package/dist/types/CogsClientMessage.d.ts +10 -0
- package/dist/types/MediaClipStateMessage.d.ts +7 -0
- package/dist/types/MediaClipStateMessage.js +3 -0
- package/dist/types/MediaClipStateMessage.js.map +1 -0
- package/dist/types/VideoState.d.ts +26 -0
- package/dist/types/VideoState.js +9 -0
- package/dist/types/VideoState.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const urls_1 = require("./helpers/urls");
|
|
4
|
+
const VideoState_1 = require("./types/VideoState");
|
|
5
|
+
const DEFAULT_PARENT_ELEMENT = document.body;
|
|
6
|
+
class VideoPlayer {
|
|
7
|
+
constructor(cogsConnection, parentElement = DEFAULT_PARENT_ELEMENT) {
|
|
8
|
+
this.eventTarget = new EventTarget();
|
|
9
|
+
this.globalVolume = 1;
|
|
10
|
+
this.videoClipPlayers = {};
|
|
11
|
+
this.parentElement = parentElement;
|
|
12
|
+
// Send the current status of each clip to COGS
|
|
13
|
+
this.addEventListener('videoClipState', ({ detail }) => {
|
|
14
|
+
cogsConnection.sendMediaClipState(detail);
|
|
15
|
+
});
|
|
16
|
+
// Listen for video control messages
|
|
17
|
+
cogsConnection.addEventListener('message', (event) => {
|
|
18
|
+
const message = event.detail;
|
|
19
|
+
switch (message.type) {
|
|
20
|
+
case 'media_config_update':
|
|
21
|
+
this.setGlobalVolume(message.globalVolume);
|
|
22
|
+
this.updateConfig(message.files);
|
|
23
|
+
break;
|
|
24
|
+
case 'video_play':
|
|
25
|
+
this.playVideoClip(message.file, {
|
|
26
|
+
playId: message.playId,
|
|
27
|
+
volume: message.volume,
|
|
28
|
+
loop: Boolean(message.loop),
|
|
29
|
+
fit: message.fit,
|
|
30
|
+
});
|
|
31
|
+
break;
|
|
32
|
+
case 'video_pause':
|
|
33
|
+
this.pauseVideoClip();
|
|
34
|
+
break;
|
|
35
|
+
case 'video_stop':
|
|
36
|
+
this.stopVideoClip();
|
|
37
|
+
break;
|
|
38
|
+
case 'video_set_volume':
|
|
39
|
+
this.setVideoClipVolume({ volume: message.volume });
|
|
40
|
+
break;
|
|
41
|
+
case 'video_set_fit':
|
|
42
|
+
this.setVideoClipFit({ fit: message.fit });
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// On connection, send the current playing state of all clips
|
|
47
|
+
// (Usually empty unless websocket is reconnecting)
|
|
48
|
+
const sendInitialClipStates = () => {
|
|
49
|
+
const files = Object.entries(this.videoClipPlayers).map(([file, player]) => {
|
|
50
|
+
const status = !player.videoElement.paused
|
|
51
|
+
? 'playing'
|
|
52
|
+
: player.videoElement.currentTime === 0 || player.videoElement.currentTime === player.videoElement.duration
|
|
53
|
+
? 'paused'
|
|
54
|
+
: 'stopped';
|
|
55
|
+
return [file, status];
|
|
56
|
+
});
|
|
57
|
+
cogsConnection.sendInitialMediaClipStates({ mediaType: 'video', files });
|
|
58
|
+
};
|
|
59
|
+
cogsConnection.addEventListener('open', sendInitialClipStates);
|
|
60
|
+
sendInitialClipStates();
|
|
61
|
+
}
|
|
62
|
+
setParentElement(parentElement) {
|
|
63
|
+
this.parentElement = parentElement;
|
|
64
|
+
Object.values(this.videoClipPlayers).forEach((clipPlayer) => {
|
|
65
|
+
parentElement.appendChild(clipPlayer.videoElement);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
resetParentElement() {
|
|
69
|
+
this.setParentElement(DEFAULT_PARENT_ELEMENT);
|
|
70
|
+
}
|
|
71
|
+
setGlobalVolume(globalVolume) {
|
|
72
|
+
Object.values(this.videoClipPlayers).forEach((clipPlayer) => {
|
|
73
|
+
clipPlayer.videoElement.volume = clipPlayer.volume * globalVolume;
|
|
74
|
+
});
|
|
75
|
+
this.globalVolume = globalVolume;
|
|
76
|
+
this.notifyStateListeners();
|
|
77
|
+
}
|
|
78
|
+
playVideoClip(path, { playId, volume, loop, fit }) {
|
|
79
|
+
if (this.activeClip) {
|
|
80
|
+
if (this.activeClip.path !== path) {
|
|
81
|
+
this.stopVideoClip();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
if (!this.videoClipPlayers[path]) {
|
|
86
|
+
this.videoClipPlayers[path] = this.createClipPlayer(path, { preload: false, ephemeral: true, fit });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
this.activeClip = { path, playId };
|
|
90
|
+
this.updateVideoClipPlayer(path, (clipPlayer) => {
|
|
91
|
+
clipPlayer.volume = volume;
|
|
92
|
+
clipPlayer.videoElement.volume = volume * this.globalVolume;
|
|
93
|
+
clipPlayer.videoElement.loop = loop;
|
|
94
|
+
clipPlayer.videoElement.style.objectFit = fit;
|
|
95
|
+
if (clipPlayer.videoElement.currentTime === clipPlayer.videoElement.duration) {
|
|
96
|
+
clipPlayer.videoElement.currentTime = 0;
|
|
97
|
+
}
|
|
98
|
+
clipPlayer.videoElement.play();
|
|
99
|
+
clipPlayer.videoElement.style.display = 'block';
|
|
100
|
+
return clipPlayer;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
pauseVideoClip() {
|
|
104
|
+
if (this.activeClip) {
|
|
105
|
+
const { playId, path } = this.activeClip;
|
|
106
|
+
this.updateVideoClipPlayer(path, (clipPlayer) => {
|
|
107
|
+
var _a;
|
|
108
|
+
(_a = clipPlayer.videoElement) === null || _a === void 0 ? void 0 : _a.pause();
|
|
109
|
+
return clipPlayer;
|
|
110
|
+
});
|
|
111
|
+
this.notifyClipStateListeners(playId, path, 'paused');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
stopVideoClip() {
|
|
115
|
+
if (this.activeClip) {
|
|
116
|
+
this.handleStoppedClip(this.activeClip.path);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
setVideoClipVolume({ volume }) {
|
|
120
|
+
if (!this.activeClip) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!(volume >= 0 && volume <= 1)) {
|
|
124
|
+
console.warn('Invalid volume', volume);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this.updateVideoClipPlayer(this.activeClip.path, (clipPlayer) => {
|
|
128
|
+
if (clipPlayer.videoElement) {
|
|
129
|
+
clipPlayer.videoElement.volume = volume * this.globalVolume;
|
|
130
|
+
}
|
|
131
|
+
return clipPlayer;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
setVideoClipLoop({ loop }) {
|
|
135
|
+
if (!this.activeClip) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.updateVideoClipPlayer(this.activeClip.path, (clipPlayer) => {
|
|
139
|
+
if (clipPlayer.videoElement) {
|
|
140
|
+
clipPlayer.videoElement.loop = loop || false;
|
|
141
|
+
}
|
|
142
|
+
return clipPlayer;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
setVideoClipFit({ fit }) {
|
|
146
|
+
if (!this.activeClip) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.updateVideoClipPlayer(this.activeClip.path, (clipPlayer) => {
|
|
150
|
+
if (clipPlayer.videoElement) {
|
|
151
|
+
clipPlayer.videoElement.style.objectFit = fit;
|
|
152
|
+
}
|
|
153
|
+
return clipPlayer;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
handleStoppedClip(path) {
|
|
157
|
+
if (!this.activeClip || this.activeClip.path !== path) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const playId = this.activeClip.playId;
|
|
161
|
+
// Once an ephemeral clip stops, cleanup and remove the player
|
|
162
|
+
if (this.videoClipPlayers[this.activeClip.path].config.ephemeral) {
|
|
163
|
+
this.unloadClip(path);
|
|
164
|
+
}
|
|
165
|
+
this.activeClip = undefined;
|
|
166
|
+
this.updateVideoClipPlayer(path, (clipPlayer) => {
|
|
167
|
+
clipPlayer.videoElement.pause();
|
|
168
|
+
clipPlayer.videoElement.currentTime = 0;
|
|
169
|
+
clipPlayer.videoElement.style.display = 'none';
|
|
170
|
+
return clipPlayer;
|
|
171
|
+
});
|
|
172
|
+
this.notifyClipStateListeners(playId, path, 'stopped');
|
|
173
|
+
}
|
|
174
|
+
updateVideoClipPlayer(path, update) {
|
|
175
|
+
if (this.videoClipPlayers[path]) {
|
|
176
|
+
const newPlayer = update(this.videoClipPlayers[path]);
|
|
177
|
+
if (newPlayer) {
|
|
178
|
+
this.videoClipPlayers[path] = newPlayer;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
delete this.videoClipPlayers[path];
|
|
182
|
+
}
|
|
183
|
+
this.notifyStateListeners();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
updateConfig(newPaths) {
|
|
187
|
+
const newVideoPaths = Object.fromEntries(Object.entries(newPaths).filter(([, { type }]) => type === 'video' || !type));
|
|
188
|
+
const previousClipPlayers = this.videoClipPlayers;
|
|
189
|
+
this.videoClipPlayers = (() => {
|
|
190
|
+
const clipPlayers = { ...previousClipPlayers };
|
|
191
|
+
const removedClips = Object.keys(previousClipPlayers).filter((previousPath) => !(previousPath in newVideoPaths) && !previousClipPlayers[previousPath].config.ephemeral);
|
|
192
|
+
removedClips.forEach((path) => {
|
|
193
|
+
this.unloadClip(path);
|
|
194
|
+
delete clipPlayers[path];
|
|
195
|
+
});
|
|
196
|
+
const addedClips = Object.entries(newVideoPaths).filter(([newFile]) => !previousClipPlayers[newFile]);
|
|
197
|
+
addedClips.forEach(([path, config]) => {
|
|
198
|
+
clipPlayers[path] = this.createClipPlayer(path, { ...config, ephemeral: false, fit: 'contain' });
|
|
199
|
+
});
|
|
200
|
+
const updatedClips = Object.entries(previousClipPlayers).filter(([previousPath]) => previousPath in newVideoPaths);
|
|
201
|
+
updatedClips.forEach(([path, previousClipPlayer]) => {
|
|
202
|
+
if (previousClipPlayer.config.preload !== newVideoPaths[path].preload) {
|
|
203
|
+
this.unloadClip(path);
|
|
204
|
+
clipPlayers[path] = this.createClipPlayer(path, { ...previousClipPlayer.config, preload: newVideoPaths[path].preload, ephemeral: false });
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return clipPlayers;
|
|
208
|
+
})();
|
|
209
|
+
this.notifyStateListeners();
|
|
210
|
+
}
|
|
211
|
+
notifyStateListeners() {
|
|
212
|
+
var _a, _b, _c, _d, _e, _f;
|
|
213
|
+
const VideoState = {
|
|
214
|
+
globalVolume: this.globalVolume,
|
|
215
|
+
isPlaying: this.activeClip ? !((_a = this.videoClipPlayers[this.activeClip.path].videoElement) === null || _a === void 0 ? void 0 : _a.paused) : false,
|
|
216
|
+
clips: { ...this.videoClipPlayers },
|
|
217
|
+
activeClip: this.activeClip
|
|
218
|
+
? {
|
|
219
|
+
path: this.activeClip.path,
|
|
220
|
+
state: !((_b = this.videoClipPlayers[this.activeClip.path].videoElement) === null || _b === void 0 ? void 0 : _b.paused) ? VideoState_1.ActiveVideoClipState.Playing : VideoState_1.ActiveVideoClipState.Paused,
|
|
221
|
+
loop: (_d = (_c = this.videoClipPlayers[this.activeClip.path].videoElement) === null || _c === void 0 ? void 0 : _c.loop) !== null && _d !== void 0 ? _d : false,
|
|
222
|
+
volume: (_f = (_e = this.videoClipPlayers[this.activeClip.path].videoElement) === null || _e === void 0 ? void 0 : _e.volume) !== null && _f !== void 0 ? _f : 0,
|
|
223
|
+
}
|
|
224
|
+
: undefined,
|
|
225
|
+
};
|
|
226
|
+
this.dispatchEvent('state', VideoState);
|
|
227
|
+
}
|
|
228
|
+
notifyClipStateListeners(playId, file, status) {
|
|
229
|
+
this.dispatchEvent('videoClipState', { playId, mediaType: 'video', file, status });
|
|
230
|
+
}
|
|
231
|
+
// Type-safe wrapper around EventTarget
|
|
232
|
+
addEventListener(type, listener, options) {
|
|
233
|
+
this.eventTarget.addEventListener(type, listener, options);
|
|
234
|
+
}
|
|
235
|
+
removeEventListener(type, listener, options) {
|
|
236
|
+
this.eventTarget.removeEventListener(type, listener, options);
|
|
237
|
+
}
|
|
238
|
+
dispatchEvent(type, detail) {
|
|
239
|
+
this.eventTarget.dispatchEvent(new CustomEvent(type, { detail }));
|
|
240
|
+
}
|
|
241
|
+
createVideoElement(path, config, { volume }) {
|
|
242
|
+
const videoElement = document.createElement('video');
|
|
243
|
+
videoElement.src = urls_1.assetUrl(path);
|
|
244
|
+
videoElement.autoplay = false;
|
|
245
|
+
videoElement.loop = false;
|
|
246
|
+
videoElement.volume = this.globalVolume * volume;
|
|
247
|
+
videoElement.preload = config.preload ? 'metadata' : 'none';
|
|
248
|
+
videoElement.addEventListener('playing', () => {
|
|
249
|
+
var _a;
|
|
250
|
+
if (((_a = this.activeClip) === null || _a === void 0 ? void 0 : _a.path) === path) {
|
|
251
|
+
this.notifyClipStateListeners(this.activeClip.playId, path, 'playing');
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
videoElement.addEventListener('ended', () => {
|
|
255
|
+
if (!videoElement.loop) {
|
|
256
|
+
this.handleStoppedClip(path);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
videoElement.style.position = 'absolute';
|
|
260
|
+
videoElement.style.top = '0';
|
|
261
|
+
videoElement.style.left = '0';
|
|
262
|
+
videoElement.style.width = '100%';
|
|
263
|
+
videoElement.style.height = '100%';
|
|
264
|
+
videoElement.style.objectFit = config.fit;
|
|
265
|
+
videoElement.style.display = 'none';
|
|
266
|
+
this.parentElement.appendChild(videoElement);
|
|
267
|
+
return videoElement;
|
|
268
|
+
}
|
|
269
|
+
createClipPlayer(path, config) {
|
|
270
|
+
const volume = 1;
|
|
271
|
+
return {
|
|
272
|
+
config,
|
|
273
|
+
videoElement: this.createVideoElement(path, config, { volume }),
|
|
274
|
+
volume,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
unloadClip(path) {
|
|
278
|
+
var _a, _b;
|
|
279
|
+
if (((_a = this.activeClip) === null || _a === void 0 ? void 0 : _a.path) === path) {
|
|
280
|
+
this.activeClip = undefined;
|
|
281
|
+
}
|
|
282
|
+
(_b = this.videoClipPlayers[path]) === null || _b === void 0 ? void 0 : _b.videoElement.remove();
|
|
283
|
+
this.updateVideoClipPlayer(path, () => null);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
exports.default = VideoPlayer;
|
|
287
|
+
//# sourceMappingURL=VideoPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoPlayer.js","sourceRoot":"","sources":["../src/VideoPlayer.ts"],"names":[],"mappings":"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"}
|