From 93db808d3bc9958241723cd1b3d5a09e47ff4d32 Mon Sep 17 00:00:00 2001 From: "yair.ansbacher" Date: Thu, 18 Feb 2021 16:29:13 +0200 Subject: [PATCH 1/3] fix(FEC-10968): OTT doesn't have default external-stream-redirect-helper --- .../utils/external-stream-redirect-helper.js | 27 ++++++++++++++++++- src/ott/player-defaults.js | 7 +++-- src/ovp/player-defaults.js | 15 ++--------- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/common/utils/external-stream-redirect-helper.js b/src/common/utils/external-stream-redirect-helper.js index 5eb93da41..5a17ddf4b 100644 --- a/src/common/utils/external-stream-redirect-helper.js +++ b/src/common/utils/external-stream-redirect-helper.js @@ -1,4 +1,5 @@ // @flow +import {Utils} from '@playkit-js/playkit-js'; /** * JSONP handler function, returns the direct manifest uri. @@ -35,4 +36,28 @@ function getDirectManifestUri(data: Object, uri: string): string { } return uri; } -export {getDirectManifestUri}; + +/** + * Get the redirect external stream handler. + * @public + * @param {KPOptionsObject} playerOptions - The player config. + * @param {KPOptionsObject} mediaOptions - The media config. + * @returns {void} + */ +function getRedirectExternalStreamsHandler(playerOptions: KPOptionsObject, mediaOptions: KPOptionsObject = {}): Object { + const configObj = {}; + const playerRedirectExternalStreamsHandler = Utils.Object.getPropertyPath(playerOptions, 'sources.options.redirectExternalStreamsHandler'); + const mediaRedirectExternalStreamsHandler = Utils.Object.getPropertyPath(mediaOptions, 'sources.options.redirectExternalStreamsHandler'); + if (typeof playerRedirectExternalStreamsHandler !== 'function' && typeof mediaRedirectExternalStreamsHandler !== 'function') { + Utils.Object.mergeDeep(configObj, { + sources: { + options: { + redirectExternalStreamsHandler: getDirectManifestUri + } + } + }); + } + return configObj; +} + +export {getRedirectExternalStreamsHandler}; diff --git a/src/ott/player-defaults.js b/src/ott/player-defaults.js index 81d94f2f8..49d567f3a 100644 --- a/src/ott/player-defaults.js +++ b/src/ott/player-defaults.js @@ -1,5 +1,6 @@ // @flow import {Utils} from '@playkit-js/playkit-js'; +import {getRedirectExternalStreamsHandler} from '../common/utils/external-stream-redirect-helper'; /** * Sets the default analytics plugin for the ott player. @@ -31,8 +32,10 @@ export function setDefaultAnalyticsPlugin(options: KPOptionsObject): void { /** * get the default config for forcing external stream redirect. * @public + * @param {KPOptionsObject} playerOptions - The player config. + * @param {KPOptionsObject} mediaOptions - The media config. * @returns {Object} - config object */ -export function getDefaultRedirectOptions(): Object { - return {}; +export function getDefaultRedirectOptions(playerOptions: KPOptionsObject, mediaOptions: KPOptionsObject = {}): Object { + return Utils.Object.mergeDeep({}, getRedirectExternalStreamsHandler(playerOptions, mediaOptions)); } diff --git a/src/ovp/player-defaults.js b/src/ovp/player-defaults.js index 76170a85c..c7f9cbd01 100644 --- a/src/ovp/player-defaults.js +++ b/src/ovp/player-defaults.js @@ -1,6 +1,6 @@ // @flow import {Env, Utils, MediaType} from '@playkit-js/playkit-js'; -import {getDirectManifestUri} from '../common/utils/external-stream-redirect-helper'; +import {getRedirectExternalStreamsHandler} from '../common/utils/external-stream-redirect-helper'; /** * Sets the default analytics plugin for the ovp player. @@ -41,16 +41,5 @@ export function getDefaultRedirectOptions(playerOptions: KPOptionsObject, mediaO }); } } - const playerRedirectExternalStreamsHandler = Utils.Object.getPropertyPath(playerOptions, 'sources.options.redirectExternalStreamsHandler'); - const mediaRedirectExternalStreamsHandler = Utils.Object.getPropertyPath(mediaOptions, 'sources.options.redirectExternalStreamsHandler'); - if (typeof playerRedirectExternalStreamsHandler !== 'function' && typeof mediaRedirectExternalStreamsHandler !== 'function') { - Utils.Object.mergeDeep(configObj, { - sources: { - options: { - redirectExternalStreamsHandler: getDirectManifestUri - } - } - }); - } - return configObj; + return Utils.Object.mergeDeep(configObj, getRedirectExternalStreamsHandler(playerOptions, mediaOptions)); } From 9df005634a500e3ceb73bb9ca495a1408fedc8d2 Mon Sep 17 00:00:00 2001 From: "yair.ansbacher" Date: Thu, 18 Feb 2021 16:32:57 +0200 Subject: [PATCH 2/3] add tests --- test/src/ott/player-defaults.spec.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/src/ott/player-defaults.spec.js diff --git a/test/src/ott/player-defaults.spec.js b/test/src/ott/player-defaults.spec.js new file mode 100644 index 000000000..53c6a4568 --- /dev/null +++ b/test/src/ott/player-defaults.spec.js @@ -0,0 +1,28 @@ +import {getDefaultRedirectOptions} from './../../../src/ott/player-defaults'; + +describe('getDefaultRedirectOptions', function () { + let sandbox; + beforeEach(function () { + sandbox = sinon.createSandbox(); + }); + + afterEach(function () { + sandbox.restore(); + }); + describe('redirectExternalStreamsHandler', function () { + it('should return the default', function () { + const defaultConfig = getDefaultRedirectOptions({}); + (typeof defaultConfig.sources.options.redirectExternalStreamsHandler === 'function').should.be.true; + }); + + it('should return void if already configured on player config', function () { + const defaultConfig = getDefaultRedirectOptions({sources: {options: {redirectExternalStreamsHandler: () => {}}}}); + (defaultConfig.sources === undefined).should.be.true; + }); + + it('should return void if already configured on media config', function () { + const defaultConfig = getDefaultRedirectOptions({}, {sources: {options: {redirectExternalStreamsHandler: () => {}}}}); + (defaultConfig.sources === undefined).should.be.true; + }); + }); +}); From 42d9e2e9380ad3f2f28f2e603995a8e463ce2107 Mon Sep 17 00:00:00 2001 From: "yair.ansbacher" Date: Thu, 18 Feb 2021 16:40:03 +0200 Subject: [PATCH 3/3] clean test --- test/src/ott/player-defaults.spec.js | 45 +++++++++++++++------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/test/src/ott/player-defaults.spec.js b/test/src/ott/player-defaults.spec.js index 53c6a4568..be52c40a8 100644 --- a/test/src/ott/player-defaults.spec.js +++ b/test/src/ott/player-defaults.spec.js @@ -1,28 +1,33 @@ import {getDefaultRedirectOptions} from './../../../src/ott/player-defaults'; -describe('getDefaultRedirectOptions', function () { - let sandbox; - beforeEach(function () { - sandbox = sinon.createSandbox(); +describe('redirectExternalStreamsHandler', function () { + it('should return the default', function () { + const defaultConfig = getDefaultRedirectOptions({}); + (typeof defaultConfig.sources.options.redirectExternalStreamsHandler === 'function').should.be.true; }); - afterEach(function () { - sandbox.restore(); - }); - describe('redirectExternalStreamsHandler', function () { - it('should return the default', function () { - const defaultConfig = getDefaultRedirectOptions({}); - (typeof defaultConfig.sources.options.redirectExternalStreamsHandler === 'function').should.be.true; - }); - - it('should return void if already configured on player config', function () { - const defaultConfig = getDefaultRedirectOptions({sources: {options: {redirectExternalStreamsHandler: () => {}}}}); - (defaultConfig.sources === undefined).should.be.true; + it('should return void if already configured on player config', function () { + const defaultConfig = getDefaultRedirectOptions({ + sources: { + options: { + redirectExternalStreamsHandler: () => {} + } + } }); + (defaultConfig.sources === undefined).should.be.true; + }); - it('should return void if already configured on media config', function () { - const defaultConfig = getDefaultRedirectOptions({}, {sources: {options: {redirectExternalStreamsHandler: () => {}}}}); - (defaultConfig.sources === undefined).should.be.true; - }); + it('should return void if already configured on media config', function () { + const defaultConfig = getDefaultRedirectOptions( + {}, + { + sources: { + options: { + redirectExternalStreamsHandler: () => {} + } + } + } + ); + (defaultConfig.sources === undefined).should.be.true; }); });