@brandbrigade/ott-bb-player 1.0.43 → 1.0.45
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/LICENCE +29 -0
- package/README.md +266 -218
- package/dist/OTTPlayer.js +272 -0
- package/package.json +22 -7
- package/src/Ads.js +82 -0
- package/src/Augmentor.js +1288 -0
- package/src/Composer3DBase.js +754 -0
- package/src/Composer3DForMainThread.js +131 -0
- package/src/Composer3DForWorker.js +80 -0
- package/src/Composer3DWorker.js +60 -0
- package/src/MetaDataDecoder.js +143 -0
- package/src/MetaDataFetcher.js +88 -0
- package/src/OTTPlayer.js +254 -0
- package/src/Socket.js +44 -0
- package/src/composer_worker.js +30 -0
- package/src/configs/OTT_Dev_Config_Debug.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_14fps.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_29fps.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_General.json +7 -0
- package/src/enums/RenderingMode.js +5 -0
- package/src/enums/SyncMethod.js +5 -0
- package/src/index.js +241 -0
- package/src/meta_worker.js +144 -0
- package/src/shaders/v1.js +87 -0
- package/src/shaders/v1Old.js +174 -0
- package/src/shaders/v2.js +193 -0
- package/src/test-pages/mp4/index.html +63 -0
- package/src/test-pages/mp4/index.js +23 -0
- package/src/test-pages/mp4/style.css +16 -0
- package/src/utils/FPSFetter.js +94 -0
- package/src/utils/MedianCalculator.js +27 -0
- package/src/utils/index.js +5 -0
- package/src/utils/isPowerOf2.js +3 -0
- package/src/utils/platform.js +191 -0
- package/src/utils/timeCodeUtils.js +274 -0
- package/js/OTTPlayer.js +0 -1
- package/mediakind.html +0 -273
package/mediakind.html
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<script type="text/javascript">
|
|
3
|
-
var globalConfig = {
|
|
4
|
-
url:"https://nbablpng.akamaized.net/live/hls-itc/bbtest45/v1-121.m3u8?stSecret=rj12sw543terw32422334swees", //Prod (from Eb) stream, V1 only
|
|
5
|
-
channel:"nba",
|
|
6
|
-
MKsync: "yes"
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
</script>
|
|
10
|
-
<html lang="en">
|
|
11
|
-
<head>
|
|
12
|
-
<meta charset="UTF-8">
|
|
13
|
-
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
|
14
|
-
<meta http-equiv="Pragma" content="no-cache" />
|
|
15
|
-
<meta http-equiv="Expires" content="0" />
|
|
16
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
-
<title>MK Player & BB OTT</title>
|
|
18
|
-
|
|
19
|
-
<!--<script src="js/lib/wmc.prod.js"></script>-->
|
|
20
|
-
<script src="https://www.virtualott.com/MK_player_lib/wmc.prod.js"></script>
|
|
21
|
-
<!--<script src="https://wmc.mr.tv3cloud.com/nba/dist/wmc.prod.js"></script>-->
|
|
22
|
-
<script src="js/OTTPlayer.js"></script>
|
|
23
|
-
<!--<script src="js/ottplayer.prod.js"></script>-->
|
|
24
|
-
|
|
25
|
-
<style>
|
|
26
|
-
body {
|
|
27
|
-
margin: 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
#player_container {
|
|
31
|
-
position: relative;
|
|
32
|
-
height: 80%;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#player_container > * {
|
|
36
|
-
top:0;
|
|
37
|
-
left:0;
|
|
38
|
-
position: absolute;
|
|
39
|
-
text-align: center;
|
|
40
|
-
width: 100%;
|
|
41
|
-
}
|
|
42
|
-
</style>
|
|
43
|
-
<br/>
|
|
44
|
-
<input type="number" id="numberInput" value="2">
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
<input type="checkbox" id="plus05CorrectionCheckbox" name="plus05CorrectionCheckbox">
|
|
48
|
-
<label for="plus05CorrectionCheckbox" id="plus05CorrectionLabel">plus05Correction (for 29.97 only):</label>
|
|
49
|
-
|
|
50
|
-
<input type="checkbox" id="doNotRenderAugmentationCheckbox" name="doNotRenderAugmentationCheckbox">
|
|
51
|
-
<label for="doNotRenderAugmentationCheckbox" id = "doNotRenderAugmentationLabel">doNotRenderAugmentation:</label>
|
|
52
|
-
|
|
53
|
-
<br/>
|
|
54
|
-
<button id="toggleBtn" onclick="toggleBBPlayer()">Toggle ott player OFF</button>
|
|
55
|
-
<br/>
|
|
56
|
-
<div id="forceUpdate" style="font-size: 3px;"></div>
|
|
57
|
-
<button id="qualityButton">Get Available Qualities</button>
|
|
58
|
-
<select id="qualitySelect">
|
|
59
|
-
<option value="">Select Quality</option>
|
|
60
|
-
</select>
|
|
61
|
-
<div id="debugText"></div>
|
|
62
|
-
<div id="debugText2"></div>
|
|
63
|
-
<!--<div id="debugText3"></div> -->
|
|
64
|
-
<div id="player_container">
|
|
65
|
-
<video id="video_element" poster="" crossOrigin controls></video>
|
|
66
|
-
</div>
|
|
67
|
-
<canvas id="canvas" style="display: none;"></canvas>
|
|
68
|
-
<script type="text/javascript">
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
function doAllStuff()
|
|
73
|
-
{
|
|
74
|
-
const video = document.getElementById("video_element");
|
|
75
|
-
const wmcEvents = amc.AmcEvents;
|
|
76
|
-
const wmcConstants = amc.AmcConstants;
|
|
77
|
-
|
|
78
|
-
//const canvas = document.getElementById('canvas');
|
|
79
|
-
//const ctx = canvas.getContext('2d');
|
|
80
|
-
|
|
81
|
-
// MK STUF
|
|
82
|
-
let config = {
|
|
83
|
-
server_url: "https://ottapp-appgw-amp-a.prodb.nba.tv3cloud.com",
|
|
84
|
-
owner_Uid: "azuki",
|
|
85
|
-
playback_mode: wmcConstants.IMC_MODE_LIVE,
|
|
86
|
-
start:"LIVE",
|
|
87
|
-
media_id: "bbtestexternal",//"bbtest45"
|
|
88
|
-
app_id: "100419",//"99569"
|
|
89
|
-
authorization_token: "AuthToken1jVDLbtswEPwa6yaBb5EHHQQ3TtLCbYrWRXvkY2ULlkSFpJI4X186jxYo2iIAsRzMzswC0y6uh8lCc0hpjivarsgmvwDDqZ_2sw7pVM3BO1NNRlfpjtrBL66yfsyq4jrGBcIf3pjifyxn7W-pPcCoY_UwDtHrufJhn9n7mAdBiOfvafQOptSnU4Z20P143k96hGaJJbEYgOGuVIzqkhmjSmkoKxmzrmOIEFC4-AqTntK1axx0ehlS0Q6Dvwf3ysdfi12EkHVvDW6t9ctTsjWaZ64rNWaQRdKWCrquRMZ1WBqCwLni3fOVlyNvsvy1r7G3wUffpZdWXxuT58bEPxoLfoAmLiba0BsIRbukgw_9o069n7Y6HhvMFWaUUS44xhTXhDOpakIoVgwJJYkQUlKCGVdCEs4xx0QoLpGSgiOCCVWEMoRpxrwmjEiORQayuHiY-wDx09Tk1JoKlO3FOoBO4J5JUXOBMvkBTpdL7xphGEiU6wfG6pIBpaVxFkoNOVIbgykxxdW2XX-5agkXzeXxbv7B9uPuuL-5uWjXcs-3O_RtRbr3k9l8vv3IH4neHG6-m1vkV9T9BA"
|
|
90
|
-
}
|
|
91
|
-
//let bbPlayer = null;
|
|
92
|
-
let fps = 0;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
function processEventPlay(eventObj) {
|
|
96
|
-
switch (eventObj.eventType) {
|
|
97
|
-
case wmcEvents.AMC_EVENT_STATE_CHANGED:
|
|
98
|
-
console.log("!!!!!!!!!!!!!!!!!!!!!!!! 123");
|
|
99
|
-
// start the VOD/LIVE playback
|
|
100
|
-
//wmcMgr.createPlayer(config.playback_mode, config.media_id, config.app_id);
|
|
101
|
-
//if (eventObj.value1==2)
|
|
102
|
-
// playing=true;
|
|
103
|
-
console.log("!!!!!!!!!!!!!!!!!!!!!!!! AMC_EVENT_STATE_CHANGED");
|
|
104
|
-
break;
|
|
105
|
-
default:
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function processEvent(eventObj) {
|
|
111
|
-
switch (eventObj.eventType) {
|
|
112
|
-
case wmcEvents.AMC_EVENT_METRICS_UPDATE:
|
|
113
|
-
console.log("AMC_EVENT_METRICS_UPDATE");
|
|
114
|
-
break;
|
|
115
|
-
case wmcEvents.AMC_EVENT_PLAYER_SEGMENT_PLAYBACK:
|
|
116
|
-
let syncPoint = {frame:0,playerTime:0}
|
|
117
|
-
//bbPlayer.SetSyncPoint(syncPoint);
|
|
118
|
-
|
|
119
|
-
// if (typeof eventObj.mediaInfo.frameRate != "undefined"){
|
|
120
|
-
// console.log("FPS=", eventObj.mediaInfo.frameRate );
|
|
121
|
-
// if(bbPlayer)
|
|
122
|
-
// {
|
|
123
|
-
// bbPlayer.SetFps(eventObj.mediaInfo.frameRate);
|
|
124
|
-
// }
|
|
125
|
-
// }
|
|
126
|
-
break;
|
|
127
|
-
|
|
128
|
-
case wmcEvents.AMC_EVENT_PLAY_READY:
|
|
129
|
-
var logTextBox = document.getElementById('editable-element');
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
wmcMgr.setContainer(video);
|
|
133
|
-
wmcMgr.start();
|
|
134
|
-
break;
|
|
135
|
-
case wmcEvents.AMC_EVENT_PLAYER_METADATA:
|
|
136
|
-
|
|
137
|
-
break;
|
|
138
|
-
case wmcEvents.AMC_EVENT_PLAYER_METADATA_PARSED:
|
|
139
|
-
//console.info("AMC_EVENT_PLAYER_METADATA_PARSED",eventObj);
|
|
140
|
-
break;
|
|
141
|
-
case wmcEvents.AMC_EVENT_DEVICE_REGISTERED:
|
|
142
|
-
break;
|
|
143
|
-
case wmcEvents.AMC_EVENT_INIT_COMPLETE:
|
|
144
|
-
// start the VOD/LIVE playback
|
|
145
|
-
wmcMgr.createPlayer(config.playback_mode, config.media_id, config.app_id);
|
|
146
|
-
|
|
147
|
-
break;
|
|
148
|
-
|
|
149
|
-
case wmcEvents.AMC_EVENT_ERROR:
|
|
150
|
-
console.error(eventObj.code + ":" + ((eventObj.message) ? eventObj.message : eventObj.message.error));
|
|
151
|
-
break;
|
|
152
|
-
default:
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const wmcMgr = new amc.AmcManager(config.server_url, config.owner_Uid);
|
|
157
|
-
//<!-- enable brandBrigade -->
|
|
158
|
-
// when this flag is enabled sdk will initialise the brandBrigade player with the required information and will make the necessary calls on the appropriate player callbacks
|
|
159
|
-
wmcMgr.enableBrandBrigade(true);
|
|
160
|
-
|
|
161
|
-
wmcMgr.setSTSToken(config.authorization_token);
|
|
162
|
-
wmcMgr.setCDNToken({"start":"LIVE"})
|
|
163
|
-
wmcMgr.setKssUrl("https://ottapp-appgw-client.prodb.nba.tv3cloud.com/S1/kss/signkey");
|
|
164
|
-
wmcMgr.setLogLevel(wmcConstants.IMC_LOG_DEBUG);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
function onPlaybackControlBlock(eventObj) {
|
|
168
|
-
playBackControlRestrictions = (eventObj && eventObj.hasOwnProperty("controlRestrictions")) ? eventObj.controlRestrictions : [];
|
|
169
|
-
if (!playBackControlRestrictions.length) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
//blockControls();
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
wmcMgr.setNativeHlsParsing(true);
|
|
176
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PROGRAM_RESTRICTIONS, onPlaybackControlBlock);
|
|
177
|
-
|
|
178
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PROGRAM_CHANGED, processEvent);
|
|
179
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_BIT_RATE_CHANGED, processEvent);
|
|
180
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_STARTED, processEvent);
|
|
181
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_QUARTILE, processEvent);
|
|
182
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_FINISHED, processEvent);
|
|
183
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_BREAK_START, processEvent);
|
|
184
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_BREAK_END, processEvent);
|
|
185
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_TEXT_TRACKS_CHANGED, processEvent);
|
|
186
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_TEXT_TRACKS_ADDED, processEvent);
|
|
187
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AUDIO_TRACKS_CHANGED, processEvent);
|
|
188
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PERIOD_SWITCH, processEvent);
|
|
189
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PERIOD_SWITCHED, processEvent);
|
|
190
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_AD_MARKER_DATA, processEvent);
|
|
191
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PLAYOUT_METRIC_UPDATE, processEvent);
|
|
192
|
-
wmcMgr.addEventListener(wmcEvents.BEACON_FAIL_OPEN_STATUS, processEvent);
|
|
193
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PROGRAM_QUERY_STATUS, processEvent);
|
|
194
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_VIDEO_QUALITY_CHANGED, processEvent);
|
|
195
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PROFILING, processEvent);
|
|
196
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PLAYER_SEGMENT_PLAYBACK, processEvent);
|
|
197
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_ERROR, processEvent);
|
|
198
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_STATE_CHANGED, processEventPlay);
|
|
199
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_VIDEO_POSITION_CHANGED, processEvent);
|
|
200
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_SEEK_COMPLETE, processEvent);
|
|
201
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_DEVICE_REGISTERED, processEvent);
|
|
202
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_INIT_COMPLETE, processEvent);
|
|
203
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PLAY_READY, processEvent);
|
|
204
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PRELOAD_COMPLETE, processEvent);
|
|
205
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PLAYER_METADATA, processEvent);
|
|
206
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_PLAYER_METADATA_PARSED, processEvent);
|
|
207
|
-
wmcMgr.addEventListener(wmcEvents.AMC_EVENT_METRICS_UPDATE, processEvent);
|
|
208
|
-
wmcMgr.setPlayerKey("60a31c68-c920-42be-a74a-506d51df7233");
|
|
209
|
-
//wmcMgr.setExternalSourceParams({ sourceUrl: "https://nbablpng.akamaized.net/live/hls-itc/bbtest45/v1-121.m3u8?stSecret=rj12sw543terw32422334swees", licenseUrl: "" });
|
|
210
|
-
wmcMgr.setExternalSourceParams({ sourceUrl: globalConfig.url, licenseUrl: "" });
|
|
211
|
-
wmcMgr.init();
|
|
212
|
-
const toggleBtn = document.getElementById("toggleBtn");
|
|
213
|
-
function toggleBBPlayer()
|
|
214
|
-
{
|
|
215
|
-
// if(bbPlayer)
|
|
216
|
-
// {
|
|
217
|
-
// bbPlayer.Toggle(!bbPlayer.options.enabled);
|
|
218
|
-
// toggleBtn.innerText = "Toggle ott player " + (bbPlayer.options.enabled ? "OFF" : "ON");
|
|
219
|
-
// }
|
|
220
|
-
}
|
|
221
|
-
// Add event listener to the quality button
|
|
222
|
-
document.getElementById('qualityButton').addEventListener('click', () => {
|
|
223
|
-
const qualities = wmcMgr.getAvailableVideoQualities();
|
|
224
|
-
const qualitySelect = document.getElementById('qualitySelect');
|
|
225
|
-
qualitySelect.innerHTML = '<option value="">Select Quality</option>'; // Clear previous options
|
|
226
|
-
qualities.forEach(quality => {
|
|
227
|
-
const option = document.createElement('option');
|
|
228
|
-
option.value = quality.id;
|
|
229
|
-
option.text = quality.label;
|
|
230
|
-
qualitySelect.appendChild(option);
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
// Add event listener to the quality select dropdown
|
|
235
|
-
document.getElementById('qualitySelect').addEventListener('change', function() {
|
|
236
|
-
const selectedQuality = this.value;
|
|
237
|
-
if (selectedQuality) {
|
|
238
|
-
wmcMgr.setVideoQuality(selectedQuality);
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
const URLParams = new URL(document.location);
|
|
244
|
-
const CONFIG_NAME = URLParams.searchParams.get("config") || "";
|
|
245
|
-
|
|
246
|
-
async function fetchConfig() {
|
|
247
|
-
if (CONFIG_NAME !== "") {
|
|
248
|
-
try {
|
|
249
|
-
const response = await fetch(CONFIG_NAME);
|
|
250
|
-
if (!response.ok) {
|
|
251
|
-
throw new Error('Network response was not ok');
|
|
252
|
-
}
|
|
253
|
-
const configJson = await response.json();
|
|
254
|
-
console.log("Got the following config: ", configJson);
|
|
255
|
-
if (typeof globalConfig === 'undefined')
|
|
256
|
-
globalConfig = {};
|
|
257
|
-
globalConfig = Object.assign({}, globalConfig, configJson);
|
|
258
|
-
doAllStuff();
|
|
259
|
-
|
|
260
|
-
} catch (error) {
|
|
261
|
-
console.error('Error fetching JSON:', error);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
else
|
|
265
|
-
{
|
|
266
|
-
doAllStuff();
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
fetchConfig(); // Call the async function to initiate the fetch operation
|
|
270
|
-
</script>
|
|
271
|
-
</body>
|
|
272
|
-
|
|
273
|
-
</html>
|