@playkit-js/playkit-js-providers 2.39.1 → 2.39.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/playkit-analytics-service.js +2 -0
  3. package/dist/playkit-analytics-service.js.map +1 -0
  4. package/dist/playkit-bookmark-service.js +2 -0
  5. package/dist/playkit-bookmark-service.js.map +1 -0
  6. package/dist/playkit-ott-provider.js +2 -0
  7. package/dist/playkit-ott-provider.js.map +1 -0
  8. package/dist/playkit-ovp-provider.js +2 -0
  9. package/dist/playkit-ovp-provider.js.map +1 -0
  10. package/dist/playkit-stats-service.js +2 -0
  11. package/dist/playkit-stats-service.js.map +1 -0
  12. package/package.json +1 -1
  13. package/.babelrc +0 -22
  14. package/.editorconfig +0 -10
  15. package/.eslintignore +0 -3
  16. package/.eslintrc.json +0 -26
  17. package/.flowconfig +0 -5
  18. package/.github/ISSUE_TEMPLATE.md +0 -28
  19. package/.github/PULL_REQUEST_TEMPLATE.md +0 -12
  20. package/.github/workflows/run_canary_full_flow.yaml +0 -28
  21. package/.github/workflows/run_prod.yaml +0 -24
  22. package/.github/workflows/run_tests.yaml +0 -24
  23. package/.prettierignore +0 -7
  24. package/.prettierrc +0 -12
  25. package/docs/configuration.md +0 -225
  26. package/karma.conf.js +0 -42
  27. package/src/entities/bumper.js +0 -23
  28. package/src/entities/drm.js +0 -46
  29. package/src/entities/entry-list.js +0 -15
  30. package/src/entities/image-source.js +0 -37
  31. package/src/entities/media-entry.js +0 -96
  32. package/src/entities/media-format.js +0 -46
  33. package/src/entities/media-source.js +0 -70
  34. package/src/entities/media-sources.js +0 -79
  35. package/src/entities/playlist.js +0 -37
  36. package/src/index.html +0 -11
  37. package/src/k-provider/common/base-provider-parser.js +0 -0
  38. package/src/k-provider/common/base-provider.js +0 -110
  39. package/src/k-provider/common/base-service-result.js +0 -57
  40. package/src/k-provider/common/data-loader-manager.js +0 -115
  41. package/src/k-provider/common/multi-request-builder.js +0 -112
  42. package/src/k-provider/common/response-types/kaltura-access-control-message.js +0 -22
  43. package/src/k-provider/common/response-types/kaltura-drm-playback-plugin-data.js +0 -39
  44. package/src/k-provider/ott/config.js +0 -22
  45. package/src/k-provider/ott/index.js +0 -15
  46. package/src/k-provider/ott/loaders/asset-list-loader.js +0 -68
  47. package/src/k-provider/ott/loaders/asset-loader.js +0 -69
  48. package/src/k-provider/ott/loaders/data-loader-manager.js +0 -15
  49. package/src/k-provider/ott/loaders/session-loader.js +0 -62
  50. package/src/k-provider/ott/provider-parser.js +0 -282
  51. package/src/k-provider/ott/provider.js +0 -242
  52. package/src/k-provider/ott/response-types/kaltura-asset.js +0 -79
  53. package/src/k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js +0 -28
  54. package/src/k-provider/ott/response-types/kaltura-playback-context.js +0 -74
  55. package/src/k-provider/ott/response-types/kaltura-playback-source.js +0 -63
  56. package/src/k-provider/ott/response-types/kaltura-rule-action.js +0 -26
  57. package/src/k-provider/ott/services/asset-service.js +0 -50
  58. package/src/k-provider/ott/services/bookmark/bookmark-service.js +0 -49
  59. package/src/k-provider/ott/services/bookmark/index.js +0 -12
  60. package/src/k-provider/ott/services/ott-service.js +0 -34
  61. package/src/k-provider/ott/services/user-service.js +0 -32
  62. package/src/k-provider/ovp/config.js +0 -28
  63. package/src/k-provider/ovp/external-captions-builder.js +0 -38
  64. package/src/k-provider/ovp/index.js +0 -13
  65. package/src/k-provider/ovp/loaders/data-loader-manager.js +0 -17
  66. package/src/k-provider/ovp/loaders/entry-list-loader.js +0 -69
  67. package/src/k-provider/ovp/loaders/media-entry-loader.js +0 -84
  68. package/src/k-provider/ovp/loaders/playlist-loader.js +0 -66
  69. package/src/k-provider/ovp/loaders/session-loader.js +0 -62
  70. package/src/k-provider/ovp/loaders/ui-config-loader.js +0 -71
  71. package/src/k-provider/ovp/play-source-url-builder.js +0 -60
  72. package/src/k-provider/ovp/provider-parser.js +0 -451
  73. package/src/k-provider/ovp/provider.js +0 -344
  74. package/src/k-provider/ovp/regex-action-handler.js +0 -147
  75. package/src/k-provider/ovp/request-params/base-entry-response-profile.js +0 -29
  76. package/src/k-provider/ovp/response-types/index.js +0 -18
  77. package/src/k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js +0 -36
  78. package/src/k-provider/ovp/response-types/kaltura-base-entry-list-response.js +0 -31
  79. package/src/k-provider/ovp/response-types/kaltura-bumper.js +0 -26
  80. package/src/k-provider/ovp/response-types/kaltura-flavor-asset.js +0 -109
  81. package/src/k-provider/ovp/response-types/kaltura-media-entries.js +0 -23
  82. package/src/k-provider/ovp/response-types/kaltura-media-entry.js +0 -141
  83. package/src/k-provider/ovp/response-types/kaltura-metadata-list-response.js +0 -23
  84. package/src/k-provider/ovp/response-types/kaltura-metadata.js +0 -51
  85. package/src/k-provider/ovp/response-types/kaltura-playback-context.js +0 -96
  86. package/src/k-provider/ovp/response-types/kaltura-playback-source.js +0 -90
  87. package/src/k-provider/ovp/response-types/kaltura-playlist.js +0 -35
  88. package/src/k-provider/ovp/response-types/kaltura-rule-action.js +0 -28
  89. package/src/k-provider/ovp/response-types/kaltura-ui-conf-response.js +0 -90
  90. package/src/k-provider/ovp/services/analytics/analytics-service.js +0 -57
  91. package/src/k-provider/ovp/services/analytics/index.js +0 -12
  92. package/src/k-provider/ovp/services/base-entry-service.js +0 -76
  93. package/src/k-provider/ovp/services/meta-data-service.js +0 -30
  94. package/src/k-provider/ovp/services/ovp-service.js +0 -33
  95. package/src/k-provider/ovp/services/playlist-service.js +0 -63
  96. package/src/k-provider/ovp/services/session-service.js +0 -28
  97. package/src/k-provider/ovp/services/stats/index.js +0 -12
  98. package/src/k-provider/ovp/services/stats/stats-service.js +0 -33
  99. package/src/k-provider/ovp/services/ui-conf-service.js +0 -33
  100. package/src/util/clone.js +0 -23
  101. package/src/util/error/category.js +0 -12
  102. package/src/util/error/code.js +0 -79
  103. package/src/util/error/error.js +0 -48
  104. package/src/util/error/severity.js +0 -23
  105. package/src/util/logger.js +0 -108
  106. package/src/util/param.js +0 -45
  107. package/src/util/request-builder.js +0 -187
  108. package/src/util/xml-parser.js +0 -40
  109. package/test/.eslintrc.json +0 -9
  110. package/test/setup/karma.js +0 -5
  111. package/test/setup/load-specs.js +0 -13
  112. package/test/setup/prepare-test-environment.js +0 -17
  113. package/test/src/k-provider/ott/be-data.js +0 -3306
  114. package/test/src/k-provider/ott/media-config-data.js +0 -793
  115. package/test/src/k-provider/ott/provider-parser.spec.js +0 -30
  116. package/test/src/k-provider/ott/provider.spec.js +0 -384
  117. package/test/src/k-provider/ott/services/bookmark-service.spec.js +0 -38
  118. package/test/src/k-provider/ovp/be-data.js +0 -3932
  119. package/test/src/k-provider/ovp/external-captions-builder.spec.js +0 -59
  120. package/test/src/k-provider/ovp/media-config-data.js +0 -1509
  121. package/test/src/k-provider/ovp/playback-sources-data.js +0 -229
  122. package/test/src/k-provider/ovp/provider-parser-data.js +0 -142
  123. package/test/src/k-provider/ovp/provider-parser.spec.js +0 -96
  124. package/test/src/k-provider/ovp/provider.spec.js +0 -1075
  125. package/test/src/k-provider/ovp/regex-action-handler-data.js +0 -794
  126. package/test/src/k-provider/ovp/regex-action-handler.spec.js +0 -93
  127. package/test/src/k-provider/ovp/services/analytics-service.spec.js +0 -62
  128. package/test/src/k-provider/ovp/services/stats-service.spec.js +0 -37
  129. package/test/src/util/param.spec.js +0 -23
  130. package/webpack.config.js +0 -85
