Skip to content

Commit

Permalink
feat(FEC-8038): cast framework (#158)
Browse files Browse the repository at this point in the history
Remote framework to support casting.
  • Loading branch information
Dan Ziv authored Oct 14, 2018
1 parent fb9cff4 commit e836e69
Show file tree
Hide file tree
Showing 33 changed files with 1,422 additions and 163 deletions.
Binary file added .DS_Store
Binary file not shown.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ The Kaltura Player integrates:
The Kaltura Player exposes two different players: the _Kaltura OVP Player_ and _Kaltura Cloud TV Player_. Each player integrates its related packages, as you can see in the following table:

| | PlayKit JS | PlayKit JS Providers | PlayKit JS UI | PlayKit JS DASH | PlayKit JS HLS | PlayKit JS Youbora | PlayKit JS KAnalytics | PlayKit JS OTT Analytics | PlayKit JS KAVA |
| --------------- | ---------- | -------------------- | ------------- | --------------- | -------------- | ------------------ | --------------------- | ------------------------ | ------------------------ |
| OVP Player | V | OVP | V | V | V | V | V | | V | |
| Cloud TV Player | V | OTT | V | V | V | V | | V | V (*) |
| --------------- | ---------- | -------------------- | ------------- | --------------- | -------------- | ------------------ | --------------------- | ------------------------ | --------------- |
| OVP Player | V | OVP | V | V | V | V | V | | V | |
| Cloud TV Player | V | OTT | V | V | V | V | | V | V (\*) |

>\* Needs to be configured.
> \* Needs to be configured.
The Kaltura Player is written in [ECMAScript6], statically analysed using [Flow] and transpiled in ECMAScript5 using [Babel].

Expand Down
6 changes: 6 additions & 0 deletions flow-typed/types/kaltura-player-event-types.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// @flow
declare type KPEventTypes = {
Core: PKEventTypes,
UI: { [event: string]: string },
Cast: { [event: string]: string }
};
12 changes: 7 additions & 5 deletions flow-typed/types/kaltura-player-options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @flow
declare type KalturaPlayerOptionsObject = {
declare type KPOptionsObject = {
targetId: string,
logLevel?: string,
disableUserCache?: boolean,
Expand All @@ -8,10 +8,11 @@ declare type KalturaPlayerOptionsObject = {
plugins?: PKPluginsConfigObject,
session?: PKSessionConfigObject,
provider: ProviderOptionsObject,
ui: UIOptionsObject
ui: UIOptionsObject,
cast?: { [key: string]: any }
};

declare type PartialKalturaPlayerOptionsObject = {
declare type PartialKPOptionsObject = {
targetId: string,
logLevel?: string,
disableUserCache?: boolean,
Expand All @@ -20,10 +21,11 @@ declare type PartialKalturaPlayerOptionsObject = {
plugins?: PKPluginsConfigObject,
session?: PKSessionConfigObject,
provider: ProviderOptionsObject,
ui?: UIOptionsObject
ui?: UIOptionsObject,
cast?: { [key: string]: any }
};

declare type LegacyPartialKalturaPlayerOptionsObject = {
declare type LegacyPartialKPOptionsObject = {
targetId: string,
logLevel?: string,
disableUserCache?: boolean,
Expand Down
2 changes: 0 additions & 2 deletions flow-typed/types/log-level.js

This file was deleted.

9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,18 @@
"webpack-dev-server": "latest"
},
"dependencies": {
"@playkit-js/playkit-js": "^0.37.0",
"@playkit-js/playkit-js-hls": "^1.8.3",
"@playkit-js/playkit-js": "^0.38.0",
"@playkit-js/playkit-js-hls": "^1.9.0",
"@playkit-js/playkit-js-kava": "^0.2.7",
"@playkit-js/playkit-js-ui": "^0.27.1",
"@playkit-js/playkit-js-ui": "^0.28.1",
"babel-polyfill": "^6.23.0",
"hls.js": "^0.10.1",
"js-logger": "^1.3.0",
"playkit-js-dash": "https://github.com/kaltura/playkit-js-dash.git#v1.6.4",
"playkit-js-kanalytics": "https://github.com/kaltura/playkit-js-kanalytics.git#v0.9.1",
"playkit-js-ott-analytics": "https://github.com/kaltura/playkit-js-ott-analytics.git#v0.1.5",
"playkit-js-providers": "https://github.com/kaltura/playkit-js-providers.git#v2.7.2",
"playkit-js-providers": "https://github.com/kaltura/playkit-js-providers.git#v2.7.3",
"proxy-polyfill": "^0.3.0",
"shaka-player": "https://github.com/kaltura/shaka-player.git#v2.3.3-k-4"
},
"repository": {
Expand Down
195 changes: 195 additions & 0 deletions src/common/cast/base-remote-player.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
// @flow
/* eslint no-unused-vars: 0 */
import {IRemotePlayer} from './remote-player';
import {EventManager, FakeEventTarget, TextStyle, Track, Utils} from 'playkit-js';
import {RemoteControl} from './remote-control';
import getLogger from '../utils/logger';
import {RemoteSession} from './remote-session';

class BaseRemotePlayer extends FakeEventTarget implements IRemotePlayer {
static defaultConfig: Object = {};

static Type: string = 'BaseRemotePlayer';

static isSupported(): boolean {
return true;
}

_remoteControl: RemoteControl;
_config: Object;
_logger: any;
_eventManager: EventManager;

constructor(name: string, config: Object, remoteControl: RemoteControl) {
super();
this._logger = getLogger(name);
this._remoteControl = remoteControl;
this._config = Utils.Object.mergeDeep({}, this.constructor.defaultConfig, config);
this._eventManager = new EventManager();
this._logger.debug(`Initialized`);
}

loadMedia(mediaInfo: Object): Promise<*> {
return Promise.resolve();
}

setMedia(mediaConfig: Object): void {}

getMediaInfo(): ?Object {}

configure(config: Object = {}): void {}

ready(): Promise<*> {
return Promise.resolve();
}

load(): void {}

play(): void {}

pause(): void {}

reset(): void {}

destroy(): void {}

isLive(): boolean {
return false;
}

isDvr(): boolean {
return false;
}

seekToLiveEdge(): void {}

getStartTimeOfDvrWindow(): number {
return 0;
}

getTracks(type?: string): Array<Track> {
return [];
}

getActiveTracks(): Object {
return {audio: undefined, video: undefined, text: undefined};
}

selectTrack(track: ?Track): void {}

hideTextTrack(): void {}

enableAdaptiveBitrate(): void {}

isAdaptiveBitrateEnabled(): boolean {
return true;
}

setTextDisplaySettings(settings: Object): void {}

startCasting(): void {}

stopCasting(): void {}

isCasting(): boolean {
return true;
}

isCastAvailable(): boolean {
return true;
}

getCastSession(): RemoteSession {
return new RemoteSession('', '');
}

isVr(): boolean {
return false;
}

toggleVrStereoMode(): void {}

isInVrStereoMode(): boolean {
return false;
}

get ads(): ?Object {
return null;
}

set textStyle(style: TextStyle): void {}

get textStyle(): TextStyle {
return new TextStyle();
}

get buffered(): Array<any> {
return [];
}

set currentTime(to: number): void {}

get currentTime(): number {
return 0;
}

get duration(): number {
return 0;
}

set volume(vol: number): void {}

get volume(): number {
return 1;
}

get paused(): boolean {
return false;
}

get ended(): boolean {
return false;
}

get seeking(): boolean {
return false;
}

set muted(mute: boolean): void {}

get muted(): boolean {
return false;
}

get src(): string {
return '';
}

get poster(): string {
return '';
}

set playbackRate(rate: number): void {}

get playbackRate(): number {
return 1;
}

get engineType(): string {
return '';
}

get streamType(): string {
return '';
}

get config(): Object {
return this._config;
}

get type(): string {
return BaseRemotePlayer.Type;
}
}

export {BaseRemotePlayer};
13 changes: 13 additions & 0 deletions src/common/cast/cast-event-type.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// @flow
const namespace = 'kaltura-player';

const CastEventType: {[event: string]: string} = {
CAST_SESSION_START_FAILED: `${namespace}-castsessionstartfailed`,
CAST_SESSION_STARTING: `${namespace}-castsessionstarting`,
CAST_SESSION_STARTED: `${namespace}-castsessionstarted`,
CAST_SESSION_ENDING: `${namespace}-castsessionending`,
CAST_SESSION_ENDED: `${namespace}-castsessionended`,
CAST_AVAILABLE: `${namespace}-castavailable`
};

export {CastEventType};
41 changes: 41 additions & 0 deletions src/common/cast/custom-message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// @flow
const CustomMessageType: {[type: string]: string} = {
ACTION: 'action',
EVENT: 'event'
};

const CustomActionType: {[action: string]: string} = {
SKIP_AD: 'skipAd'
};

class CustomMessage {
type: string;

constructor(type: string) {
this.type = type;
}
}

class CustomEventMessage extends CustomMessage {
event: string;
payload: any;

constructor(event: string, payload: any) {
super(CustomMessageType.EVENT);
this.event = event;
this.payload = payload;
}
}

class CustomActionMessage extends CustomMessage {
action: string;
args: any;

constructor(action: string, args: any) {
super(CustomMessageType.ACTION);
this.action = action;
this.args = args;
}
}

export {CustomMessageType, CustomActionType, CustomMessage, CustomEventMessage, CustomActionMessage};
34 changes: 34 additions & 0 deletions src/common/cast/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// @flow
import {RemotePlayerManager} from './remote-player-manager';
import {PlayerSnapshot} from './player-snapshot';
import {RemoteControl} from './remote-control';
import {CastEventType} from './cast-event-type';
import {RemoteSession} from './remote-session';
import {BaseRemotePlayer} from './base-remote-player';
import {RemoteAvailablePayload, RemoteConnectedPayload, RemoteDisconnectedPayload} from './remote-payload';
import {RemotePlayerUI} from './remote-player-ui';
import {RemotePlayerType} from './remote-player-type';
import {TextStyleConverter} from './text-style-convertor';
import {CustomActionMessage, CustomActionType, CustomEventMessage, CustomMessage, CustomMessageType} from './custom-message';

const cast = {
registerRemotePlayer: RemotePlayerManager.register,
PlayerSnapshot,
RemoteControl,
RemoteSession,
BaseRemotePlayer,
RemoteConnectedPayload,
RemoteDisconnectedPayload,
RemoteAvailablePayload,
RemotePlayerUI,
CastEventType,
RemotePlayerType,
TextStyleConverter,
CustomEventMessage,
CustomActionMessage,
CustomMessageType,
CustomActionType,
CustomMessage
};

export {cast};
Loading

0 comments on commit e836e69

Please sign in to comment.