openvidu-browser: Filter interface to class

pull/108/merge
pabloFuente 2018-08-27 17:06:14 +02:00
parent e72a4a1f68
commit b44839f95b
9 changed files with 35 additions and 29 deletions

View File

@ -130,7 +130,7 @@ export class Connection {
typeOfVideo: opts.typeOfVideo,
frameRate: opts.frameRate,
videoDimensions: !!opts.videoDimensions ? JSON.parse(opts.videoDimensions) : undefined,
filter: !!opts.filter ? opts.filter : {}
filter: !!opts.filter ? opts.filter : undefined
};
const stream = new Stream(this.session, streamOptions);

View File

@ -16,39 +16,48 @@
*/
/**
* **WARNING**: experimental option. This interface may change in the near future. See [[Stream.filter]]
* **WARNING**: experimental option. This interface may change in the near future
*
* Video/audio filter applied to a Stream. See [[Stream.applyFilter]]
*/
export interface Filter {
export class Filter {
/**
* Type of filter applied. This is the name of the remote class identifying the filter to apply in Kurento Media Server.
* For example: `"FaceOverlayFilter"`, `"GStreamerFilter"`.
*
* You can get this property in `*.kmd.json` files defining the Kurento filters: for GStreamerFilter that's
* You can get this property in `*.kmd.json` files defining the Kurento filters. For example, for GStreamerFilter that's
* [here](https://github.com/Kurento/kms-filters/blob/53a452fac71d61795952e3d2202156c6b00f6d65/src/server/interface/filters.GStreamerFilter.kmd.json#L4)
*/
type?: string;
type: string;
/**
* Parameters used to initialized the filter.
* Parameters used to initialize the filter.
* These correspond to the constructor parameters used in the filter in Kurento Media Server (except for `mediaPipeline` parameter, which is never needed).
*
* For example: for `filter.type = "GStreamerFilter"` could be `filter.options = {"command": "videobalance saturation=0.0"}`
*
* You can get this property in `*.kmd.json` files defining the Kurento filters: for GStreamerFilter that's
* You can get this property in `*.kmd.json` files defining the Kurento filters. For example, for GStreamerFilter that's
* [here](https://github.com/Kurento/kms-filters/blob/53a452fac71d61795952e3d2202156c6b00f6d65/src/server/interface/filters.GStreamerFilter.kmd.json#L13-L31)
*/
options?: Object;
options: Object;
/**
* Value passed the last time [[Session.execFilterMethod]] or [[Session.forceExecFilterMethod]] were called
* for the Stream owning this filter. If `undefined` those methods have not been called yet.
* Value passed the last time [[Filter.execMethod]] was called. If `undefined` this method has not been called yet.
*
* You can use this value to know the current status of any applied filter
*/
lastExecMethod?: {
method: string,
params: Object
method: string, params: Object
};
/**
* @hidden
*/
constructor(type: string, options: Object) {
this.type = type;
this.options = options;
}
}

View File

@ -16,6 +16,7 @@
*/
import { Connection } from './Connection';
import { Filter } from './Filter';
import { OpenVidu } from './OpenVidu';
import { Publisher } from './Publisher';
import { Stream } from './Stream';
@ -513,8 +514,8 @@ export class Session implements EventDispatcher {
}
} else {
console.info('Filter successfully applied on Stream ' + stream.streamId);
const oldValue = JSON.parse(JSON.stringify(stream.filter));
stream.filter = { type, options };
const oldValue: Filter = stream.filter;
stream.filter = new Filter(type, options);
this.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this, stream, 'filter', stream.filter, oldValue, 'applyFilter')]);
stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(stream.streamManager, stream, 'filter', stream.filter, oldValue, 'applyFilter')]);
resolve();
@ -580,7 +581,7 @@ export class Session implements EventDispatcher {
} else {
console.info('Filter successfully removed from Stream ' + stream.streamId);
const oldValue = JSON.parse(JSON.stringify(stream.filter));
stream.filter = new Object();
delete stream.filter;
this.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(this, stream, 'filter', stream.filter, oldValue, 'applyFilter')]);
stream.streamManager.emitEvent('streamPropertyChanged', [new StreamPropertyChangedEvent(stream.streamManager, stream, 'filter', stream.filter, oldValue, 'applyFilter')]);
resolve();
@ -937,6 +938,7 @@ export class Session implements EventDispatcher {
break;
case 'filter':
oldValue = stream.filter;
msg.newValue = (Object.keys(msg.newValue).length > 0) ? msg.newValue : undefined;
stream.filter = msg.newValue;
break;
}

