@mediakind/mkplayer 1.0.15 → 1.0.17
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 +8 -2
- package/dist/LabelConfig.d.ts +4 -0
- package/dist/MKPlayer.d.ts +1 -2
- package/dist/MKPlayerConfiguration.d.ts +2 -2
- package/dist/MKStream.d.ts +7 -1
- package/dist/URLHelper.d.ts +1 -0
- package/dist/events/UrlType.d.ts +4 -0
- package/dist/lib/LabelConfig.d.ts +4 -0
- package/dist/lib/LabelConfig.js +3 -0
- package/dist/lib/LabelConfig.js.map +1 -0
- package/dist/lib/MKPlayer.d.ts +1 -2
- package/dist/lib/MKPlayer.js +39 -35
- package/dist/lib/MKPlayer.js.map +1 -1
- package/dist/lib/MKPlayerConfiguration.d.ts +2 -2
- package/dist/lib/MKStream.d.ts +7 -1
- package/dist/lib/MKStream.js +20 -1
- package/dist/lib/MKStream.js.map +1 -1
- package/dist/lib/URLHelper.d.ts +1 -0
- package/dist/lib/URLHelper.js +19 -0
- package/dist/lib/URLHelper.js.map +1 -1
- package/dist/lib/events/UrlType.d.ts +4 -0
- package/dist/lib/events/UrlType.js +9 -0
- package/dist/lib/events/UrlType.js.map +1 -0
- package/dist/lib-esm/LabelConfig.d.ts +4 -0
- package/dist/lib-esm/LabelConfig.js +2 -0
- package/dist/lib-esm/LabelConfig.js.map +1 -0
- package/dist/lib-esm/MKPlayer.d.ts +1 -2
- package/dist/lib-esm/MKPlayer.js +39 -35
- package/dist/lib-esm/MKPlayer.js.map +1 -1
- package/dist/lib-esm/MKPlayerConfiguration.d.ts +2 -2
- package/dist/lib-esm/MKStream.d.ts +7 -1
- package/dist/lib-esm/MKStream.js +20 -1
- package/dist/lib-esm/MKStream.js.map +1 -1
- package/dist/lib-esm/URLHelper.d.ts +1 -0
- package/dist/lib-esm/URLHelper.js +19 -0
- package/dist/lib-esm/URLHelper.js.map +1 -1
- package/dist/lib-esm/events/UrlType.d.ts +4 -0
- package/dist/lib-esm/events/UrlType.js +6 -0
- package/dist/lib-esm/events/UrlType.js.map +1 -0
- package/dist/mkplayer.js +1 -1
- package/doc/assets/js/search.json +1 -1
- package/doc/classes/mkplayer.html +22 -16
- package/doc/enums/mkevent.html +6 -0
- package/doc/enums/urltype.html +180 -0
- package/doc/globals.html +8 -0
- package/doc/index.html +14 -2
- package/doc/interfaces/bufferlevel.html +6 -0
- package/doc/interfaces/labelconfig.html +198 -0
- package/doc/interfaces/mkplayereventcallback.html +6 -0
- package/doc/interfaces/subtitletrack.html +6 -0
- package/index.html +11 -11
- package/multi-camera.html +1 -1
- package/package.json +1 -1
- package/src/LabelConfig.ts +14 -0
- package/src/MKPlayer.ts +37 -36
- package/src/MKPlayerConfiguration.ts +2 -2
- package/src/MKStream.ts +27 -1
- package/src/URLHelper.ts +17 -1
- package/src/events/UrlType.ts +7 -0
- package/dist/events/RequestType.d.ts +0 -4
- package/dist/lib/events/RequestType.d.ts +0 -4
- package/dist/lib/events/RequestType.js +0 -9
- package/dist/lib/events/RequestType.js.map +0 -1
- package/dist/lib-esm/events/RequestType.d.ts +0 -4
- package/dist/lib-esm/events/RequestType.js +0 -6
- package/dist/lib-esm/events/RequestType.js.map +0 -1
- package/src/events/RequestType.ts +0 -5
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html class="default no-js">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<title>LabelConfig | MKPlayer</title>
|
|
7
|
+
<meta name="description" content="Documentation for MKPlayer">
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
9
|
+
<link rel="stylesheet" href="../assets/css/main.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<header>
|
|
13
|
+
<div class="tsd-page-toolbar">
|
|
14
|
+
<div class="container">
|
|
15
|
+
<div class="table-wrap">
|
|
16
|
+
<div class="table-cell" id="tsd-search" data-index="../assets/js/search.json" data-base="..">
|
|
17
|
+
<div class="field">
|
|
18
|
+
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
|
|
19
|
+
<input id="tsd-search-field" type="text" />
|
|
20
|
+
</div>
|
|
21
|
+
<ul class="results">
|
|
22
|
+
<li class="state loading">Preparing search index...</li>
|
|
23
|
+
<li class="state failure">The search index is not available</li>
|
|
24
|
+
</ul>
|
|
25
|
+
<a href="../index.html" class="title">MKPlayer</a>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="table-cell" id="tsd-widgets">
|
|
28
|
+
<div id="tsd-filter">
|
|
29
|
+
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
|
30
|
+
<div class="tsd-filter-group">
|
|
31
|
+
<div class="tsd-select" id="tsd-filter-visibility">
|
|
32
|
+
<span class="tsd-select-label">All</span>
|
|
33
|
+
<ul class="tsd-select-list">
|
|
34
|
+
<li data-value="public">Public</li>
|
|
35
|
+
<li data-value="protected">Public/Protected</li>
|
|
36
|
+
<li data-value="private" class="selected">All</li>
|
|
37
|
+
</ul>
|
|
38
|
+
</div>
|
|
39
|
+
<input type="checkbox" id="tsd-filter-inherited" checked />
|
|
40
|
+
<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
|
|
41
|
+
<input type="checkbox" id="tsd-filter-externals" checked />
|
|
42
|
+
<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="tsd-page-title">
|
|
51
|
+
<div class="container">
|
|
52
|
+
<ul class="tsd-breadcrumb">
|
|
53
|
+
<li>
|
|
54
|
+
<a href="../globals.html">Globals</a>
|
|
55
|
+
</li>
|
|
56
|
+
<li>
|
|
57
|
+
<a href="labelconfig.html">LabelConfig</a>
|
|
58
|
+
</li>
|
|
59
|
+
</ul>
|
|
60
|
+
<h1>Interface LabelConfig</h1>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</header>
|
|
64
|
+
<div class="container container-main">
|
|
65
|
+
<div class="row">
|
|
66
|
+
<div class="col-8 col-content">
|
|
67
|
+
<section class="tsd-panel tsd-comment">
|
|
68
|
+
<div class="tsd-comment tsd-typography">
|
|
69
|
+
<div class="lead">
|
|
70
|
+
<p>Config to change the labels in the player dropdown</p>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</section>
|
|
74
|
+
<section class="tsd-panel tsd-hierarchy">
|
|
75
|
+
<h3>Hierarchy</h3>
|
|
76
|
+
<ul class="tsd-hierarchy">
|
|
77
|
+
<li>
|
|
78
|
+
<span class="target">LabelConfig</span>
|
|
79
|
+
</li>
|
|
80
|
+
</ul>
|
|
81
|
+
</section>
|
|
82
|
+
<section class="tsd-panel-group tsd-index-group">
|
|
83
|
+
<h2>Index</h2>
|
|
84
|
+
<section class="tsd-panel tsd-index-panel">
|
|
85
|
+
<div class="tsd-index-content">
|
|
86
|
+
<section class="tsd-index-section ">
|
|
87
|
+
<h3>Properties</h3>
|
|
88
|
+
<ul class="tsd-index-list">
|
|
89
|
+
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="labelconfig.html#audio" class="tsd-kind-icon">audio</a></li>
|
|
90
|
+
<li class="tsd-kind-property tsd-parent-kind-interface"><a href="labelconfig.html#captions" class="tsd-kind-icon">captions</a></li>
|
|
91
|
+
</ul>
|
|
92
|
+
</section>
|
|
93
|
+
</div>
|
|
94
|
+
</section>
|
|
95
|
+
</section>
|
|
96
|
+
<section class="tsd-panel-group tsd-member-group ">
|
|
97
|
+
<h2>Properties</h2>
|
|
98
|
+
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
|
99
|
+
<a name="audio" class="tsd-anchor"></a>
|
|
100
|
+
<h3><span class="tsd-flag ts-flagOptional">Optional</span> audio</h3>
|
|
101
|
+
<div class="tsd-signature tsd-kind-icon">audio<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Map</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">></span></div>
|
|
102
|
+
<aside class="tsd-sources">
|
|
103
|
+
<ul>
|
|
104
|
+
<li>Defined in LabelConfig.ts:8</li>
|
|
105
|
+
</ul>
|
|
106
|
+
</aside>
|
|
107
|
+
<div class="tsd-comment tsd-typography">
|
|
108
|
+
<div class="lead">
|
|
109
|
+
<p>list of labels to use in the audio dropdown</p>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</section>
|
|
113
|
+
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
|
114
|
+
<a name="captions" class="tsd-anchor"></a>
|
|
115
|
+
<h3><span class="tsd-flag ts-flagOptional">Optional</span> captions</h3>
|
|
116
|
+
<div class="tsd-signature tsd-kind-icon">captions<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Map</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">></span></div>
|
|
117
|
+
<aside class="tsd-sources">
|
|
118
|
+
<ul>
|
|
119
|
+
<li>Defined in LabelConfig.ts:13</li>
|
|
120
|
+
</ul>
|
|
121
|
+
</aside>
|
|
122
|
+
<div class="tsd-comment tsd-typography">
|
|
123
|
+
<div class="lead">
|
|
124
|
+
<p>list of labels to use in the captions dropdown</p>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</section>
|
|
128
|
+
</section>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
|
131
|
+
<nav class="tsd-navigation primary">
|
|
132
|
+
<ul>
|
|
133
|
+
<li class="globals ">
|
|
134
|
+
<a href="../globals.html"><em>Globals</em></a>
|
|
135
|
+
</li>
|
|
136
|
+
</ul>
|
|
137
|
+
</nav>
|
|
138
|
+
<nav class="tsd-navigation secondary menu-sticky">
|
|
139
|
+
<ul class="before-current">
|
|
140
|
+
<li class=" tsd-kind-enum">
|
|
141
|
+
<a href="../enums/mkevent.html" class="tsd-kind-icon">MKEvent</a>
|
|
142
|
+
</li>
|
|
143
|
+
<li class=" tsd-kind-enum">
|
|
144
|
+
<a href="../enums/urltype.html" class="tsd-kind-icon">Url<wbr>Type</a>
|
|
145
|
+
</li>
|
|
146
|
+
<li class=" tsd-kind-class">
|
|
147
|
+
<a href="../classes/mkplayer.html" class="tsd-kind-icon">MKPlayer</a>
|
|
148
|
+
</li>
|
|
149
|
+
<li class=" tsd-kind-interface">
|
|
150
|
+
<a href="bufferlevel.html" class="tsd-kind-icon">Buffer<wbr>Level</a>
|
|
151
|
+
</li>
|
|
152
|
+
</ul>
|
|
153
|
+
<ul class="current">
|
|
154
|
+
<li class="current tsd-kind-interface">
|
|
155
|
+
<a href="labelconfig.html" class="tsd-kind-icon">Label<wbr>Config</a>
|
|
156
|
+
<ul>
|
|
157
|
+
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
|
158
|
+
<a href="labelconfig.html#audio" class="tsd-kind-icon">audio</a>
|
|
159
|
+
</li>
|
|
160
|
+
<li class=" tsd-kind-property tsd-parent-kind-interface">
|
|
161
|
+
<a href="labelconfig.html#captions" class="tsd-kind-icon">captions</a>
|
|
162
|
+
</li>
|
|
163
|
+
</ul>
|
|
164
|
+
</li>
|
|
165
|
+
</ul>
|
|
166
|
+
<ul class="after-current">
|
|
167
|
+
<li class=" tsd-kind-interface">
|
|
168
|
+
<a href="mkplayereventcallback.html" class="tsd-kind-icon">MKPlayer<wbr>Event<wbr>Callback</a>
|
|
169
|
+
</li>
|
|
170
|
+
<li class=" tsd-kind-interface">
|
|
171
|
+
<a href="subtitletrack.html" class="tsd-kind-icon">Subtitle<wbr>Track</a>
|
|
172
|
+
</li>
|
|
173
|
+
</ul>
|
|
174
|
+
</nav>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
<footer class="with-border-bottom">
|
|
179
|
+
<div class="container">
|
|
180
|
+
<h2>Legend</h2>
|
|
181
|
+
<div class="tsd-legend-group">
|
|
182
|
+
<ul class="tsd-legend">
|
|
183
|
+
<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
|
|
184
|
+
<li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li>
|
|
185
|
+
</ul>
|
|
186
|
+
<ul class="tsd-legend">
|
|
187
|
+
<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
|
|
188
|
+
</ul>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</footer>
|
|
192
|
+
<div class="container tsd-generator">
|
|
193
|
+
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
|
194
|
+
</div>
|
|
195
|
+
<div class="overlay"></div>
|
|
196
|
+
<script src="../assets/js/main.js"></script>
|
|
197
|
+
</body>
|
|
198
|
+
</html>
|
|
@@ -120,12 +120,18 @@
|
|
|
120
120
|
<li class=" tsd-kind-enum">
|
|
121
121
|
<a href="../enums/mkevent.html" class="tsd-kind-icon">MKEvent</a>
|
|
122
122
|
</li>
|
|
123
|
+
<li class=" tsd-kind-enum">
|
|
124
|
+
<a href="../enums/urltype.html" class="tsd-kind-icon">Url<wbr>Type</a>
|
|
125
|
+
</li>
|
|
123
126
|
<li class=" tsd-kind-class">
|
|
124
127
|
<a href="../classes/mkplayer.html" class="tsd-kind-icon">MKPlayer</a>
|
|
125
128
|
</li>
|
|
126
129
|
<li class=" tsd-kind-interface">
|
|
127
130
|
<a href="bufferlevel.html" class="tsd-kind-icon">Buffer<wbr>Level</a>
|
|
128
131
|
</li>
|
|
132
|
+
<li class=" tsd-kind-interface">
|
|
133
|
+
<a href="labelconfig.html" class="tsd-kind-icon">Label<wbr>Config</a>
|
|
134
|
+
</li>
|
|
129
135
|
</ul>
|
|
130
136
|
<ul class="current">
|
|
131
137
|
<li class="current tsd-kind-interface">
|
|
@@ -140,12 +140,18 @@
|
|
|
140
140
|
<li class=" tsd-kind-enum">
|
|
141
141
|
<a href="../enums/mkevent.html" class="tsd-kind-icon">MKEvent</a>
|
|
142
142
|
</li>
|
|
143
|
+
<li class=" tsd-kind-enum">
|
|
144
|
+
<a href="../enums/urltype.html" class="tsd-kind-icon">Url<wbr>Type</a>
|
|
145
|
+
</li>
|
|
143
146
|
<li class=" tsd-kind-class">
|
|
144
147
|
<a href="../classes/mkplayer.html" class="tsd-kind-icon">MKPlayer</a>
|
|
145
148
|
</li>
|
|
146
149
|
<li class=" tsd-kind-interface">
|
|
147
150
|
<a href="bufferlevel.html" class="tsd-kind-icon">Buffer<wbr>Level</a>
|
|
148
151
|
</li>
|
|
152
|
+
<li class=" tsd-kind-interface">
|
|
153
|
+
<a href="labelconfig.html" class="tsd-kind-icon">Label<wbr>Config</a>
|
|
154
|
+
</li>
|
|
149
155
|
<li class=" tsd-kind-interface">
|
|
150
156
|
<a href="mkplayereventcallback.html" class="tsd-kind-icon">MKPlayer<wbr>Event<wbr>Callback</a>
|
|
151
157
|
</li>
|
package/index.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang='en'>
|
|
3
3
|
<head>
|
|
4
|
-
<title>MKPlayer 1.0.
|
|
4
|
+
<title>MKPlayer 1.0.17</title>
|
|
5
5
|
<meta charset='UTF-8'/>
|
|
6
6
|
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
|
7
7
|
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
|
@@ -286,7 +286,7 @@
|
|
|
286
286
|
deselectCustomLoadButton();
|
|
287
287
|
|
|
288
288
|
mkPlayer.unload();
|
|
289
|
-
load(
|
|
289
|
+
load(liveSubtitle);
|
|
290
290
|
});
|
|
291
291
|
|
|
292
292
|
customStreamButton.on('click', function() {
|
|
@@ -318,13 +318,13 @@
|
|
|
318
318
|
});
|
|
319
319
|
|
|
320
320
|
let liveSource = {
|
|
321
|
-
primaryUrl: "https://
|
|
321
|
+
primaryUrl: "https://cdn-0573.aas.mediakind.com/cmaftkn/CES-Hero/index.m3u8",
|
|
322
322
|
cdnFailoverPercent: 10,
|
|
323
|
-
assetIdentifier: '
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
}
|
|
323
|
+
assetIdentifier: 'HLS Live',
|
|
324
|
+
labelConfig: {
|
|
325
|
+
audio: {'en': 'English', 'mis': 'Audio Descriptions'},
|
|
326
|
+
captions: {'ENG': 'English', 'GER': 'German'},
|
|
327
|
+
}
|
|
328
328
|
};
|
|
329
329
|
|
|
330
330
|
let liveSubtitle = {
|
|
@@ -442,9 +442,9 @@
|
|
|
442
442
|
key: '84dc4716-55f9-43fa-ae8e-6fa334c5189b',
|
|
443
443
|
|
|
444
444
|
refreshToken: (type) => {
|
|
445
|
-
if (type === '
|
|
445
|
+
if (type === 'primary') {
|
|
446
446
|
return 'hdnts=1234566787888'
|
|
447
|
-
}else if (type === '
|
|
447
|
+
}else if (type === 'secondary') {
|
|
448
448
|
return 'hdnts=jadfjahdfjahdsfjh'
|
|
449
449
|
}
|
|
450
450
|
},
|
|
@@ -526,7 +526,7 @@
|
|
|
526
526
|
console.info('[MKPlayer] metadata parsed' + JSON.stringify(event));
|
|
527
527
|
});
|
|
528
528
|
|
|
529
|
-
load(
|
|
529
|
+
load(liveSource)
|
|
530
530
|
|
|
531
531
|
</script>
|
|
532
532
|
</body>
|
package/multi-camera.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang='en'>
|
|
3
3
|
<head>
|
|
4
|
-
<title>MKPlayer 1.0.
|
|
4
|
+
<title>MKPlayer 1.0.17</title>
|
|
5
5
|
<meta charset='UTF-8'/>
|
|
6
6
|
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
|
7
7
|
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
package/package.json
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config to change the labels in the player dropdown
|
|
3
|
+
*/
|
|
4
|
+
export interface LabelConfig {
|
|
5
|
+
/**
|
|
6
|
+
* list of labels to use in the audio dropdown
|
|
7
|
+
*/
|
|
8
|
+
audio?: Map<string, string>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* list of labels to use in the captions dropdown
|
|
12
|
+
*/
|
|
13
|
+
captions?: Map<string, string>;
|
|
14
|
+
}
|
package/src/MKPlayer.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { BufferLevel } from './BufferLevel';
|
|
|
9
9
|
import { MKPlayerEventCallback } from './events/MKPlayerEventCallback';
|
|
10
10
|
import { Logger } from './Logger';
|
|
11
11
|
import { HttpRequest, HttpRequestType } from 'bitmovin-player/types/core/NetworkAPI';
|
|
12
|
-
import {
|
|
12
|
+
import { UrlType } from './events/UrlType';
|
|
13
13
|
import { URLHelper } from './URLHelper';
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -18,7 +18,6 @@ import { URLHelper } from './URLHelper';
|
|
|
18
18
|
export class MKPlayer {
|
|
19
19
|
private player: PlayerAPI;
|
|
20
20
|
private stream: MKStream;
|
|
21
|
-
|
|
22
21
|
/**
|
|
23
22
|
* constructor used to create a new MKPlayer instance
|
|
24
23
|
*
|
|
@@ -44,17 +43,12 @@ export class MKPlayer {
|
|
|
44
43
|
},
|
|
45
44
|
network: {
|
|
46
45
|
preprocessHttpRequest: (type: HttpRequestType, request: HttpRequest) => {
|
|
47
|
-
if (type === 'manifest/hls/master') {
|
|
48
|
-
if (typeof mkPlayerConfiguration.refreshToken === 'function') {
|
|
49
|
-
let token = mkPlayerConfiguration.refreshToken(RequestType.Master);
|
|
50
|
-
console.log('[MKPlayer] Appending master token: ' + token);
|
|
51
|
-
request.url = this.appendToken(request.url, token);
|
|
52
|
-
}
|
|
53
|
-
} else if (type === 'manifest/hls/variant') {
|
|
46
|
+
if (type === 'manifest/hls/master' || type === 'manifest/hls/variant') {
|
|
54
47
|
if (typeof mkPlayerConfiguration.refreshToken === 'function') {
|
|
55
|
-
let
|
|
56
|
-
|
|
57
|
-
|
|
48
|
+
let urlType = this.stream.didFailOver ? UrlType.Secondary : UrlType.Primary;
|
|
49
|
+
let token = mkPlayerConfiguration.refreshToken(urlType);
|
|
50
|
+
console.log('[MKPlayer] Appending ' + urlType + ' token: ' + token);
|
|
51
|
+
request.url = URLHelper.appendToken(request.url, token);
|
|
58
52
|
}
|
|
59
53
|
}
|
|
60
54
|
return Promise.resolve(request);
|
|
@@ -134,7 +128,7 @@ export class MKPlayer {
|
|
|
134
128
|
load(stream: MKStream): Promise<void> {
|
|
135
129
|
let playerSource: SourceConfig;
|
|
136
130
|
this.stream = stream;
|
|
137
|
-
let url: string =
|
|
131
|
+
let url: string = this.selectUrl();
|
|
138
132
|
|
|
139
133
|
if (url.includes('.m3u8')) {
|
|
140
134
|
playerSource = {
|
|
@@ -154,6 +148,26 @@ export class MKPlayer {
|
|
|
154
148
|
playerSource.poster = stream.poster;
|
|
155
149
|
}
|
|
156
150
|
|
|
151
|
+
playerSource.labeling = {
|
|
152
|
+
hls: {
|
|
153
|
+
tracks: (track) => {
|
|
154
|
+
if (this.stream.labelConfig && this.stream.labelConfig.audio && this.stream.labelConfig.audio[track.lang]) {
|
|
155
|
+
return this.stream.labelConfig.audio[track.lang];
|
|
156
|
+
} else {
|
|
157
|
+
return track.lang;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
subtitles: (track) => {
|
|
161
|
+
console.log(track);
|
|
162
|
+
if (this.stream.labelConfig && this.stream.labelConfig.captions && this.stream.labelConfig.captions[track.lang]) {
|
|
163
|
+
return this.stream.labelConfig.captions[track.lang];
|
|
164
|
+
} else {
|
|
165
|
+
return track.lang;
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
|
|
157
171
|
if (stream.assetIdentifier) {
|
|
158
172
|
playerSource.analytics = {
|
|
159
173
|
videoId: stream.assetIdentifier,
|
|
@@ -188,7 +202,6 @@ export class MKPlayer {
|
|
|
188
202
|
*/
|
|
189
203
|
off(eventType: MKEvent, callback: MKPlayerEventCallback): void {
|
|
190
204
|
let playerEventType = MKPlayer.mapEvent(eventType);
|
|
191
|
-
|
|
192
205
|
return this.player.off(playerEventType, callback);
|
|
193
206
|
}
|
|
194
207
|
|
|
@@ -279,17 +292,19 @@ export class MKPlayer {
|
|
|
279
292
|
* returns the current player version
|
|
280
293
|
*/
|
|
281
294
|
version(): string {
|
|
282
|
-
return '1.0.
|
|
295
|
+
return '1.0.16';
|
|
283
296
|
}
|
|
284
297
|
|
|
285
|
-
private
|
|
298
|
+
private selectUrl(): string {
|
|
286
299
|
let rand = MKPlayer.getRandomInt(99);
|
|
287
|
-
if (
|
|
288
|
-
Logger.log('[MKPlayer] selecting secondary source url - ' +
|
|
289
|
-
|
|
300
|
+
if (this.stream.cdnFailoverPercent && this.stream.secondaryUrl && rand < this.stream.cdnFailoverPercent) {
|
|
301
|
+
Logger.log('[MKPlayer] selecting secondary source url - ' + this.stream.secondaryUrl);
|
|
302
|
+
this.stream.didFailOver = true;
|
|
303
|
+
return this.stream.secondaryUrl;
|
|
290
304
|
} else {
|
|
291
|
-
Logger.log('[MKPlayer] selecting primary source url - ' +
|
|
292
|
-
|
|
305
|
+
Logger.log('[MKPlayer] selecting primary source url - ' + this.stream.primaryUrl);
|
|
306
|
+
this.stream.didFailOver = false;
|
|
307
|
+
return this.stream.primaryUrl;
|
|
293
308
|
}
|
|
294
309
|
}
|
|
295
310
|
|
|
@@ -365,25 +380,11 @@ export class MKPlayer {
|
|
|
365
380
|
+ 'DEFAULT=YES,'
|
|
366
381
|
+ 'AUTOSELECT=YES,'
|
|
367
382
|
+ 'FORCED=NO,'
|
|
368
|
-
+ 'LANGUAGE="' + track.language + '",GROUP-ID="
|
|
383
|
+
+ 'LANGUAGE="' + track.language + '",GROUP-ID="Subtitles",'
|
|
369
384
|
+ 'URI="' + track.url + '"');
|
|
370
385
|
});
|
|
371
386
|
}
|
|
372
387
|
|
|
373
388
|
return body;
|
|
374
389
|
}
|
|
375
|
-
|
|
376
|
-
private appendToken(url: string, token: string): string {
|
|
377
|
-
let splitted = token.split('=');
|
|
378
|
-
if (splitted && splitted.length >= 2) {
|
|
379
|
-
let key = splitted[0];
|
|
380
|
-
let value = splitted[1];
|
|
381
|
-
let params = new Map<string, string>();
|
|
382
|
-
params.set(key, value);
|
|
383
|
-
let updatedUrl = URLHelper.appendQueryParametersToUrl(url, params);
|
|
384
|
-
return updatedUrl;
|
|
385
|
-
} else {
|
|
386
|
-
return url;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
390
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MKPlayer's configuration interface
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { UrlType } from './events/UrlType';
|
|
5
5
|
|
|
6
6
|
export interface MKPlayerConfiguration {
|
|
7
7
|
/**
|
|
@@ -42,5 +42,5 @@ export interface MKPlayerConfiguration {
|
|
|
42
42
|
/**
|
|
43
43
|
* Refresh the CDN Token
|
|
44
44
|
*/
|
|
45
|
-
refreshToken?: (type:
|
|
45
|
+
refreshToken?: (type: UrlType) => string;
|
|
46
46
|
}
|
package/src/MKStream.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Configuration object used when loading a new stream
|
|
3
3
|
*/
|
|
4
4
|
import { SubtitleTrack } from './SubtitleTrack';
|
|
5
|
+
import { LabelConfig } from './LabelConfig';
|
|
5
6
|
|
|
6
7
|
export class MKStream {
|
|
7
8
|
private readonly _assetIdentifier: string;
|
|
@@ -16,6 +17,8 @@ export class MKStream {
|
|
|
16
17
|
private readonly _customData3: string;
|
|
17
18
|
private readonly _customData4: string;
|
|
18
19
|
private readonly _customData5: string;
|
|
20
|
+
private readonly _labelConfig: LabelConfig;
|
|
21
|
+
private _didFailOver: boolean = false;
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
*
|
|
@@ -26,8 +29,9 @@ export class MKStream {
|
|
|
26
29
|
* @param cdnFailoverPercent - percent value from 0-100 describing what percentage of users should initially playback
|
|
27
30
|
* the secondary url
|
|
28
31
|
* @param assetIdentifier - identifier for the current stream
|
|
32
|
+
* @param labelConfig - config to change the labels in the player dropdown
|
|
29
33
|
*/
|
|
30
|
-
constructor(primaryUrl: string, assetIdentifier: string, subtitleTracks?: SubtitleTrack[], poster?: string, secondaryUrl?: string, cdnFailoverPercent?: number, userId?: string, customData1?: string, customData2?: string, customData3?: string, customData4?: string, customData5?: string) {
|
|
34
|
+
constructor(primaryUrl: string, assetIdentifier: string, subtitleTracks?: SubtitleTrack[], poster?: string, secondaryUrl?: string, cdnFailoverPercent?: number, userId?: string, customData1?: string, customData2?: string, customData3?: string, customData4?: string, customData5?: string, labelConfig?: LabelConfig) {
|
|
31
35
|
this._cdnFailoverPercent = cdnFailoverPercent;
|
|
32
36
|
this._secondaryUrl = secondaryUrl;
|
|
33
37
|
this._primaryUrl = primaryUrl;
|
|
@@ -40,6 +44,7 @@ export class MKStream {
|
|
|
40
44
|
this._customData3 = customData3;
|
|
41
45
|
this._customData4 = customData4;
|
|
42
46
|
this._customData5 = customData5;
|
|
47
|
+
this._labelConfig = labelConfig;
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
/**
|
|
@@ -125,4 +130,25 @@ export class MKStream {
|
|
|
125
130
|
public get userId(): string {
|
|
126
131
|
return this._userId;
|
|
127
132
|
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* config to change the labels in the player dropdown
|
|
136
|
+
*/
|
|
137
|
+
public get labelConfig(): LabelConfig {
|
|
138
|
+
return this._labelConfig;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* boolean value describing if failover happened
|
|
143
|
+
*/
|
|
144
|
+
public get didFailOver(): boolean {
|
|
145
|
+
return this._didFailOver;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* setter for the didFailOver boolean value
|
|
150
|
+
*/
|
|
151
|
+
public set didFailOver(value: boolean) {
|
|
152
|
+
this._didFailOver = value;
|
|
153
|
+
}
|
|
128
154
|
}
|
package/src/URLHelper.ts
CHANGED
|
@@ -56,8 +56,24 @@ export class URLHelper {
|
|
|
56
56
|
url = urlBase;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
|
|
60
59
|
return url;
|
|
60
|
+
}
|
|
61
61
|
|
|
62
|
+
public static appendToken(url: string, token: string): string {
|
|
63
|
+
if (token) {
|
|
64
|
+
let split = token.split('=');
|
|
65
|
+
if (split && split.length >= 2) {
|
|
66
|
+
let key = split[0];
|
|
67
|
+
let value = split[1];
|
|
68
|
+
let params = new Map<string, string>();
|
|
69
|
+
params.set(key, value);
|
|
70
|
+
let updatedUrl = URLHelper.appendQueryParametersToUrl(url, params);
|
|
71
|
+
return updatedUrl;
|
|
72
|
+
} else {
|
|
73
|
+
return url;
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
return url;
|
|
77
|
+
}
|
|
62
78
|
}
|
|
63
79
|
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RequestType = void 0;
|
|
4
|
-
var RequestType;
|
|
5
|
-
(function (RequestType) {
|
|
6
|
-
RequestType["Master"] = "master";
|
|
7
|
-
RequestType["Variant"] = "variant";
|
|
8
|
-
})(RequestType = exports.RequestType || (exports.RequestType = {}));
|
|
9
|
-
//# sourceMappingURL=RequestType.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RequestType.js","sourceRoot":"","sources":["../../../src/events/RequestType.ts"],"names":[],"mappings":";;;AACA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;AACrB,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RequestType.js","sourceRoot":"","sources":["../../../src/events/RequestType.ts"],"names":[],"mappings":"AACA,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;AACrB,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB"}
|