@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.
Files changed (67) hide show
  1. package/README.md +8 -2
  2. package/dist/LabelConfig.d.ts +4 -0
  3. package/dist/MKPlayer.d.ts +1 -2
  4. package/dist/MKPlayerConfiguration.d.ts +2 -2
  5. package/dist/MKStream.d.ts +7 -1
  6. package/dist/URLHelper.d.ts +1 -0
  7. package/dist/events/UrlType.d.ts +4 -0
  8. package/dist/lib/LabelConfig.d.ts +4 -0
  9. package/dist/lib/LabelConfig.js +3 -0
  10. package/dist/lib/LabelConfig.js.map +1 -0
  11. package/dist/lib/MKPlayer.d.ts +1 -2
  12. package/dist/lib/MKPlayer.js +39 -35
  13. package/dist/lib/MKPlayer.js.map +1 -1
  14. package/dist/lib/MKPlayerConfiguration.d.ts +2 -2
  15. package/dist/lib/MKStream.d.ts +7 -1
  16. package/dist/lib/MKStream.js +20 -1
  17. package/dist/lib/MKStream.js.map +1 -1
  18. package/dist/lib/URLHelper.d.ts +1 -0
  19. package/dist/lib/URLHelper.js +19 -0
  20. package/dist/lib/URLHelper.js.map +1 -1
  21. package/dist/lib/events/UrlType.d.ts +4 -0
  22. package/dist/lib/events/UrlType.js +9 -0
  23. package/dist/lib/events/UrlType.js.map +1 -0
  24. package/dist/lib-esm/LabelConfig.d.ts +4 -0
  25. package/dist/lib-esm/LabelConfig.js +2 -0
  26. package/dist/lib-esm/LabelConfig.js.map +1 -0
  27. package/dist/lib-esm/MKPlayer.d.ts +1 -2
  28. package/dist/lib-esm/MKPlayer.js +39 -35
  29. package/dist/lib-esm/MKPlayer.js.map +1 -1
  30. package/dist/lib-esm/MKPlayerConfiguration.d.ts +2 -2
  31. package/dist/lib-esm/MKStream.d.ts +7 -1
  32. package/dist/lib-esm/MKStream.js +20 -1
  33. package/dist/lib-esm/MKStream.js.map +1 -1
  34. package/dist/lib-esm/URLHelper.d.ts +1 -0
  35. package/dist/lib-esm/URLHelper.js +19 -0
  36. package/dist/lib-esm/URLHelper.js.map +1 -1
  37. package/dist/lib-esm/events/UrlType.d.ts +4 -0
  38. package/dist/lib-esm/events/UrlType.js +6 -0
  39. package/dist/lib-esm/events/UrlType.js.map +1 -0
  40. package/dist/mkplayer.js +1 -1
  41. package/doc/assets/js/search.json +1 -1
  42. package/doc/classes/mkplayer.html +22 -16
  43. package/doc/enums/mkevent.html +6 -0
  44. package/doc/enums/urltype.html +180 -0
  45. package/doc/globals.html +8 -0
  46. package/doc/index.html +14 -2
  47. package/doc/interfaces/bufferlevel.html +6 -0
  48. package/doc/interfaces/labelconfig.html +198 -0
  49. package/doc/interfaces/mkplayereventcallback.html +6 -0
  50. package/doc/interfaces/subtitletrack.html +6 -0
  51. package/index.html +11 -11
  52. package/multi-camera.html +1 -1
  53. package/package.json +1 -1
  54. package/src/LabelConfig.ts +14 -0
  55. package/src/MKPlayer.ts +37 -36
  56. package/src/MKPlayerConfiguration.ts +2 -2
  57. package/src/MKStream.ts +27 -1
  58. package/src/URLHelper.ts +17 -1
  59. package/src/events/UrlType.ts +7 -0
  60. package/dist/events/RequestType.d.ts +0 -4
  61. package/dist/lib/events/RequestType.d.ts +0 -4
  62. package/dist/lib/events/RequestType.js +0 -9
  63. package/dist/lib/events/RequestType.js.map +0 -1
  64. package/dist/lib-esm/events/RequestType.d.ts +0 -4
  65. package/dist/lib-esm/events/RequestType.js +0 -6
  66. package/dist/lib-esm/events/RequestType.js.map +0 -1
  67. 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">&lt;</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">&gt;</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">&lt;</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">&gt;</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.15</title>
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(liveSubtitleButton);
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://cesstatic.blob.core.windows.net/hls/Test1/master.m3u8",
321
+ primaryUrl: "https://cdn-0573.aas.mediakind.com/cmaftkn/CES-Hero/index.m3u8",
322
322
  cdnFailoverPercent: 10,
323
- assetIdentifier: 'DASH Live',
324
- subtitleTracks: [{
325
- url: "https://cesstatic.blob.core.windows.net/hls/Test1/master_captionENG.m3u8",
326
- language: 'ENG',
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 === 'master') {
445
+ if (type === 'primary') {
446
446
  return 'hdnts=1234566787888'
447
- }else if (type === 'variant') {
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(liveSubtitle)
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.15</title>
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mediakind/mkplayer",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "MediaKind Web Player",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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 { RequestType } from './events/RequestType';
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 token = mkPlayerConfiguration.refreshToken(RequestType.Variant);
56
- console.log('[MKPlayer] Appending variant token: ' + token);
57
- request.url = this.appendToken(request.url, token);
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 = MKPlayer.selectUrl(stream);
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.15';
295
+ return '1.0.16';
283
296
  }
284
297
 
285
- private static selectUrl(source: MKStream): string {
298
+ private selectUrl(): string {
286
299
  let rand = MKPlayer.getRandomInt(99);
287
- if (source.cdnFailoverPercent && source.secondaryUrl && rand < source.cdnFailoverPercent) {
288
- Logger.log('[MKPlayer] selecting secondary source url - ' + source.secondaryUrl);
289
- return source.secondaryUrl;
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 - ' + source.primaryUrl);
292
- return source.primaryUrl;
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="subs",'
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 { RequestType } from './events/RequestType';
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: RequestType) => string;
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
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * URL Type
3
+ */
4
+ export enum UrlType {
5
+ Primary = 'primary',
6
+ Secondary = 'secondary',
7
+ }
@@ -1,4 +0,0 @@
1
- export declare enum RequestType {
2
- Master = "master",
3
- Variant = "variant"
4
- }
@@ -1,4 +0,0 @@
1
- export declare enum RequestType {
2
- Master = "master",
3
- Variant = "variant"
4
- }
@@ -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,4 +0,0 @@
1
- export declare enum RequestType {
2
- Master = "master",
3
- Variant = "variant"
4
- }
@@ -1,6 +0,0 @@
1
- export var RequestType;
2
- (function (RequestType) {
3
- RequestType["Master"] = "master";
4
- RequestType["Variant"] = "variant";
5
- })(RequestType || (RequestType = {}));
6
- //# sourceMappingURL=RequestType.js.map
@@ -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"}
@@ -1,5 +0,0 @@
1
-
2
- export enum RequestType {
3
- Master = 'master',
4
- Variant = 'variant',
5
- }