Skip to content

Commit

Permalink
fix(FEC-10381): sources config need to be passed via setMedia api (#440)
Browse files Browse the repository at this point in the history
Issue: set sources config via configure.
Solution: set sources config via setMedia config.
  • Loading branch information
Yuvalke authored May 23, 2021
1 parent d135d82 commit 2e91c65
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 54 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
},
"dependencies": {
"@babel/polyfill": "^7.0.0",
"@playkit-js/playkit-js": "0.70.1",
"@playkit-js/playkit-js": "0.71.0-canary.4962b11",
"@playkit-js/playkit-js-dash": "1.24.3",
"@playkit-js/playkit-js-hls": "1.25.1",
"@playkit-js/playkit-js-ui": "0.65.3",
Expand Down
10 changes: 4 additions & 6 deletions src/common/playlist/playlist-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class PlaylistManager {
*/
configure(config: ?KPPlaylistObject, entryList: ?ProviderEntryListObject) {
if (config) {
this._playlist.configure(config, Utils.Object.getPropertyPath(this._player.config, 'sources.options'));
this._playlist.configure(config, Utils.Object.getPropertyPath(this._player.sources, 'options'));
Utils.Object.mergeDeep(this._options, config.options);
Utils.Object.mergeDeep(this._countdown, config.countdown);
if (config.items && config.items.find(item => !!item.sources)) {
Expand Down Expand Up @@ -281,18 +281,16 @@ class PlaylistManager {
const mergedPluginsConfigAndFromApp = mergeProviderPluginsConfig(activeItem.plugins, this._player.config.plugins);
const providerPlugins = mergedPluginsConfigAndFromApp[0];
this._appPluginConfig = mergedPluginsConfigAndFromApp[1];
const media = {session: this._player.config.session, plugins: providerPlugins, sources: activeItem.sources};
// $FlowFixMe
const media = ({session: this._player.config.session, plugins: providerPlugins, sources: activeItem.sources}: any);
this._player.setMedia(media);
this._player.dispatchEvent(new FakeEvent(PlaylistEventType.PLAYLIST_ITEM_CHANGED, {index, activeItem}));
return Promise.resolve();
} else {
if (this._mediaInfoList[index]) {
this._resetProviderPluginsConfig();
this._player.reset();
this._player.configure({
sources: activeItem.sources
});
const media = ({sources: activeItem.sources}: any);
this._player.setMedia(media);
return this._player.loadMedia(this._mediaInfoList[index]).then(mediaConfig => {
this._playlist.updateItemSources(index, mediaConfig.sources);
this._playlist.updateItemPlugins(index, mediaConfig.plugins);
Expand Down
9 changes: 5 additions & 4 deletions src/common/utils/setup-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -590,11 +590,11 @@ function printSetupMessages(): void {
/**
* set stream priority according to playerConfig
* @param {Player} player - player
* @param {PartialKPOptionsObject} playerConfig - player config
* @param {PKSourcesConfigObject} sources - sources
* @return {void}
*/
function maybeSetStreamPriority(player: Player, playerConfig: PartialKPOptionsObject): void {
if (playerConfig.sources && hasYoutubeSource(playerConfig.sources)) {
function maybeSetStreamPriority(player: Player, sources: PKSourcesConfigObject): ?PKPlaybackConfigObject {
if (sources && hasYoutubeSource(sources)) {
const playbackConfig = player.config.playback;
let hasYoutube = false;
playbackConfig.streamPriority.forEach(sp => {
Expand All @@ -609,8 +609,9 @@ function maybeSetStreamPriority(player: Player, playerConfig: PartialKPOptionsOb
});
}

playerConfig.playback = playbackConfig;
return playbackConfig;
}
return null;
}

/**
Expand Down
38 changes: 27 additions & 11 deletions src/kaltura-player.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ class KalturaPlayer extends FakeEventTarget {
this._configEvaluator = new ConfigEvaluator();
this._configEvaluator.evaluatePluginsConfig(plugins, options);
this._playbackStart = false;
const noSourcesOptions = Utils.Object.mergeDeep({}, options, {sources: null});
const noSourcesOptions = Utils.Object.mergeDeep({}, options);
delete noSourcesOptions.plugins;
delete noSourcesOptions.sources;
this._localPlayer = loadPlayer(noSourcesOptions);
this._controllerProvider = new ControllerProvider(this._pluginManager);
this._viewabilityManager = new ViewabilityManager(this.config.viewability);
Expand All @@ -98,11 +99,12 @@ class KalturaPlayer extends FakeEventTarget {
this._playlistManager = new PlaylistManager(this, options);
Object.values(CoreEventType).forEach(coreEvent => this._eventManager.listen(this._localPlayer, coreEvent, e => this.dispatchEvent(e)));
this._addBindings();
this._playlistManager.configure(Utils.Object.mergeDeep({}, options.playlist, {items: null}));
const playlistConfig = Utils.Object.mergeDeep({}, options.playlist, {items: null});
this._playlistManager.configure(playlistConfig);
this.configure({plugins});
//configure sources after configure finished for all components - making sure all we'll set up correctly
this._playlistManager.configure({items: (options.playlist && options.playlist.items) || []});
this._localPlayer.configure({sources: sources || {}});
this._localPlayer.setSources(sources || {});
}

/**
Expand Down Expand Up @@ -134,7 +136,7 @@ class KalturaPlayer extends FakeEventTarget {
const mergedPluginsConfigAndFromApp = mergeProviderPluginsConfig(mediaConfig.plugins, this.config.plugins);
mediaConfig.plugins = mergedPluginsConfigAndFromApp[0];
this._appPluginConfig = mergedPluginsConfigAndFromApp[1];
this.configure(getDefaultRedirectOptions(this.config, mediaConfig));
this.configure(getDefaultRedirectOptions(({sources: this.sources}: any), mediaConfig));
this.setMedia(mediaConfig);
return mediaConfig;
},
Expand All @@ -155,18 +157,24 @@ class KalturaPlayer extends FakeEventTarget {
KalturaPlayer._logger.debug('setMedia', mediaConfig);
this.reset();
const playerConfig = Utils.Object.copyDeep(mediaConfig);
Utils.Object.mergeDeep(playerConfig.sources, this._localPlayer.config.sources);
//merge the current sources from player to keep the sources passed from constructor earlier
const sources = Utils.Object.mergeDeep({}, playerConfig.sources, this._localPlayer.sources);
delete playerConfig.sources;
Utils.Object.mergeDeep(playerConfig.session, this._localPlayer.config.session);
playerConfig.plugins = playerConfig.plugins || {};
Object.keys(this._pluginsConfig).forEach(name => {
playerConfig.plugins[name] = playerConfig.plugins[name] || {};
});
addKalturaPoster(playerConfig.sources, mediaConfig.sources, this._localPlayer.dimensions);
addKalturaParams(this, playerConfig);
maybeSetStreamPriority(this, playerConfig);
if (!hasYoutubeSource(playerConfig.sources)) {
addKalturaPoster(sources, mediaConfig.sources, this._localPlayer.dimensions);
addKalturaParams(this, {...playerConfig, sources});
const playback = maybeSetStreamPriority(this, sources);
if (playback) {
playerConfig.playback = playback;
}
if (!hasYoutubeSource(sources)) {
this._thumbnailManager = new ThumbnailManager(this._localPlayer, this.config.ui, mediaConfig);
}
this._localPlayer.setSources(sources || {});
this.configure(playerConfig);
}

Expand Down Expand Up @@ -243,7 +251,7 @@ class KalturaPlayer extends FakeEventTarget {

getMediaConfig(): ?KPMediaConfig {
const mediaConfig = {
sources: this._localPlayer.config.sources,
sources: this._localPlayer.sources,
plugins: this._pluginsConfig
};
return Utils.Object.copyDeep(mediaConfig);
Expand All @@ -265,6 +273,10 @@ class KalturaPlayer extends FakeEventTarget {
this._configureOrLoadPlugins(config.plugins);
const localPlayerConfig = Utils.Object.mergeDeep({}, config);
delete localPlayerConfig.plugins;
if (localPlayerConfig.sources) {
this._localPlayer.setSources(localPlayerConfig.sources || {});
delete localPlayerConfig.sources;
}
this._localPlayer.configure(localPlayerConfig);
const uiConfig = config.ui;
if (uiConfig) {
Expand Down Expand Up @@ -592,8 +604,12 @@ class KalturaPlayer extends FakeEventTarget {
return this._localPlayer.env;
}

get sources(): PKSourcesConfigObject {
return {...this._localPlayer.sources};
}

get config(): Object {
return {...this._localPlayer.config, plugins: this._pluginsConfig};
return {...this._localPlayer.config, plugins: this._pluginsConfig, sources: this._localPlayer.sources};
}

get hasUserInteracted(): boolean {
Expand Down
42 changes: 21 additions & 21 deletions test/src/common/ads/ads-controller.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ describe('AdsController', () => {
}
});
player.configure({
sources: SourcesConfig.Mp4,
advertising: {
adBreaks: [
{percentage: 0, ads: [{}]},
Expand All @@ -53,6 +52,7 @@ describe('AdsController', () => {
]
}
});
player.setMedia({sources: SourcesConfig.Mp4});
});

it('Should not fire AD_MANIFEST_LOADED for empty list', done => {
Expand Down Expand Up @@ -109,7 +109,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -146,7 +146,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -183,7 +183,7 @@ describe('AdsController', () => {
done(e);
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -229,7 +229,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -266,7 +266,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.FIRST_PLAY, () => {
player.currentTime = 2;
});
Expand Down Expand Up @@ -304,7 +304,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.PLAYBACK_ENDED, () => {
done();
});
Expand Down Expand Up @@ -346,7 +346,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.PLAYBACK_ENDED, () => {
done();
});
Expand Down Expand Up @@ -383,7 +383,7 @@ describe('AdsController', () => {
}
});
let firstPlay = true;
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.PLAYBACK_ENDED, () => {
if (firstPlay) {
player.play();
Expand Down Expand Up @@ -446,7 +446,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.FIRST_PLAY, () => {
player.currentTime = 3;
});
Expand Down Expand Up @@ -489,7 +489,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -527,7 +527,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -568,7 +568,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -599,7 +599,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -630,7 +630,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -661,7 +661,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand All @@ -687,7 +687,7 @@ describe('AdsController', () => {
done(e);
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});

Expand Down Expand Up @@ -752,7 +752,7 @@ describe('AdsController', () => {
]
}
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.play();
});
});
Expand All @@ -773,7 +773,7 @@ describe('AdsController', () => {
sandbox.stub(player._controllerProvider, 'getAdsControllers').callsFake(function () {
return [fakeCtrl];
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.ads.playAdNow(preroll);
});

Expand All @@ -792,7 +792,7 @@ describe('AdsController', () => {
sandbox.stub(player._controllerProvider, 'getAdsControllers').callsFake(function () {
return [fakeCtrl];
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.FIRST_PLAY, () => {
player.ads.playAdNow(midroll);
});
Expand All @@ -809,7 +809,7 @@ describe('AdsController', () => {
sandbox.stub(player._controllerProvider, 'getAdsControllers').callsFake(function () {
return [fakeCtrl];
});
player.configure({sources: SourcesConfig.Mp4});
player.setMedia({sources: SourcesConfig.Mp4});
player.addEventListener(CustomEventType.FIRST_PLAY, () => {
player._adsController._adBreak = true;
player.ads.playAdNow(midroll);
Expand Down
8 changes: 6 additions & 2 deletions test/src/kaltura-player.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -560,14 +560,16 @@ describe('kaltura player api', function () {
lastCellValue: 6
});
player.configure({
sources: SourcesConfig.Mp4,
plugins: {
numbers: {
size: 2,
firstCellValue: 3
}
}
});
player.setMedia({
sources: SourcesConfig.Mp4
});
player._pluginManager.get('numbers').should.exist;
Object.keys(player._pluginManager._plugins).length.should.equals(1);
player.config.plugins.numbers.should.deep.equals({
Expand Down Expand Up @@ -859,11 +861,13 @@ describe('kaltura player api', function () {
done();
});
player.configure({
sources: SourcesConfig.Mp4,
playback: {
autoplay: true
}
});
player.setMedia({
sources: SourcesConfig.Mp4
});
});

it('should fire auto play failed and show the poster once get AD_AUTOPLAY_FAILED', done => {
Expand Down
Loading

0 comments on commit 2e91c65

Please sign in to comment.