-
Notifications
You must be signed in to change notification settings - Fork 7
/
broadcast.js
74 lines (66 loc) · 1.89 KB
/
broadcast.js
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
"use strict";
(function () {
/**
* Get our OpenTok API Key, Session ID, and Token from the JSON embedded
* in the HTML.
*/
var getBroadcastData = function getBroadcastData() {
var el = document.getElementById('broadcast');
var credentials = JSON.parse(el.getAttribute('data'));
el.remove();
return credentials;
};
/**
* Update the banner based on the status of the broadcast (active or ended)
*/
var updateBanner = function updateBanner(status) {
var banner = document.getElementById('banner');
var bannerText = document.getElementById('bannerText');
if (status === 'active') {
banner.classList.add('hidden');
} else if (status === 'ended') {
bannerText.classList.add('red');
bannerText.innerHTML = 'The Broadcast is Over';
banner.classList.remove('hidden');
}
};
var play = function play(source) {
updateBanner('active');
flowplayer('#videoContainer', {
splash: false,
embed: false,
ratio: 9 / 16,
autoplay: true,
clip: {
autoplay: true,
live: true,
hlsjs: {
// listen to hls.js ERROR
listeners: ['hlsError']
},
sources: [{
type: 'application/x-mpegurl',
src: source
}]
}
}).on('hlsError', function (e, api, error) {
// Broadcast end
if (error.type === 'networkError' && error.details === 'levelLoadError') {
api.stop();
updateBanner('ended');
document.getElementById('videoContainer').classList.add('hidden');
}
});
};
var init = function init() {
var broadcast = getBroadcastData();
if (broadcast.availableAt <= Date.now()) {
play(broadcast.url);
} else {
setTimeout(function () {
play(broadcast.url);
}, broadcast.availableAt - Date.now());
}
};
document.addEventListener('DOMContentLoaded', init);
})();