@@ -1,62 +0,0 @@
1
- //@flow
2
- import OVPSessionService from '../services/session-service';
3
- import OVPConfiguration from '../config';
4
- import RequestBuilder from '../../../util/request-builder';
5
-
6
- export default class OVPSessionLoader implements ILoader {
7
- _widgetId: string;
8
- _requests: Array<RequestBuilder>;
9
- _response: any = {};
10
-
11
- static get id(): string {
12
- return 'session';
13
- }
14
-
15
- set requests(requests: Array<RequestBuilder>) {
16
- this._requests = requests;
17
- }
18
-
19
- get requests(): Array<RequestBuilder> {
20
- return this._requests;
21
- }
22
-
23
- set response(response: any) {
24
- this._response.ks = response[0].data.ks;
25
- }
26
-
27
- get response(): any {
28
- return this._response.ks;
29
- }
30
-
31
- /**
32
- * @constructor
33
- * @param {Object} params loader params
34
- */
35
- constructor(params: Object) {
36
- this.requests = this.buildRequests(params);
37
- this._widgetId = params.widgetId;
38
- }
39
-
40
- /**
41
- * Builds loader requests
42
- * @function
43
- * @param {Object} params Requests parameters
44
- * @returns {RequestBuilder} The request builder
45
- * @static
46
- */
47
- buildRequests(params: Object): Array<RequestBuilder> {
48
- const config = OVPConfiguration.get();
49
- const requests: Array<RequestBuilder> = [];
50
- requests.push(OVPSessionService.anonymousSession(config.serviceUrl, params.widgetId));
51
- return requests;
52
- }
53
-
54
- /**
55
- * Loader validation function
56
- * @function
57
- * @returns {boolean} Is valid
58
- */
59
- isValid(): boolean {
60
- return !!this._widgetId;
61
- }
62
- }
@@ -1,71 +0,0 @@
1
- //@flow
2
- import OVPUIConfService from '../services/ui-conf-service';
3
- import {KalturaUIConfResponse} from '../response-types/kaltura-ui-conf-response';
4
- import OVPConfiguration from '../config';
5
- import RequestBuilder from '../../../util/request-builder';
6
-
7
- export default class OVPUIConfigLoader implements ILoader {
8
- _uiConfId: number;
9
- _requests: Array<RequestBuilder>;
10
- _response: any = {};
11
-
12
- static get id(): string {
13
- return 'uiConf';
14
- }
15
-
16
- set requests(requests: Array<RequestBuilder>) {
17
- this._requests = requests;
18
- }
19
-
20
- get requests(): Array<RequestBuilder> {
21
- return this._requests;
22
- }
23
-
24
- set response(response: any) {
25
- this._response.uiConf = new KalturaUIConfResponse(response[0].data);
26
- }
27
-
28
- get response(): any {
29
- if (this._response && this._response.uiConf && this._response.uiConf.config)
30
- try {
31
- return JSON.parse(this._response.uiConf.config).plugins;
32
- } catch (err) {
33
- return null;
34
- }
35
- else {
36
- return null;
37
- }
38
- }
39
-
40
- /**
41
- * @constructor
42
- * @param {Object} params loader params
43
- */
44
- constructor(params: Object) {
45
- this.requests = this.buildRequests(params);
46
- this._uiConfId = params.uiConfId;
47
- }
48
-
49
- /**
50
- * Builds loader requests
51
- * @function
52
- * @param {Object} params Requests parameters
53
- * @returns {RequestBuilder} The request builder
54
- * @static
55
- */
56
- buildRequests(params: Object): Array<RequestBuilder> {
57
- const config = OVPConfiguration.get();
58
- let requests: Array<RequestBuilder> = [];
59
- requests.push(OVPUIConfService.get(config.serviceUrl, params.ks, params.uiConfId));
60
- return requests;
61
- }
62
-
63
- /**
64
- * Loader validation function
65
- * @function
66
- * @returns {boolean} Is valid
67
- */
68
- isValid(): boolean {
69
- return !!this._uiConfId;
70
- }
71
- }
@@ -1,60 +0,0 @@
1
- //@flow
2
- import OVPConfiguration from './config';
3
-
4
- type urlParamsType = {
5
- partnerId: number,
6
- entryId: string,
7
- ks: string,
8
- uiConfId: ?number,
9
- format: string,
10
- protocol: string,
11
- extension: string,
12
- flavorIds: ?string
13
- };
14
-
15
- export default class PlaySourceUrlBuilder {
16
- /**
17
- * Returns source url by given url params
18
- * @function build
19
- * @param {urlParamsType} urlParams The params
20
- * @returns {string} The URL
21
- * @static
22
- */
23
- static build(urlParams: urlParamsType): string {
24
- const config = OVPConfiguration.get();
25
- const serviceUrlOrigin: string = config.serviceUrl.substr(0, config.serviceUrl.lastIndexOf('/'));
26
- const {partnerId, entryId, ks, uiConfId, format, protocol, extension, flavorIds} = urlParams;
27
-
28
- //verify mandatory params
29
- //$FlowFixMe
30
- if (!serviceUrlOrigin || isNaN(Number.parseInt(partnerId)) || !entryId || !format || !protocol) {
31
- return '';
32
- }
33
-
34
- let playUrl = serviceUrlOrigin;
35
- if (!serviceUrlOrigin.endsWith('/')) {
36
- playUrl += '/';
37
- }
38
- playUrl += 'p/' + partnerId + '/sp/' + partnerId + '00' + '/playManifest/entryId/' + entryId + '/protocol/' + protocol + '/format/' + format;
39
-
40
- if (flavorIds) {
41
- playUrl += '/flavorIds/' + flavorIds;
42
- } else if (uiConfId) {
43
- playUrl += '/uiConfId/' + uiConfId;
44
- }
45
-
46
- if (ks !== '') {
47
- playUrl += '/ks/' + ks;
48
- }
49
-
50
- if (extension !== '') {
51
- playUrl += '/a.' + extension;
52
- }
53
-
54
- if (uiConfId && flavorIds !== '') {
55
- playUrl += '?uiConfId=' + uiConfId;
56
- }
57
-
58
- return playUrl;
59
- }
60
- }
@@ -1,451 +0,0 @@
1
- //@flow
2
- import {KalturaPlaybackContext} from './response-types/kaltura-playback-context';
3
- import {KalturaMetadataListResponse} from './response-types/kaltura-metadata-list-response';
4
- import {KalturaMediaEntry} from './response-types/kaltura-media-entry';
5
- import {KalturaPlaybackSource} from './response-types/kaltura-playback-source';
6
- import {KalturaBumper} from './response-types/kaltura-bumper';
7
- import {KalturaDrmPlaybackPluginData} from '../common/response-types/kaltura-drm-playback-plugin-data';
8
- import PlaySourceUrlBuilder from './play-source-url-builder';
9
- import XmlParser from '../../util/xml-parser';
10
- import getLogger from '../../util/logger';
11
- import OVPConfiguration from './config';
12
- import MediaEntry from '../../entities/media-entry';
13
- import Drm from '../../entities/drm';
14
- import MediaSource from '../../entities/media-source';
15
- import MediaSources from '../../entities/media-sources';
16
- import {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';
17
- import Playlist from '../../entities/playlist';
18
- import EntryList from '../../entities/entry-list';
19
- import Bumper from '../../entities/bumper';
20
- import {KalturaRuleAction} from './response-types/kaltura-rule-action';
21
- import {KalturaAccessControlMessage} from '../common/response-types/kaltura-access-control-message';
22
- import type {OVPMediaEntryLoaderResponse} from './loaders/media-entry-loader';
23
- import {ExternalCaptionsBuilder} from './external-captions-builder';
24
- import ImageSource from '../../entities/image-source';
25
-
26
- class OVPProviderParser {
27
- static _logger = getLogger('OVPProviderParser');
28
-
29
- /**
30
- * Returns parsed media entry by given OVP response objects
31
- * @function getMediaEntry
32
- * @param {string} ks - The ks
33
- * @param {number} partnerId - The partner ID
34
- * @param {number} uiConfId - The uiConf ID
35
- * @param {any} mediaEntryResponse - The media entry response
36
- * @returns {MediaEntry} - The media entry
37
- * @static
38
- * @public
39
- */
40
- static getMediaEntry(ks: string, partnerId: number, uiConfId: ?number, mediaEntryResponse: any): MediaEntry {
41
- const mediaEntry = new MediaEntry();
42
- const entry = mediaEntryResponse.entry;
43
- const playbackContext = mediaEntryResponse.playBackContextResult;
44
- const metadataList = mediaEntryResponse.metadataListResult;
45
- const kalturaSources = playbackContext.sources;
46
-
47
- mediaEntry.sources = OVPProviderParser._getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext);
48
- OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList);
49
- if (mediaEntry.type !== MediaEntry.Type.LIVE && OVPConfiguration.get().useApiCaptions && playbackContext.data.playbackCaptions) {
50
- mediaEntry.sources.captions = ExternalCaptionsBuilder.createConfig(playbackContext.data.playbackCaptions, ks);
51
- }
52
- return mediaEntry;
53
- }
54
-
55
- /**
56
- * Returns the url with KS
57
- * @function addKsToUrl
58
- * @param {String} url - The url to add the KS
59
- * @param {string} ks - The ks
60
- * @returns {string} - The url with KS
61
- * @static
62
- * @public
63
- */
64
- static addKsToUrl(url: string, ks: string): string {
65
- const hasUrlExtension = path => {
66
- const pathWithoutQuery = path.split('?')[0];
67
- const pathAfterLastSlash = pathWithoutQuery.replace(/^.*[\\/]/, '');
68
- return pathAfterLastSlash.indexOf('.') !== -1;
69
- };
70
- let ksParam;
71
- if (ks) {
72
- if (hasUrlExtension(url)) {
73
- ksParam = url.indexOf('?') === -1 ? '?ks=' : '&ks=';
74
- } else {
75
- ksParam = '/ks/';
76
- }
77
- return url + ksParam + ks;
78
- }
79
- return url;
80
- }
81
-
82
- /**
83
- * Returns parsed playlist by given OVP response objects
84
- * @function getPlaylist
85
- * @param {any} playlistResponse - The playlist response
86
- * @returns {Playlist} - The playlist
87
- * @static
88
- * @public
89
- */
90
- static getPlaylist(playlistResponse: any): Playlist {
91
- const playlist = new Playlist();
92
- const playlistData = playlistResponse.playlistData;
93
- const playlistItems = playlistResponse.playlistItems.entries;
94
- playlist.id = playlistData.id;
95
- playlist.name = playlistData.name;
96
- playlist.description = playlistData.description;
97
- playlist.poster = playlistData.poster;
98
- playlistItems.forEach((entry: KalturaMediaEntry) => {
99
- const mediaEntry = new MediaEntry();
100
- OVPProviderParser._fillBaseData(mediaEntry, entry);
101
- playlist.items.push(mediaEntry);
102
- });
103
- return playlist;
104
- }
105
-
106
- /**
107
- * Returns parsed entry list by given OVP response objects
108
- * @function getEntryList
109
- * @param {any} playlistResponse - response
110
- * @returns {Playlist} - The entry list
111
- * @static
112
- * @public
113
- */
114
- static getEntryList(playlistResponse: any): EntryList {
115
- const entryList = new EntryList();
116
- const playlistItems = playlistResponse.playlistItems.entries;
117
- playlistItems.forEach(entry => {
118
- const mediaEntry = new MediaEntry();
119
- OVPProviderParser._fillBaseData(mediaEntry, entry);
120
- entryList.items.push(mediaEntry);
121
- });
122
- return entryList;
123
- }
124
-
125
- /**
126
- * Returns parsed bumper by given OTT response objects.
127
- * @function getBumper
128
- * @param {any} assetResponse - The asset response.
129
- * @param {string} ks - The ks
130
- * @param {number} partnerId - The partner ID
131
- * @returns {?Bumper} - The bumper
132
- * @static
133
- * @public
134
- */
135
- static getBumper(assetResponse: any, ks: string, partnerId: number): ?Bumper {
136
- const playbackContext = assetResponse.playBackContextResult;
137
- const bumperData: KalturaBumper = playbackContext.bumperData[0];
138
- if (bumperData) {
139
- const bumperSources = bumperData && bumperData.sources;
140
- const progressiveBumper = bumperSources.find(bumper => isProgressiveSource(bumper.format));
141
- if (progressiveBumper) {
142
- const parsedSources = OVPProviderParser._parseProgressiveSources(progressiveBumper, playbackContext, ks, partnerId, 0, bumperData.entryId);
143
- if (parsedSources[0]) {
144
- return new Bumper({url: parsedSources[0].url, clickThroughUrl: bumperData.clickThroughUrl});
145
- }
146
- }
147
- }
148
- }
149
-
150
- static _fillBaseData(mediaEntry: MediaEntry, entry: KalturaMediaEntry, metadataList: ?KalturaMetadataListResponse) {
151
- mediaEntry.poster = entry.poster;
152
- mediaEntry.id = entry.id;
153
- mediaEntry.duration = entry.duration;
154
- mediaEntry.metadata = OVPProviderParser._parseMetadata(metadataList);
155
- mediaEntry.metadata.description = entry.description || '';
156
- mediaEntry.metadata.entryId = entry.id || '';
157
- mediaEntry.metadata.name = entry.name || '';
158
- mediaEntry.metadata.tags = entry.tags || '';
159
- mediaEntry.status = entry.status;
160
-
161
- mediaEntry.type = OVPProviderParser._getEntryType(entry.entryType, entry.type);
162
- if (mediaEntry.type === MediaEntry.Type.LIVE) {
163
- mediaEntry.dvrStatus = entry.dvrStatus;
164
- }
165
-
166
- return mediaEntry;
167
- }
168
-
169
- static _getEntryType(entryTypeEnum: number, typeEnum: number | string): string {
170
- let type = MediaEntry.Type.UNKNOWN;
171
- switch (entryTypeEnum) {
172
- case KalturaMediaEntry.MediaType.IMAGE.value:
173
- type = MediaEntry.Type.IMAGE;
174
- break;
175
- case KalturaMediaEntry.MediaType.AUDIO.value:
176
- type = MediaEntry.Type.AUDIO;
177
- break;
178
- default:
179
- switch (typeEnum) {
180
- case KalturaMediaEntry.EntryType.MEDIA_CLIP.value:
181
- type = MediaEntry.Type.VOD;
182
- break;
183
- case KalturaMediaEntry.EntryType.LIVE_STREAM.value:
184
- case KalturaMediaEntry.EntryType.LIVE_CHANNEL.value:
185
- type = MediaEntry.Type.LIVE;
186
- break;
187
- default:
188
- type = MediaEntry.Type.UNKNOWN;
189
- }
190
- }
191
- return type;
192
- }
193
-
194
- /**
195
- * Returns the parsed sources
196
- * @function _getParsedSources
197
- * @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources
198
- * @param {string} ks - The ks
199
- * @param {number} partnerId - The partner ID
200
- * @param {number} uiConfId - The uiConf ID
201
- * @param {Object} entry - The entry
202
- * @param {KalturaPlaybackContext} playbackContext - The playback context
203
- * @return {MediaSources} - A media sources
204
- * @static
205
- * @private
206
- */
207
- static _getParsedSources(
208
- kalturaSources: Array<KalturaPlaybackSource>,
209
- ks: string,
210
- partnerId: number,
211
- uiConfId: ?number,
212
- entry: Object,
213
- playbackContext: KalturaPlaybackContext
214
- ): MediaSources {
215
- const sources = new MediaSources();
216
- const addAdaptiveSource = (source: KalturaPlaybackSource) => {
217
- const parsedSource = OVPProviderParser._parseAdaptiveSource(source, playbackContext, ks, partnerId, uiConfId, entry.id);
218
- if (parsedSource) {
219
- const sourceFormat = SupportedStreamFormat.get(source.format);
220
- sources.map(parsedSource, sourceFormat);
221
- }
222
- };
223
- const parseAdaptiveSources = () => {
224
- kalturaSources.filter(source => !isProgressiveSource(source.format)).forEach(addAdaptiveSource);
225
- };
226
- const parseProgressiveSources = () => {
227
- const progressiveSource = kalturaSources.find(source => {
228
- //match progressive source with supported protocol(http/s)
229
- return isProgressiveSource(source.format) && source.getProtocol(OVPProviderParser._getBaseProtocol()) !== '';
230
- });
231
- sources.progressive = OVPProviderParser._parseProgressiveSources(progressiveSource, playbackContext, ks, partnerId, uiConfId, entry.id);
232
- };
233
-
234
- const parseImageSources = () => {
235
- sources.image.push(new ImageSource(entry));
236
- };
237
-
238
- const parseExternalMedia = () => {
239
- const mediaSource = new MediaSource();
240
- mediaSource.mimetype = 'video/youtube';
241
- mediaSource.url = entry.referenceId;
242
- mediaSource.id = entry.id + '_youtube';
243
- sources.progressive.push(mediaSource);
244
- };
245
-
246
- if (entry.type === KalturaMediaEntry.EntryType.EXTERNAL_MEDIA.value) {
247
- parseExternalMedia();
248
- } else if (entry.entryType === KalturaMediaEntry.MediaType.IMAGE.value) {
249
- parseImageSources();
250
- } else if (kalturaSources && kalturaSources.length > 0) {
251
- parseAdaptiveSources();
252
- parseProgressiveSources();
253
- }
254
- return sources;
255
- }
256
-
257
- /**
258
- * Returns a parsed adaptive source
259
- * @function _parseAdaptiveSource
260
- * @param {KalturaPlaybackSource} kalturaSource - A kaltura source
261
- * @param {KalturaPlaybackContext} playbackContext - The playback context
262
- * @param {string} ks - The ks
263
- * @param {number} partnerId - The partner ID
264
- * @param {number} uiConfId - The uiConf ID
265
- * @param {string} entryId - The entry id
266
- * @returns {?MediaSource} - The parsed adaptive kalturaSource
267
- * @static
268
- * @private
269
- */
270
- static _parseAdaptiveSource(
271
- kalturaSource: ?KalturaPlaybackSource,
272
- playbackContext: KalturaPlaybackContext,
273
- ks: string,
274
- partnerId: number,
275
- uiConfId: ?number,
276
- entryId: string
277
- ): ?MediaSource {
278
- const mediaSource: MediaSource = new MediaSource();
279
- if (kalturaSource) {
280
- let playUrl: string = '';
281
- const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);
282
- const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());
283
- const deliveryProfileId = kalturaSource.deliveryProfileId;
284
- const format = kalturaSource.format;
285
- let extension: string = '';
286
- if (mediaFormat) {
287
- extension = mediaFormat.pathExt;
288
- mediaSource.mimetype = mediaFormat.mimeType;
289
- }
290
- // in case playbackSource doesn't have flavors we don't need to build the url and we'll use the provided one.
291
- if (kalturaSource.hasFlavorIds()) {
292
- if (!extension && playbackContext.flavorAssets && playbackContext.flavorAssets.length > 0) {
293
- extension = playbackContext.flavorAssets[0].fileExt;
294
- }
295
- playUrl = PlaySourceUrlBuilder.build({
296
- entryId,
297
- flavorIds: kalturaSource.flavorIds,
298
- format,
299
- ks,
300
- partnerId,
301
- uiConfId,
302
- extension,
303
- protocol
304
- });
305
- } else {
306
- playUrl = OVPProviderParser.addKsToUrl(kalturaSource.url, ks);
307
- }
308
- if (!playUrl) {
309
- const message = `failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}`;
310
- OVPProviderParser._logger.warn(message);
311
- return null;
312
- }
313
- mediaSource.url = playUrl;
314
- mediaSource.id = entryId + '_' + deliveryProfileId + ',' + format;
315
- if (kalturaSource.hasDrmData()) {
316
- const drmParams: Array<Drm> = [];
317
- kalturaSource.drm.forEach(drm => {
318
- drmParams.push(new Drm(drm.licenseURL, KalturaDrmPlaybackPluginData.Scheme[drm.scheme], drm.certificate));
319
- });
320
- mediaSource.drmData = drmParams;
321
- }
322
- }
323
- return mediaSource;
324
- }
325
-
326
- /**
327
- * Returns parsed progressive sources
328
- * @function _parseProgressiveSources
329
- * @param {KalturaPlaybackSource} kalturaSource - A kaltura source
330
- * @param {KalturaPlaybackContext} playbackContext - The playback context
331
- * @param {string} ks - The ks
332
- * @param {number} partnerId - The partner ID
333
- * @param {number} uiConfId - The uiConf ID
334
- * @param {string} entryId - The entry id
335
- * @returns {Array<MediaSource>} - The parsed progressive kalturaSources
336
- * @static
337
- * @private
338
- */
339
- static _parseProgressiveSources(
340
- kalturaSource: ?KalturaPlaybackSource,
341
- playbackContext: KalturaPlaybackContext,
342
- ks: string,
343
- partnerId: number,
344
- uiConfId: ?number,
345
- entryId: string
346
- ): Array<MediaSource> {
347
- const videoSources: Array<MediaSource> = [];
348
- const audioSources: Array<MediaSource> = [];
349
- if (kalturaSource) {
350
- const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());
351
- const format = kalturaSource.format;
352
- const deliveryProfileId = kalturaSource.deliveryProfileId;
353
- const sourceId = deliveryProfileId + ',' + format;
354
- playbackContext.flavorAssets.map(flavor => {
355
- const mediaSource: MediaSource = new MediaSource();
356
- mediaSource.id = flavor.id + sourceId;
357
- mediaSource.mimetype = flavor.fileExt === 'mp3' ? 'audio/mp3' : 'video/mp4';
358
- mediaSource.height = flavor.height;
359
- mediaSource.width = flavor.width;
360
- mediaSource.bandwidth = flavor.bitrate * 1024;
361
- mediaSource.label = flavor.label || flavor.language;
362
- const playUrl = PlaySourceUrlBuilder.build({
363
- entryId,
364
- flavorIds: flavor.id,
365
- format,
366
- ks,
367
- partnerId: partnerId,
368
- uiConfId: uiConfId,
369
- extension: flavor.fileExt,
370
- protocol
371
- });
372
- if (playUrl === '') {
373
- OVPProviderParser._logger.warn(`failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}.`);
374
- return null;
375
- } else {
376
- mediaSource.url = playUrl;
377
- if (flavor.height && flavor.width) {
378
- videoSources.push(mediaSource);
379
- } else {
380
- audioSources.push(mediaSource);
381
- }
382
- }
383
- });
384
- }
385
- //If we have only audio flavors return them, otherwise return video flavors
386
- return audioSources.length && !videoSources.length ? audioSources : videoSources;
387
- }
388
-
389
- /**
390
- * Ovp metadata parser
391
- * @function _parseMetaData
392
- * @param {KalturaMetadataListResponse} metadataList The metadata list
393
- * @returns {Object} Parsed metadata
394
- * @static
395
- * @private
396
- */
397
- static _parseMetadata(metadataList: ?KalturaMetadataListResponse): Object {
398
- const metadata = {};
399
- if (metadataList && metadataList.metas && metadataList.metas.length > 0) {
400
- metadataList.metas.forEach(meta => {
401
- if (meta.xml) {
402
- let metaXml: Object;
403
- const domParser: DOMParser = new DOMParser();
404
- meta.xml = meta.xml.replace(/\r?\n|\r/g, '');
405
- meta.xml = meta.xml.replace(/>\s*/g, '>');
406
- meta.xml = meta.xml.replace(/>\s*/g, '>');
407
- metaXml = domParser.parseFromString(meta.xml, 'text/xml');
408
- const metasObj: Object = XmlParser.xmlToJson(metaXml);
409
- const metaKeys = Object.keys(metasObj.metadata);
410
- metaKeys.forEach(key => {
411
- metadata[key] = metasObj.metadata[key]['#text'];
412
- });
413
- }
414
- });
415
- }
416
- return metadata;
417
- }
418
-
419
- /**
420
- * Returns the base protocol
421
- * @function _getBaseProtocol
422
- * @returns {string} - The base protocol
423
- * @static
424
- * @private
425
- */
426
- static _getBaseProtocol(): string {
427
- const config = OVPConfiguration.get();
428
- const protocolRegex = /^https?:/;
429
- const result = protocolRegex.exec(config.cdnUrl);
430
- const protocol = result ? result[0] : document.location.protocol;
431
- if (typeof protocol === 'string') {
432
- return protocol.slice(0, -1); // remove ':' from the end
433
- }
434
- return 'https';
435
- }
436
-
437
- static hasBlockAction(response: OVPMediaEntryLoaderResponse): boolean {
438
- return response.playBackContextResult.hasBlockAction();
439
- }
440
-
441
- static getBlockAction(response: OVPMediaEntryLoaderResponse): ?KalturaRuleAction {
442
- return response.playBackContextResult.getBlockAction();
443
- }
444
-
445
- static getErrorMessages(response: OVPMediaEntryLoaderResponse): Array<KalturaAccessControlMessage> {
446
- return response.playBackContextResult.getErrorMessages();
447
- }
448
- }
449
-
450
- export const addKsToUrl = OVPProviderParser.addKsToUrl;
451
- export default OVPProviderParser;