@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.
- package/CHANGELOG.md +4 -0
- package/dist/playkit-analytics-service.js +2 -0
- package/dist/playkit-analytics-service.js.map +1 -0
- package/dist/playkit-bookmark-service.js +2 -0
- package/dist/playkit-bookmark-service.js.map +1 -0
- package/dist/playkit-ott-provider.js +2 -0
- package/dist/playkit-ott-provider.js.map +1 -0
- package/dist/playkit-ovp-provider.js +2 -0
- package/dist/playkit-ovp-provider.js.map +1 -0
- package/dist/playkit-stats-service.js +2 -0
- package/dist/playkit-stats-service.js.map +1 -0
- package/package.json +1 -1
- package/.babelrc +0 -22
- package/.editorconfig +0 -10
- package/.eslintignore +0 -3
- package/.eslintrc.json +0 -26
- package/.flowconfig +0 -5
- package/.github/ISSUE_TEMPLATE.md +0 -28
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -12
- package/.github/workflows/run_canary_full_flow.yaml +0 -28
- package/.github/workflows/run_prod.yaml +0 -24
- package/.github/workflows/run_tests.yaml +0 -24
- package/.prettierignore +0 -7
- package/.prettierrc +0 -12
- package/docs/configuration.md +0 -225
- package/karma.conf.js +0 -42
- package/src/entities/bumper.js +0 -23
- package/src/entities/drm.js +0 -46
- package/src/entities/entry-list.js +0 -15
- package/src/entities/image-source.js +0 -37
- package/src/entities/media-entry.js +0 -96
- package/src/entities/media-format.js +0 -46
- package/src/entities/media-source.js +0 -70
- package/src/entities/media-sources.js +0 -79
- package/src/entities/playlist.js +0 -37
- package/src/index.html +0 -11
- package/src/k-provider/common/base-provider-parser.js +0 -0
- package/src/k-provider/common/base-provider.js +0 -110
- package/src/k-provider/common/base-service-result.js +0 -57
- package/src/k-provider/common/data-loader-manager.js +0 -115
- package/src/k-provider/common/multi-request-builder.js +0 -112
- package/src/k-provider/common/response-types/kaltura-access-control-message.js +0 -22
- package/src/k-provider/common/response-types/kaltura-drm-playback-plugin-data.js +0 -39
- package/src/k-provider/ott/config.js +0 -22
- package/src/k-provider/ott/index.js +0 -15
- package/src/k-provider/ott/loaders/asset-list-loader.js +0 -68
- package/src/k-provider/ott/loaders/asset-loader.js +0 -69
- package/src/k-provider/ott/loaders/data-loader-manager.js +0 -15
- package/src/k-provider/ott/loaders/session-loader.js +0 -62
- package/src/k-provider/ott/provider-parser.js +0 -282
- package/src/k-provider/ott/provider.js +0 -242
- package/src/k-provider/ott/response-types/kaltura-asset.js +0 -79
- package/src/k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js +0 -28
- package/src/k-provider/ott/response-types/kaltura-playback-context.js +0 -74
- package/src/k-provider/ott/response-types/kaltura-playback-source.js +0 -63
- package/src/k-provider/ott/response-types/kaltura-rule-action.js +0 -26
- package/src/k-provider/ott/services/asset-service.js +0 -50
- package/src/k-provider/ott/services/bookmark/bookmark-service.js +0 -49
- package/src/k-provider/ott/services/bookmark/index.js +0 -12
- package/src/k-provider/ott/services/ott-service.js +0 -34
- package/src/k-provider/ott/services/user-service.js +0 -32
- package/src/k-provider/ovp/config.js +0 -28
- package/src/k-provider/ovp/external-captions-builder.js +0 -38
- package/src/k-provider/ovp/index.js +0 -13
- package/src/k-provider/ovp/loaders/data-loader-manager.js +0 -17
- package/src/k-provider/ovp/loaders/entry-list-loader.js +0 -69
- package/src/k-provider/ovp/loaders/media-entry-loader.js +0 -84
- package/src/k-provider/ovp/loaders/playlist-loader.js +0 -66
- package/src/k-provider/ovp/loaders/session-loader.js +0 -62
- package/src/k-provider/ovp/loaders/ui-config-loader.js +0 -71
- package/src/k-provider/ovp/play-source-url-builder.js +0 -60
- package/src/k-provider/ovp/provider-parser.js +0 -451
- package/src/k-provider/ovp/provider.js +0 -344
- package/src/k-provider/ovp/regex-action-handler.js +0 -147
- package/src/k-provider/ovp/request-params/base-entry-response-profile.js +0 -29
- package/src/k-provider/ovp/response-types/index.js +0 -18
- package/src/k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js +0 -36
- package/src/k-provider/ovp/response-types/kaltura-base-entry-list-response.js +0 -31
- package/src/k-provider/ovp/response-types/kaltura-bumper.js +0 -26
- package/src/k-provider/ovp/response-types/kaltura-flavor-asset.js +0 -109
- package/src/k-provider/ovp/response-types/kaltura-media-entries.js +0 -23
- package/src/k-provider/ovp/response-types/kaltura-media-entry.js +0 -141
- package/src/k-provider/ovp/response-types/kaltura-metadata-list-response.js +0 -23
- package/src/k-provider/ovp/response-types/kaltura-metadata.js +0 -51
- package/src/k-provider/ovp/response-types/kaltura-playback-context.js +0 -96
- package/src/k-provider/ovp/response-types/kaltura-playback-source.js +0 -90
- package/src/k-provider/ovp/response-types/kaltura-playlist.js +0 -35
- package/src/k-provider/ovp/response-types/kaltura-rule-action.js +0 -28
- package/src/k-provider/ovp/response-types/kaltura-ui-conf-response.js +0 -90
- package/src/k-provider/ovp/services/analytics/analytics-service.js +0 -57
- package/src/k-provider/ovp/services/analytics/index.js +0 -12
- package/src/k-provider/ovp/services/base-entry-service.js +0 -76
- package/src/k-provider/ovp/services/meta-data-service.js +0 -30
- package/src/k-provider/ovp/services/ovp-service.js +0 -33
- package/src/k-provider/ovp/services/playlist-service.js +0 -63
- package/src/k-provider/ovp/services/session-service.js +0 -28
- package/src/k-provider/ovp/services/stats/index.js +0 -12
- package/src/k-provider/ovp/services/stats/stats-service.js +0 -33
- package/src/k-provider/ovp/services/ui-conf-service.js +0 -33
- package/src/util/clone.js +0 -23
- package/src/util/error/category.js +0 -12
- package/src/util/error/code.js +0 -79
- package/src/util/error/error.js +0 -48
- package/src/util/error/severity.js +0 -23
- package/src/util/logger.js +0 -108
- package/src/util/param.js +0 -45
- package/src/util/request-builder.js +0 -187
- package/src/util/xml-parser.js +0 -40
- package/test/.eslintrc.json +0 -9
- package/test/setup/karma.js +0 -5
- package/test/setup/load-specs.js +0 -13
- package/test/setup/prepare-test-environment.js +0 -17
- package/test/src/k-provider/ott/be-data.js +0 -3306
- package/test/src/k-provider/ott/media-config-data.js +0 -793
- package/test/src/k-provider/ott/provider-parser.spec.js +0 -30
- package/test/src/k-provider/ott/provider.spec.js +0 -384
- package/test/src/k-provider/ott/services/bookmark-service.spec.js +0 -38
- package/test/src/k-provider/ovp/be-data.js +0 -3932
- package/test/src/k-provider/ovp/external-captions-builder.spec.js +0 -59
- package/test/src/k-provider/ovp/media-config-data.js +0 -1509
- package/test/src/k-provider/ovp/playback-sources-data.js +0 -229
- package/test/src/k-provider/ovp/provider-parser-data.js +0 -142
- package/test/src/k-provider/ovp/provider-parser.spec.js +0 -96
- package/test/src/k-provider/ovp/provider.spec.js +0 -1075
- package/test/src/k-provider/ovp/regex-action-handler-data.js +0 -794
- package/test/src/k-provider/ovp/regex-action-handler.spec.js +0 -93
- package/test/src/k-provider/ovp/services/analytics-service.spec.js +0 -62
- package/test/src/k-provider/ovp/services/stats-service.spec.js +0 -37
- package/test/src/util/param.spec.js +0 -23
- package/webpack.config.js +0 -85
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
//@flow
|
|
2
|
-
import getLogger from '../../util/logger';
|
|
3
|
-
import KalturaPlaybackSource from './response-types/kaltura-playback-source';
|
|
4
|
-
import KalturaPlaybackContext from './response-types/kaltura-playback-context';
|
|
5
|
-
import KalturaAsset from './response-types/kaltura-asset';
|
|
6
|
-
import MediaEntry from '../../entities/media-entry';
|
|
7
|
-
import Drm from '../../entities/drm';
|
|
8
|
-
import MediaSource from '../../entities/media-source';
|
|
9
|
-
import MediaSources from '../../entities/media-sources';
|
|
10
|
-
import EntryList from '../../entities/entry-list';
|
|
11
|
-
import Bumper from '../../entities/bumper';
|
|
12
|
-
import {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';
|
|
13
|
-
import {KalturaDrmPlaybackPluginData} from '../common/response-types/kaltura-drm-playback-plugin-data';
|
|
14
|
-
import KalturaRuleAction from './response-types/kaltura-rule-action';
|
|
15
|
-
import {KalturaAccessControlMessage} from '../common/response-types/kaltura-access-control-message';
|
|
16
|
-
import type {OTTAssetLoaderResponse} from './loaders/asset-loader';
|
|
17
|
-
import KalturaBumpersPlaybackPluginData from './response-types/kaltura-bumper-playback-plugin-data';
|
|
18
|
-
|
|
19
|
-
const LIVE_ASST_OBJECT_TYPE: string = 'KalturaLiveAsset';
|
|
20
|
-
|
|
21
|
-
const MediaTypeCombinations: {[mediaType: string]: Object} = {
|
|
22
|
-
[KalturaAsset.Type.MEDIA]: {
|
|
23
|
-
[KalturaPlaybackContext.Type.TRAILER]: () => ({type: MediaEntry.Type.VOD}),
|
|
24
|
-
[KalturaPlaybackContext.Type.PLAYBACK]: mediaAssetData => {
|
|
25
|
-
if (mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {
|
|
26
|
-
return {type: MediaEntry.Type.LIVE, dvrStatus: mediaAssetData.enableTrickPlay ? MediaEntry.DvrStatus.ON : MediaEntry.DvrStatus.OFF};
|
|
27
|
-
} else if (parseInt(mediaAssetData.externalIds) > 0) {
|
|
28
|
-
return {type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.OFF};
|
|
29
|
-
}
|
|
30
|
-
return {type: MediaEntry.Type.VOD};
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
[KalturaAsset.Type.EPG]: {
|
|
34
|
-
[KalturaPlaybackContext.Type.CATCHUP]: () => ({type: MediaEntry.Type.VOD}),
|
|
35
|
-
[KalturaPlaybackContext.Type.START_OVER]: () => ({type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.ON})
|
|
36
|
-
},
|
|
37
|
-
[KalturaAsset.Type.RECORDING]: {
|
|
38
|
-
[KalturaPlaybackContext.Type.PLAYBACK]: () => ({type: MediaEntry.Type.VOD})
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export default class OTTProviderParser {
|
|
43
|
-
static _logger = getLogger('OTTProviderParser');
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Returns parsed media entry by given OTT response objects.
|
|
47
|
-
* @function getMediaEntry
|
|
48
|
-
* @param {any} assetResponse - The asset response.
|
|
49
|
-
* @param {Object} requestData - The request data object.
|
|
50
|
-
* @returns {MediaEntry} - The media entry
|
|
51
|
-
* @static
|
|
52
|
-
* @public
|
|
53
|
-
*/
|
|
54
|
-
static getMediaEntry(assetResponse: any, requestData: Object): MediaEntry {
|
|
55
|
-
const mediaEntry = new MediaEntry();
|
|
56
|
-
OTTProviderParser._fillBaseData(mediaEntry, assetResponse, requestData);
|
|
57
|
-
const playbackContext = assetResponse.playBackContextResult;
|
|
58
|
-
const mediaAsset = assetResponse.mediaDataResult;
|
|
59
|
-
const kalturaSources = playbackContext.sources;
|
|
60
|
-
const filteredKalturaSources = OTTProviderParser._filterSourcesByFormats(kalturaSources, requestData.formats);
|
|
61
|
-
mediaEntry.sources = OTTProviderParser._getParsedSources(filteredKalturaSources);
|
|
62
|
-
const typeData = OTTProviderParser._getMediaType(mediaAsset.data, requestData.mediaType, requestData.contextType);
|
|
63
|
-
mediaEntry.type = typeData.type;
|
|
64
|
-
mediaEntry.dvrStatus = typeData.dvrStatus;
|
|
65
|
-
mediaEntry.duration = Math.max.apply(
|
|
66
|
-
Math,
|
|
67
|
-
kalturaSources.map(source => source.duration)
|
|
68
|
-
);
|
|
69
|
-
return mediaEntry;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Returns parsed entry list by given OTT response objects
|
|
74
|
-
* @function getEntryList
|
|
75
|
-
* @param {any} playlistResponse - response
|
|
76
|
-
* @param {Array<ProviderMediaInfoObject>} requestEntries - entries list
|
|
77
|
-
* @returns {Playlist} - The entry list
|
|
78
|
-
* @static
|
|
79
|
-
* @public
|
|
80
|
-
*/
|
|
81
|
-
static getEntryList(playlistResponse: any, requestEntries: Array<ProviderMediaInfoObject>): EntryList {
|
|
82
|
-
const entryList = new EntryList();
|
|
83
|
-
const playlistItems = playlistResponse.playlistItems.entries;
|
|
84
|
-
playlistItems.forEach(entry => {
|
|
85
|
-
const mediaEntry = new MediaEntry();
|
|
86
|
-
const requestData = requestEntries.find(requestEntry => requestEntry.entryId === entry.mediaDataResult.id);
|
|
87
|
-
OTTProviderParser._fillBaseData(mediaEntry, entry, requestData);
|
|
88
|
-
entryList.items.push(mediaEntry);
|
|
89
|
-
});
|
|
90
|
-
return entryList;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Returns parsed bumper by given OTT response objects.
|
|
95
|
-
* @function getBumper
|
|
96
|
-
* @param {any} assetResponse - The asset response.
|
|
97
|
-
* @returns {?Bumper} - The bumper
|
|
98
|
-
* @static
|
|
99
|
-
* @public
|
|
100
|
-
*/
|
|
101
|
-
static getBumper(assetResponse: any): ?Bumper {
|
|
102
|
-
const playbackContext = assetResponse.playBackContextResult;
|
|
103
|
-
const progressiveBumper = playbackContext.plugins.find(
|
|
104
|
-
bumper => bumper.streamertype === KalturaBumpersPlaybackPluginData.StreamerType.PROGRESSIVE
|
|
105
|
-
);
|
|
106
|
-
if (progressiveBumper) {
|
|
107
|
-
return new Bumper(progressiveBumper);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
static _fillBaseData(mediaEntry: MediaEntry, assetResponse: any, requestData: any) {
|
|
112
|
-
const mediaAsset = assetResponse.mediaDataResult;
|
|
113
|
-
const metaData = OTTProviderParser.reconstructMetadata(mediaAsset);
|
|
114
|
-
metaData.description = mediaAsset.description;
|
|
115
|
-
metaData.name = mediaAsset.name;
|
|
116
|
-
if (mediaAsset.data.entryId) metaData.entryId = mediaAsset.data.entryId;
|
|
117
|
-
if (mediaAsset.data.epgId) metaData.epgId = mediaAsset.data.epgId;
|
|
118
|
-
if (mediaAsset.data.recordingId) metaData.recordingId = mediaAsset.data.recordingId;
|
|
119
|
-
if (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;
|
|
120
|
-
if (requestData && requestData.contextType) metaData.contextType = requestData.contextType;
|
|
121
|
-
mediaEntry.metadata = metaData;
|
|
122
|
-
mediaEntry.poster = OTTProviderParser._getPoster(mediaAsset.pictures);
|
|
123
|
-
mediaEntry.id = mediaAsset.id;
|
|
124
|
-
return mediaEntry;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* reconstruct the metadata
|
|
129
|
-
* @param {Object} mediaAsset the mediaAsset that contains the response with the metadata.
|
|
130
|
-
* @returns {Object} reconstructed metadata object
|
|
131
|
-
*/
|
|
132
|
-
static reconstructMetadata(mediaAsset: Object): Object {
|
|
133
|
-
const metadata = {
|
|
134
|
-
metas: OTTProviderParser.addToMetaObject(mediaAsset.metas),
|
|
135
|
-
tags: OTTProviderParser.addToMetaObject(mediaAsset.tags)
|
|
136
|
-
};
|
|
137
|
-
return metadata;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* transform an array of [{key: value},{key: value}...] to an object
|
|
142
|
-
* @param {Array<Object>} list a list of objects
|
|
143
|
-
* @returns {Object} an mapped object of the arrayed list.
|
|
144
|
-
*/
|
|
145
|
-
static addToMetaObject(list: Array<Object>): Object {
|
|
146
|
-
let categoryObj = {};
|
|
147
|
-
if (list) {
|
|
148
|
-
list.forEach(item => {
|
|
149
|
-
categoryObj[item.key] = item.value;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
return categoryObj;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Gets the poster url without width and height.
|
|
157
|
-
* @param {Array<Object>} pictures - Media pictures.
|
|
158
|
-
* @returns {string | Array<Object>} - Poster base url or array of poster candidates.
|
|
159
|
-
* @private
|
|
160
|
-
*/
|
|
161
|
-
static _getPoster(pictures: Array<Object>): string | Array<Object> {
|
|
162
|
-
if (pictures && pictures.length > 0) {
|
|
163
|
-
const picObj = pictures[0];
|
|
164
|
-
const url = picObj.url;
|
|
165
|
-
// Search for thumbnail service
|
|
166
|
-
const regex = /.*\/thumbnail\/.*(?:width|height)\/\d+\/(?:height|width)\/\d+/;
|
|
167
|
-
if (regex.test(url)) {
|
|
168
|
-
return url;
|
|
169
|
-
}
|
|
170
|
-
return pictures.map(pic => ({url: pic.url, width: pic.width, height: pic.height}));
|
|
171
|
-
}
|
|
172
|
-
return '';
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Gets the media type (LIVE/VOD)
|
|
177
|
-
* @param {Object} mediaAssetData - The media asset data.
|
|
178
|
-
* @param {string} mediaType - The asset media type.
|
|
179
|
-
* @param {string} contextType - The asset context type.
|
|
180
|
-
* @returns {Object} - The type data object.
|
|
181
|
-
* @private
|
|
182
|
-
*/
|
|
183
|
-
static _getMediaType(mediaAssetData: Object, mediaType: string, contextType: string): Object {
|
|
184
|
-
let typeData = {type: MediaEntry.Type.UNKNOWN};
|
|
185
|
-
if (MediaTypeCombinations[mediaType] && MediaTypeCombinations[mediaType][contextType]) {
|
|
186
|
-
typeData = MediaTypeCombinations[mediaType][contextType](mediaAssetData);
|
|
187
|
-
}
|
|
188
|
-
return typeData;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Filtered the kalturaSources array by device type.
|
|
193
|
-
* @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources.
|
|
194
|
-
* @param {Array<string>} formats - Partner device formats.
|
|
195
|
-
* @returns {Array<KalturaPlaybackSource>} - Filtered kalturaSources array.
|
|
196
|
-
* @private
|
|
197
|
-
*/
|
|
198
|
-
static _filterSourcesByFormats(kalturaSources: Array<KalturaPlaybackSource>, formats: Array<string>): Array<KalturaPlaybackSource> {
|
|
199
|
-
if (formats.length > 0) {
|
|
200
|
-
kalturaSources = kalturaSources.filter(source => formats.includes(source.type));
|
|
201
|
-
}
|
|
202
|
-
return kalturaSources;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Returns the parsed sources
|
|
207
|
-
* @function _getParsedSources
|
|
208
|
-
* @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources
|
|
209
|
-
* @param {Object} playbackContext - The playback context
|
|
210
|
-
* @return {MediaSources} - A media sources
|
|
211
|
-
* @static
|
|
212
|
-
* @private
|
|
213
|
-
*/
|
|
214
|
-
static _getParsedSources(kalturaSources: Array<KalturaPlaybackSource>): MediaSources {
|
|
215
|
-
const sources = new MediaSources();
|
|
216
|
-
const addAdaptiveSource = (source: KalturaPlaybackSource) => {
|
|
217
|
-
const parsedSource = OTTProviderParser._parseAdaptiveSource(source);
|
|
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
|
-
kalturaSources.filter(source => isProgressiveSource(source.format)).forEach(addAdaptiveSource);
|
|
228
|
-
};
|
|
229
|
-
if (kalturaSources && kalturaSources.length > 0) {
|
|
230
|
-
parseAdaptiveSources();
|
|
231
|
-
parseProgressiveSources();
|
|
232
|
-
}
|
|
233
|
-
return sources;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Returns a parsed adaptive source
|
|
238
|
-
* @function _parseAdaptiveSource
|
|
239
|
-
* @param {KalturaPlaybackSource} kalturaSource - A kaltura source
|
|
240
|
-
* @returns {?MediaSource} - The parsed adaptive kalturaSource
|
|
241
|
-
* @static
|
|
242
|
-
* @private
|
|
243
|
-
*/
|
|
244
|
-
static _parseAdaptiveSource(kalturaSource: ?KalturaPlaybackSource): ?MediaSource {
|
|
245
|
-
const mediaSource = new MediaSource();
|
|
246
|
-
if (kalturaSource) {
|
|
247
|
-
const playUrl = kalturaSource.url;
|
|
248
|
-
const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);
|
|
249
|
-
if (mediaFormat) {
|
|
250
|
-
mediaSource.mimetype = mediaFormat.mimeType;
|
|
251
|
-
}
|
|
252
|
-
if (!playUrl) {
|
|
253
|
-
OTTProviderParser._logger.error(
|
|
254
|
-
`failed to create play url from source, discarding source: (${kalturaSource.fileId}), ${kalturaSource.format}.`
|
|
255
|
-
);
|
|
256
|
-
return null;
|
|
257
|
-
}
|
|
258
|
-
mediaSource.url = playUrl;
|
|
259
|
-
mediaSource.id = kalturaSource.fileId + ',' + kalturaSource.format;
|
|
260
|
-
if (kalturaSource.hasDrmData()) {
|
|
261
|
-
const drmParams: Array<Drm> = [];
|
|
262
|
-
kalturaSource.drm.forEach(drm => {
|
|
263
|
-
drmParams.push(new Drm(drm.licenseURL, KalturaDrmPlaybackPluginData.Scheme[drm.scheme], drm.certificate));
|
|
264
|
-
});
|
|
265
|
-
mediaSource.drmData = drmParams;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return mediaSource;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
static hasBlockAction(response: OTTAssetLoaderResponse): boolean {
|
|
272
|
-
return response.playBackContextResult.hasBlockAction();
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
static getBlockAction(response: OTTAssetLoaderResponse): ?KalturaRuleAction {
|
|
276
|
-
return response.playBackContextResult.getBlockAction();
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
static getErrorMessages(response: OTTAssetLoaderResponse): Array<KalturaAccessControlMessage> {
|
|
280
|
-
return response.playBackContextResult.getErrorMessages();
|
|
281
|
-
}
|
|
282
|
-
}
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import BaseProvider from '../common/base-provider';
|
|
3
|
-
import getLogger from '../../util/logger';
|
|
4
|
-
import OTTConfiguration from './config';
|
|
5
|
-
import OTTDataLoaderManager from './loaders/data-loader-manager';
|
|
6
|
-
import OTTSessionLoader from './loaders/session-loader';
|
|
7
|
-
import OTTAssetLoader from './loaders/asset-loader';
|
|
8
|
-
import OTTAssetListLoader from './loaders/asset-list-loader';
|
|
9
|
-
import OTTProviderParser from './provider-parser';
|
|
10
|
-
import KalturaAsset from './response-types/kaltura-asset';
|
|
11
|
-
import KalturaPlaybackContext from './response-types/kaltura-playback-context';
|
|
12
|
-
import MediaEntry from '../../entities/media-entry';
|
|
13
|
-
import Error from '../../util/error/error';
|
|
14
|
-
|
|
15
|
-
export default class OTTProvider extends BaseProvider<OTTProviderMediaInfoObject> {
|
|
16
|
-
/**
|
|
17
|
-
* @constructor
|
|
18
|
-
* @param {ProviderOptionsObject} options - provider options
|
|
19
|
-
* @param {string} playerVersion - player version
|
|
20
|
-
*/
|
|
21
|
-
constructor(options: ProviderOptionsObject, playerVersion: string) {
|
|
22
|
-
super(options, playerVersion);
|
|
23
|
-
this._logger = getLogger('OTTProvider');
|
|
24
|
-
OTTConfiguration.set(options.env);
|
|
25
|
-
this._networkRetryConfig = Object.assign(this._networkRetryConfig, options.networkRetryParameters);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
get env() {
|
|
29
|
-
return OTTConfiguration.get();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Gets the backend media config.
|
|
34
|
-
* @param {OTTProviderMediaInfoObject} mediaInfo - ott media info
|
|
35
|
-
* @returns {Promise<ProviderMediaConfigObject>} - The provider media config
|
|
36
|
-
*/
|
|
37
|
-
getMediaConfig(mediaInfo: OTTProviderMediaInfoObject): Promise<ProviderMediaConfigObject> {
|
|
38
|
-
if (mediaInfo.ks) {
|
|
39
|
-
this.ks = mediaInfo.ks;
|
|
40
|
-
this._isAnonymous = false;
|
|
41
|
-
}
|
|
42
|
-
this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const entryId = mediaInfo.entryId;
|
|
45
|
-
if (entryId) {
|
|
46
|
-
let ks: string = this.ks;
|
|
47
|
-
if (!ks) {
|
|
48
|
-
ks = '{1:result:ks}';
|
|
49
|
-
this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});
|
|
50
|
-
}
|
|
51
|
-
const contextType = mediaInfo.contextType || KalturaPlaybackContext.Type.PLAYBACK;
|
|
52
|
-
const mediaType = mediaInfo.mediaType || KalturaAsset.Type.MEDIA;
|
|
53
|
-
const assetReferenceType = mediaInfo.assetReferenceType || KalturaAsset.AssetReferenceType.MEDIA;
|
|
54
|
-
const playbackContext: ProviderPlaybackContextOptions = {
|
|
55
|
-
mediaProtocol: mediaInfo.protocol,
|
|
56
|
-
assetFileIds: mediaInfo.fileIds,
|
|
57
|
-
context: contextType
|
|
58
|
-
};
|
|
59
|
-
if (mediaInfo.streamerType) {
|
|
60
|
-
playbackContext.streamerType = mediaInfo.streamerType;
|
|
61
|
-
}
|
|
62
|
-
if (mediaInfo.urlType) {
|
|
63
|
-
playbackContext.urlType = mediaInfo.urlType;
|
|
64
|
-
}
|
|
65
|
-
if (mediaInfo.adapterData) {
|
|
66
|
-
playbackContext.adapterData = mediaInfo.adapterData;
|
|
67
|
-
}
|
|
68
|
-
this._dataLoader.add(OTTAssetLoader, {
|
|
69
|
-
entryId: entryId,
|
|
70
|
-
ks: ks,
|
|
71
|
-
type: mediaType,
|
|
72
|
-
playbackContext: playbackContext,
|
|
73
|
-
assetReferenceType: assetReferenceType
|
|
74
|
-
});
|
|
75
|
-
const requestData = {
|
|
76
|
-
contextType: contextType,
|
|
77
|
-
mediaType: mediaType,
|
|
78
|
-
formats: mediaInfo.formats || []
|
|
79
|
-
};
|
|
80
|
-
return this._dataLoader.fetchData().then(
|
|
81
|
-
response => {
|
|
82
|
-
try {
|
|
83
|
-
resolve(this._parseDataFromResponse(response, requestData));
|
|
84
|
-
} catch (err) {
|
|
85
|
-
reject(err);
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
err => {
|
|
89
|
-
reject(err);
|
|
90
|
-
}
|
|
91
|
-
);
|
|
92
|
-
} else {
|
|
93
|
-
reject(new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.MISSING_MANDATORY_PARAMS, {message: 'missing entry id'}));
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
_parseDataFromResponse(data: Map<string, Function>, requestData: Object): ProviderMediaConfigObject {
|
|
99
|
-
this._logger.debug('Data parsing started');
|
|
100
|
-
const mediaConfig: ProviderMediaConfigObject = {
|
|
101
|
-
session: {
|
|
102
|
-
isAnonymous: this._isAnonymous,
|
|
103
|
-
partnerId: this.partnerId
|
|
104
|
-
},
|
|
105
|
-
sources: this._getDefaultSourcesObject(),
|
|
106
|
-
plugins: {}
|
|
107
|
-
};
|
|
108
|
-
if (this.uiConfId) {
|
|
109
|
-
mediaConfig.session.uiConfId = this.uiConfId;
|
|
110
|
-
}
|
|
111
|
-
if (data) {
|
|
112
|
-
if (data.has(OTTSessionLoader.id)) {
|
|
113
|
-
const sessionLoader = data.get(OTTSessionLoader.id);
|
|
114
|
-
if (sessionLoader && sessionLoader.response) {
|
|
115
|
-
mediaConfig.session.ks = sessionLoader.response;
|
|
116
|
-
}
|
|
117
|
-
} else {
|
|
118
|
-
mediaConfig.session.ks = this.ks;
|
|
119
|
-
}
|
|
120
|
-
if (data.has(OTTAssetLoader.id)) {
|
|
121
|
-
const assetLoader = data.get(OTTAssetLoader.id);
|
|
122
|
-
if (assetLoader && assetLoader.response && Object.keys(assetLoader.response).length) {
|
|
123
|
-
const response = (assetLoader: OTTAssetLoader).response;
|
|
124
|
-
if (OTTProviderParser.hasBlockAction(response)) {
|
|
125
|
-
throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.BLOCK_ACTION, {
|
|
126
|
-
action: OTTProviderParser.getBlockAction(response),
|
|
127
|
-
messages: OTTProviderParser.getErrorMessages(response)
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
const mediaEntry = OTTProviderParser.getMediaEntry(response, requestData);
|
|
131
|
-
Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));
|
|
132
|
-
this._verifyHasSources(mediaConfig.sources);
|
|
133
|
-
const bumper = OTTProviderParser.getBumper(response);
|
|
134
|
-
if (bumper) {
|
|
135
|
-
Object.assign(mediaConfig.plugins, {bumper});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
this._logger.debug('Data parsing finished', mediaConfig);
|
|
141
|
-
return mediaConfig;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Gets playlist config from entry list.
|
|
146
|
-
* @param {ProviderEntryListObject} entryListInfo - ott entry list info
|
|
147
|
-
* @returns {Promise<ProviderPlaylistObject>} - The provider playlist config
|
|
148
|
-
*/
|
|
149
|
-
getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {
|
|
150
|
-
if (entryListInfo.ks) {
|
|
151
|
-
this.ks = entryListInfo.ks;
|
|
152
|
-
this._isAnonymous = false;
|
|
153
|
-
}
|
|
154
|
-
this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);
|
|
155
|
-
return new Promise((resolve, reject) => {
|
|
156
|
-
const entries = entryListInfo.entries;
|
|
157
|
-
if (entries && entries.length) {
|
|
158
|
-
let ks: string = this.ks;
|
|
159
|
-
if (!ks) {
|
|
160
|
-
ks = '{1:result:ks}';
|
|
161
|
-
this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});
|
|
162
|
-
}
|
|
163
|
-
this._dataLoader.add(OTTAssetListLoader, {entries, ks});
|
|
164
|
-
this._dataLoader.fetchData(false).then(
|
|
165
|
-
response => {
|
|
166
|
-
resolve(this._parseEntryListDataFromResponse(response, entries));
|
|
167
|
-
},
|
|
168
|
-
err => {
|
|
169
|
-
reject(err);
|
|
170
|
-
}
|
|
171
|
-
);
|
|
172
|
-
} else {
|
|
173
|
-
reject({success: false, data: 'Missing mandatory parameter'});
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
_parseEntryListDataFromResponse(data: Map<string, Function>, requestEntries: Array<ProviderMediaInfoObject>): ProviderPlaylistObject {
|
|
179
|
-
this._logger.debug('Data parsing started');
|
|
180
|
-
const playlistConfig: ProviderPlaylistObject = {
|
|
181
|
-
id: '',
|
|
182
|
-
metadata: {
|
|
183
|
-
name: '',
|
|
184
|
-
description: ''
|
|
185
|
-
},
|
|
186
|
-
poster: '',
|
|
187
|
-
items: []
|
|
188
|
-
};
|
|
189
|
-
if (data && data.has(OTTAssetListLoader.id)) {
|
|
190
|
-
const playlistLoader = data.get(OTTAssetListLoader.id);
|
|
191
|
-
if (playlistLoader && playlistLoader.response) {
|
|
192
|
-
const entryList = OTTProviderParser.getEntryList(playlistLoader.response, requestEntries);
|
|
193
|
-
entryList.items.forEach(i => playlistConfig.items.push({sources: this._getSourcesObject(i)}));
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
this._logger.debug('Data parsing finished', playlistConfig);
|
|
197
|
-
return playlistConfig;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
_getDefaultSourcesObject(): ProviderMediaConfigSourcesObject {
|
|
201
|
-
return {
|
|
202
|
-
hls: [],
|
|
203
|
-
dash: [],
|
|
204
|
-
progressive: [],
|
|
205
|
-
image: [],
|
|
206
|
-
id: '',
|
|
207
|
-
duration: 0,
|
|
208
|
-
type: MediaEntry.Type.UNKNOWN,
|
|
209
|
-
poster: '',
|
|
210
|
-
dvr: false,
|
|
211
|
-
vr: null,
|
|
212
|
-
metadata: {
|
|
213
|
-
name: '',
|
|
214
|
-
description: '',
|
|
215
|
-
tags: ''
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
_getSourcesObject(mediaEntry: MediaEntry) {
|
|
221
|
-
const sourcesObject: ProviderMediaConfigSourcesObject = this._getDefaultSourcesObject();
|
|
222
|
-
const mediaSources = mediaEntry.sources.toJSON();
|
|
223
|
-
sourcesObject.hls = mediaSources.hls;
|
|
224
|
-
sourcesObject.dash = mediaSources.dash;
|
|
225
|
-
sourcesObject.progressive = mediaSources.progressive;
|
|
226
|
-
sourcesObject.id = mediaEntry.id;
|
|
227
|
-
sourcesObject.duration = mediaEntry.duration;
|
|
228
|
-
sourcesObject.type = mediaEntry.type;
|
|
229
|
-
sourcesObject.dvr = !!mediaEntry.dvrStatus;
|
|
230
|
-
sourcesObject.poster = mediaEntry.poster;
|
|
231
|
-
if (
|
|
232
|
-
mediaEntry.metadata &&
|
|
233
|
-
mediaEntry.metadata.metas &&
|
|
234
|
-
typeof mediaEntry.metadata.metas.tags === 'string' &&
|
|
235
|
-
mediaEntry.metadata.metas.tags.indexOf('360') > -1
|
|
236
|
-
) {
|
|
237
|
-
sourcesObject.vr = {};
|
|
238
|
-
}
|
|
239
|
-
Object.assign(sourcesObject.metadata, mediaEntry.metadata);
|
|
240
|
-
return sourcesObject;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
//@flow
|
|
2
|
-
import ServiceResult from '../../common/base-service-result';
|
|
3
|
-
|
|
4
|
-
export default class KalturaAsset extends ServiceResult {
|
|
5
|
-
static Type: {[type: string]: string} = {
|
|
6
|
-
MEDIA: 'media',
|
|
7
|
-
RECORDING: 'recording',
|
|
8
|
-
EPG: 'epg'
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
static AssetReferenceType: {[type: string]: string} = {
|
|
12
|
-
MEDIA: 'media',
|
|
13
|
-
EPG_INTERNAL: 'epg_internal',
|
|
14
|
-
EPG_EXTERNAL: 'epg_external',
|
|
15
|
-
NPVR: 'nPVR'
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* @member - The asset id
|
|
19
|
-
* @type {number}
|
|
20
|
-
*/
|
|
21
|
-
id: number;
|
|
22
|
-
/**
|
|
23
|
-
* @member - The asset name
|
|
24
|
-
* @type {string}
|
|
25
|
-
*/
|
|
26
|
-
name: string = '';
|
|
27
|
-
/**
|
|
28
|
-
* @member - The asset name description
|
|
29
|
-
* @type {string}
|
|
30
|
-
*/
|
|
31
|
-
description: string = '';
|
|
32
|
-
/**
|
|
33
|
-
* @member - The asset tags
|
|
34
|
-
* @type {Array<Object>}
|
|
35
|
-
*/
|
|
36
|
-
tags: Array<Object> = [];
|
|
37
|
-
/**
|
|
38
|
-
* @member - The asset metas
|
|
39
|
-
* @type {Array<Object>}
|
|
40
|
-
*/
|
|
41
|
-
metas: Array<Object> = [];
|
|
42
|
-
/**
|
|
43
|
-
* @member - The asset images
|
|
44
|
-
* @type {Array<any>}
|
|
45
|
-
*/
|
|
46
|
-
pictures: Array<any> = [];
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @constructor
|
|
50
|
-
* @param {Object} response The response
|
|
51
|
-
*/
|
|
52
|
-
constructor(response: Object) {
|
|
53
|
-
super(response);
|
|
54
|
-
if (!this.hasError) {
|
|
55
|
-
this.id = response.id;
|
|
56
|
-
this.name = response.name;
|
|
57
|
-
this.description = response.description;
|
|
58
|
-
this.metas = this._formatTagsMetas(response.metas);
|
|
59
|
-
this.tags = this._formatTagsMetas(response.tags);
|
|
60
|
-
this.pictures = response.images;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
_formatTagsMetas(objectToParse: any): Array<Object> {
|
|
65
|
-
const parsed = [];
|
|
66
|
-
Object.keys(objectToParse).forEach(function (key) {
|
|
67
|
-
if (objectToParse[key].objects) {
|
|
68
|
-
let value = '';
|
|
69
|
-
objectToParse[key].objects.forEach(function (object) {
|
|
70
|
-
value += object.value + '|';
|
|
71
|
-
});
|
|
72
|
-
parsed.push({key: key, value: value});
|
|
73
|
-
} else {
|
|
74
|
-
parsed.push({key: key, value: objectToParse[key].value});
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
return parsed;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
//@flow
|
|
2
|
-
export default class KalturaBumpersPlaybackPluginData {
|
|
3
|
-
static StreamerType: {[type: string]: string} = {
|
|
4
|
-
HLS: 'hls',
|
|
5
|
-
DASH: 'dash',
|
|
6
|
-
PROGRESSIVE: 'progressive'
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @member - The streamer type
|
|
11
|
-
* @type {string}
|
|
12
|
-
*/
|
|
13
|
-
streamertype: string;
|
|
14
|
-
/**
|
|
15
|
-
* @member - The url
|
|
16
|
-
* @type {string}
|
|
17
|
-
*/
|
|
18
|
-
url: string;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @constructor
|
|
22
|
-
* @param {Object} data - The response
|
|
23
|
-
*/
|
|
24
|
-
constructor(data: Object) {
|
|
25
|
-
this.streamertype = data.streamertype;
|
|
26
|
-
this.url = data.url;
|
|
27
|
-
}
|
|
28
|
-
}
|