View File

@ -17,6 +17,7 @@
import { Connection } from './Connection';
import { Event } from '../OpenViduInternal/Events/Event';
import { Filter } from './Filter';
import { Session } from './Session';
import { StreamManager } from './StreamManager';
import { EventDispatcher } from '../OpenViduInternal/Interfaces/Public/EventDispatcher';
@ -109,13 +110,7 @@ export class Stream implements EventDispatcher {
* [[Session.execFilterMethod]] and remove it with [[Session.removeFilter]]. Be aware that the client calling this methods must have the
* necessary permissions: the token owned by the client must have been initialized with the appropriated `allowedFilters` array.
*/
filter: {
type?: string,
options?: Object,
lastExecMethod?: {
method: string, params: Object
}
} = {};
filter: Filter;
/**
* @hidden
@ -180,7 +175,7 @@ export class Stream implements EventDispatcher {
this.frameRate = (this.inboundStreamOpts.frameRate === -1) ? undefined : this.inboundStreamOpts.frameRate;
this.videoDimensions = this.inboundStreamOpts.videoDimensions;
}
if (!!this.inboundStreamOpts.filter) {
if (!!this.inboundStreamOpts.filter && (Object.keys(this.inboundStreamOpts.filter).length > 0)) {
if (!!this.inboundStreamOpts.filter.lastExecMethod && Object.keys(this.inboundStreamOpts.filter.lastExecMethod).length === 0) {
delete this.inboundStreamOpts.filter.lastExecMethod;
}

View File

@ -17,7 +17,7 @@
import { Event } from './Event';
import { Stream } from '../../OpenVidu/Stream';
import { Filter } from '../Interfaces/Public/Filter';
import { Filter } from '../../OpenVidu/Filter';
/**

View File

@ -16,7 +16,7 @@
*/
import { Connection } from '../../../OpenVidu/Connection';
import { Filter } from '../Public/Filter';
import { Filter } from '../../../OpenVidu/Filter';
export interface InboundStreamOptions {
id: string;
@ -28,5 +28,5 @@ export interface InboundStreamOptions {
typeOfVideo: string;
frameRate: number;
videoDimensions: { width: number, height: number };
filter: Filter;
filter?: Filter;
}

View File

@ -15,7 +15,7 @@
*
*/
import { Filter } from '../Public/Filter';
import { Filter } from '../../../OpenVidu/Filter';
export interface StreamOptionsServer {
id: string;

View File

@ -15,7 +15,7 @@
*
*/
import { Filter } from './Filter';
import { Filter } from '../../../OpenVidu/Filter';
import { VideoInsertMode } from '../../Enums/VideoInsertMode';
/**

View File

@ -6,6 +6,7 @@ export { StreamManager } from './OpenVidu/StreamManager';
export { Stream } from './OpenVidu/Stream';
export { Connection } from './OpenVidu/Connection';
export { LocalRecorder } from './OpenVidu/LocalRecorder';
export { Filter } from './OpenVidu/Filter';
export { LocalRecorderState } from './OpenViduInternal/Enums/LocalRecorderState';
export { OpenViduError } from './OpenViduInternal/Enums/OpenViduError';
@ -26,7 +27,6 @@ export { FilterEvent } from './OpenViduInternal/Events/FilterEvent';
export { Capabilities } from './OpenViduInternal/Interfaces/Public/Capabilities';
export { Device } from './OpenViduInternal/Interfaces/Public/Device';
export { EventDispatcher } from './OpenViduInternal/Interfaces/Public/EventDispatcher';
export { Filter } from './OpenViduInternal/Interfaces/Public/Filter';
export { OpenViduAdvancedConfiguration } from './OpenViduInternal/Interfaces/Public/OpenViduAdvancedConfiguration';
export { PublisherProperties } from './OpenViduInternal/Interfaces/Public/PublisherProperties';
export { SignalOptions } from './OpenViduInternal/Interfaces/Public/SignalOptions';