@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,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;
|