@100mslive/hms-video-store
Advanced tools
Comparing version 0.12.12-alpha.6 to 0.12.12-alpha.7
@@ -5,2 +5,3 @@ import { HMSAudioTrack } from './HMSAudioTrack'; | ||
import { HMSAudioPlugin, HMSPluginSupportResult } from '../../plugins'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import { TrackAudioLevelMonitor } from '../../utils/track-audio-level-monitor'; | ||
@@ -26,3 +27,3 @@ import { HMSAudioTrackSettings } from '../settings'; | ||
isPublished: boolean; | ||
constructor(stream: HMSLocalStream, track: MediaStreamTrack, source: string, eventBus: EventBus, settings?: HMSAudioTrackSettings); | ||
constructor(stream: HMSLocalStream, track: MediaStreamTrack, source: string, eventBus: EventBus, settings?: HMSAudioTrackSettings, room?: Room); | ||
getManuallySelectedDeviceId(): string | undefined; | ||
@@ -29,0 +30,0 @@ resetManuallySelectedDeviceId(): void; |
@@ -6,2 +6,3 @@ import { HMSVideoTrack } from './HMSVideoTrack'; | ||
import { HMSMediaStreamPlugin } from '../../plugins/video'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import { HMSVideoTrackSettings } from '../settings'; | ||
@@ -39,3 +40,3 @@ import { HMSLocalStream } from '../streams'; | ||
isPublished: boolean; | ||
constructor(stream: HMSLocalStream, track: MediaStreamTrack, source: string, eventBus: EventBus, settings?: HMSVideoTrackSettings); | ||
constructor(stream: HMSLocalStream, track: MediaStreamTrack, source: string, eventBus: EventBus, settings?: HMSVideoTrackSettings, room?: Room); | ||
/** @internal */ | ||
@@ -42,0 +43,0 @@ setSimulcastDefinitons(definitions: HMSSimulcastLayerDefinition[]): void; |
@@ -70,3 +70,3 @@ import { VideoTrackLayerUpdate } from '../connection/channel-messages'; | ||
} | ||
interface PluginPermissions { | ||
export interface WhiteBoardPluginPermissions { | ||
permissions?: { | ||
@@ -78,3 +78,3 @@ admin?: Array<string>; | ||
} | ||
interface TranscriptionPluginPermissions { | ||
export interface TranscriptionPluginPermissions { | ||
permissions?: { | ||
@@ -85,5 +85,9 @@ admin?: Array<string>; | ||
} | ||
export interface NoiseCancellationPlugin { | ||
enabled?: boolean; | ||
} | ||
export declare enum Plugins { | ||
WHITEBOARD = "whiteboard", | ||
TRANSCRIPTIONS = "transcriptions" | ||
TRANSCRIPTIONS = "transcriptions", | ||
NOISE_CANCELLATION = "noiseCancellation" | ||
} | ||
@@ -96,4 +100,5 @@ export interface PolicyParams { | ||
plugins: { | ||
[Plugins.WHITEBOARD]?: PluginPermissions; | ||
[Plugins.WHITEBOARD]?: WhiteBoardPluginPermissions; | ||
[Plugins.TRANSCRIPTIONS]?: TranscriptionPluginPermissions[]; | ||
[Plugins.NOISE_CANCELLATION]?: NoiseCancellationPlugin; | ||
}; | ||
@@ -100,0 +105,0 @@ template_id: string; |
import { HMSAudioPlugin } from './HMSAudioPlugin'; | ||
import { EventBus } from '../../events/EventBus'; | ||
import { HMSLocalAudioTrack } from '../../media/tracks'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
/** | ||
@@ -29,3 +30,4 @@ * This class manages applying different plugins on a local audio track. Plugins which need to modify the audio | ||
private pluginAddInProgress; | ||
constructor(track: HMSLocalAudioTrack, eventBus: EventBus); | ||
private room?; | ||
constructor(track: HMSLocalAudioTrack, eventBus: EventBus, room?: Room); | ||
getPlugins(): string[]; | ||
@@ -32,0 +34,0 @@ addPlugin(plugin: HMSAudioPlugin): Promise<void>; |
import { HMSMediaStreamPlugin } from './HMSMediaStreamPlugin'; | ||
import { EventBus } from '../../events/EventBus'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
export declare class HMSMediaStreamPluginsManager { | ||
private readonly TAG; | ||
private analytics; | ||
private plugins; | ||
constructor(eventBus: EventBus); | ||
private room?; | ||
constructor(eventBus: EventBus, room?: Room); | ||
addPlugins(plugins: HMSMediaStreamPlugin[]): void; | ||
@@ -8,0 +11,0 @@ removePlugins(plugins: HMSMediaStreamPlugin[]): void; |
@@ -93,4 +93,8 @@ import { KnownRoles, TrackStateEntry } from './StoreInterfaces'; | ||
private addPluginsToRoles; | ||
private addPermissionToRole; | ||
private addWhiteboardPluginToRole; | ||
private addTranscriptionsPluginToRole; | ||
private handleNoiseCancellationPlugin; | ||
private setEnv; | ||
} | ||
export { Store }; |
{ | ||
"version": "0.12.12-alpha.6", | ||
"version": "0.12.12-alpha.7", | ||
"license": "MIT", | ||
@@ -76,3 +76,3 @@ "repository": { | ||
], | ||
"gitHead": "b056278ac61c5f0c04ed2c7c72ca84574ceac05c" | ||
"gitHead": "b88ca5d4312e552bb6379028339d8c27f6de09aa" | ||
} |
@@ -18,3 +18,3 @@ import { IPublishConnectionObserver } from './IPublishConnectionObserver'; | ||
this.nativeConnection = new RTCPeerConnection({ ...config, iceTransportPolicy: 'relay' }); | ||
this.nativeConnection = new RTCPeerConnection(config); | ||
this.channel = this.nativeConnection.createDataChannel(API_DATA_CHANNEL, { | ||
@@ -21,0 +21,0 @@ protocol: 'SCTP', |
@@ -123,3 +123,3 @@ import EventEmitter from 'eventemitter2'; | ||
this.nativeConnection = new RTCPeerConnection({ ...config, iceTransportPolicy: 'relay' }); | ||
this.nativeConnection = new RTCPeerConnection(config); | ||
this.initNativeConnectionCallbacks(); | ||
@@ -126,0 +126,0 @@ } |
@@ -10,2 +10,3 @@ import isEqual from 'lodash.isequal'; | ||
import { HMSAudioPluginsManager } from '../../plugins/audio'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import HMSLogger from '../../utils/logger'; | ||
@@ -50,2 +51,3 @@ import { isBrowser, isIOS } from '../../utils/support'; | ||
settings: HMSAudioTrackSettings = new HMSAudioTrackSettingsBuilder().build(), | ||
room?: Room, | ||
) { | ||
@@ -61,3 +63,3 @@ super(stream, track, source); | ||
} | ||
this.pluginsManager = new HMSAudioPluginsManager(this, eventBus); | ||
this.pluginsManager = new HMSAudioPluginsManager(this, eventBus, room); | ||
this.setFirstTrackId(track.id); | ||
@@ -64,0 +66,0 @@ if (isIOS() && isBrowser) { |
@@ -19,2 +19,3 @@ import isEqual from 'lodash.isequal'; | ||
import { LocalTrackManager } from '../../sdk/LocalTrackManager'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import HMSLogger from '../../utils/logger'; | ||
@@ -73,2 +74,3 @@ import { isBrowser, isMobile } from '../../utils/support'; | ||
settings: HMSVideoTrackSettings = new HMSVideoTrackSettingsBuilder().build(), | ||
room?: Room, | ||
) { | ||
@@ -85,3 +87,3 @@ super(stream, track, source); | ||
this.pluginsManager = new HMSVideoPluginsManager(this, eventBus); | ||
this.mediaStreamPluginsManager = new HMSMediaStreamPluginsManager(eventBus); | ||
this.mediaStreamPluginsManager = new HMSMediaStreamPluginsManager(eventBus, room); | ||
this.setFirstTrackId(this.trackId); | ||
@@ -88,0 +90,0 @@ if (isBrowser && isMobile()) { |
@@ -80,3 +80,3 @@ import { VideoTrackLayerUpdate } from '../connection/channel-messages'; | ||
} | ||
interface PluginPermissions { | ||
export interface WhiteBoardPluginPermissions { | ||
permissions?: { | ||
@@ -90,3 +90,3 @@ // list of roles | ||
interface TranscriptionPluginPermissions { | ||
export interface TranscriptionPluginPermissions { | ||
permissions?: { | ||
@@ -99,5 +99,9 @@ // list of roles | ||
export interface NoiseCancellationPlugin { | ||
enabled?: boolean; | ||
} | ||
export enum Plugins { | ||
WHITEBOARD = 'whiteboard', | ||
TRANSCRIPTIONS = 'transcriptions', | ||
NOISE_CANCELLATION = 'noiseCancellation', | ||
} | ||
@@ -111,4 +115,5 @@ | ||
plugins: { | ||
[Plugins.WHITEBOARD]?: PluginPermissions; | ||
[Plugins.WHITEBOARD]?: WhiteBoardPluginPermissions; | ||
[Plugins.TRANSCRIPTIONS]?: TranscriptionPluginPermissions[]; | ||
[Plugins.NOISE_CANCELLATION]?: NoiseCancellationPlugin; | ||
}; | ||
@@ -115,0 +120,0 @@ template_id: string; |
@@ -221,2 +221,3 @@ import { HMSAction } from '../../error/HMSAction'; | ||
private convertHls(hlsNotification?: HLSNotification) { | ||
// only checking for zeroth variant intialized | ||
const isInitialised = | ||
@@ -223,0 +224,0 @@ hlsNotification?.variants && hlsNotification.variants.length > 0 |
@@ -7,2 +7,3 @@ import { AudioPluginsAnalytics } from './AudioPluginsAnalytics'; | ||
import { HMSLocalAudioTrack } from '../../media/tracks'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import HMSLogger from '../../utils/logger'; | ||
@@ -44,4 +45,5 @@ | ||
private pluginAddInProgress = false; | ||
private room?: Room; | ||
constructor(track: HMSLocalAudioTrack, private eventBus: EventBus) { | ||
constructor(track: HMSLocalAudioTrack, private eventBus: EventBus, room?: Room) { | ||
this.hmsTrack = track; | ||
@@ -51,2 +53,3 @@ this.pluginsMap = new Map(); | ||
this.createAudioContext(); | ||
this.room = room; | ||
} | ||
@@ -75,2 +78,17 @@ | ||
switch (plugin.getName()) { | ||
case 'HMSKrispPlugin': | ||
if (!this.room?.isNoiseCancellationEnabled) { | ||
const errorMessage = 'Krisp Noise Cancellation is not enabled for this room'; | ||
if (this.pluginsMap.size === 0) { | ||
throw Error(errorMessage); | ||
} else { | ||
HMSLogger.w(this.TAG, errorMessage); | ||
return; | ||
} | ||
} | ||
break; | ||
default: | ||
} | ||
this.pluginAddInProgress = true; | ||
@@ -77,0 +95,0 @@ |
@@ -5,15 +5,35 @@ import { HMSMediaStreamPlugin } from './HMSMediaStreamPlugin'; | ||
import { HMSException } from '../../internal'; | ||
import Room from '../../sdk/models/HMSRoom'; | ||
import HMSLogger from '../../utils/logger'; | ||
export class HMSMediaStreamPluginsManager { | ||
private readonly TAG = '[MediaStreamPluginsManager]'; | ||
private analytics: VideoPluginsAnalytics; | ||
private plugins: Set<HMSMediaStreamPlugin>; | ||
private room?: Room; | ||
constructor(eventBus: EventBus) { | ||
constructor(eventBus: EventBus, room?: Room) { | ||
this.plugins = new Set<HMSMediaStreamPlugin>(); | ||
this.analytics = new VideoPluginsAnalytics(eventBus); | ||
this.room = room; | ||
} | ||
addPlugins(plugins: HMSMediaStreamPlugin[]): void { | ||
plugins.forEach(plugin => this.plugins.add(plugin)); | ||
plugins.forEach(plugin => { | ||
switch (plugin.getName()) { | ||
case 'HMSEffectsPlugin': | ||
if (!this.room?.isEffectsEnabled) { | ||
const errorMessage = 'Effects Virtual Background is not enabled for this room'; | ||
if (this.plugins.size === 0) { | ||
throw Error(errorMessage); | ||
} else { | ||
HMSLogger.w(this.TAG, errorMessage); | ||
return; | ||
} | ||
} | ||
break; | ||
default: | ||
} | ||
this.plugins.add(plugin); | ||
}); | ||
} | ||
@@ -20,0 +40,0 @@ |
@@ -239,3 +239,10 @@ import { v4 as uuid } from 'uuid'; | ||
const nativeVideoTrack = stream.getVideoTracks()[0]; | ||
const videoTrack = new HMSLocalVideoTrack(local, nativeVideoTrack, 'screen', this.eventBus, screenSettings?.video); | ||
const videoTrack = new HMSLocalVideoTrack( | ||
local, | ||
nativeVideoTrack, | ||
'screen', | ||
this.eventBus, | ||
screenSettings?.video, | ||
this.store.getRoom(), | ||
); | ||
videoTrack.setSimulcastDefinitons(this.store.getSimulcastDefinitionsForPeer(this.store.getLocalPeer()!, 'screen')); | ||
@@ -261,2 +268,3 @@ | ||
screenSettings?.audio, | ||
this.store.getRoom(), | ||
); | ||
@@ -628,2 +636,3 @@ tracks.push(audioTrack); | ||
settings.audio, | ||
this.store.getRoom(), | ||
); | ||
@@ -640,2 +649,3 @@ tracks.push(audioTrack); | ||
settings.video, | ||
this.store.getRoom(), | ||
); | ||
@@ -642,0 +652,0 @@ videoTrack.setSimulcastDefinitons( |
@@ -34,3 +34,9 @@ import { KnownRoles, TrackStateEntry } from './StoreInterfaces'; | ||
} from '../../media/tracks'; | ||
import { Plugins, PolicyParams } from '../../notification-manager'; | ||
import { | ||
NoiseCancellationPlugin, | ||
Plugins, | ||
PolicyParams, | ||
TranscriptionPluginPermissions, | ||
WhiteBoardPluginPermissions, | ||
} from '../../notification-manager'; | ||
import HMSLogger from '../../utils/logger'; | ||
@@ -428,47 +434,68 @@ import { ENV } from '../../utils/support'; | ||
const addPermissionToRole = ( | ||
role: string, | ||
pluginName: keyof PolicyParams['plugins'], | ||
permission: HMSPermissionType, | ||
mode?: HMSTranscriptionMode, | ||
) => { | ||
if (!this.knownRoles[role]) { | ||
HMSLogger.d(this.TAG, `role ${role} is not present in given roles`, this.knownRoles); | ||
return; | ||
} | ||
const rolePermissions = this.knownRoles[role].permissions; | ||
if (pluginName === Plugins.TRANSCRIPTIONS && mode) { | ||
// currently only admin is allowed, so no issue | ||
rolePermissions[pluginName] = { | ||
...rolePermissions[pluginName], | ||
[mode]: [permission], | ||
}; | ||
} else if (pluginName === Plugins.WHITEBOARD) { | ||
if (!rolePermissions[pluginName]) { | ||
rolePermissions[pluginName] = []; | ||
} | ||
rolePermissions[pluginName]?.push(permission); | ||
} | ||
}; | ||
Object.keys(plugins).forEach(plugin => { | ||
const pluginName = plugin as keyof PolicyParams['plugins']; | ||
if (!plugins[pluginName]) { | ||
return; | ||
} | ||
if (pluginName === Plugins.WHITEBOARD) { | ||
const permissions = plugins[pluginName]?.permissions; | ||
permissions?.admin?.forEach(role => addPermissionToRole(role, pluginName, 'admin')); | ||
permissions?.reader?.forEach(role => addPermissionToRole(role, pluginName, 'read')); | ||
permissions?.writer?.forEach(role => addPermissionToRole(role, pluginName, 'write')); | ||
} else if (pluginName === Plugins.TRANSCRIPTIONS) { | ||
const transcriptionPlugins = plugins[pluginName] || []; | ||
for (const transcription of transcriptionPlugins) { | ||
transcription.permissions?.admin?.forEach(role => | ||
addPermissionToRole(role, pluginName, 'admin', transcription.mode), | ||
); | ||
switch (pluginName) { | ||
case Plugins.WHITEBOARD: { | ||
this.addWhiteboardPluginToRole(plugins[pluginName]); | ||
break; | ||
} | ||
case Plugins.TRANSCRIPTIONS: { | ||
this.addTranscriptionsPluginToRole(plugins[pluginName]); | ||
break; | ||
} | ||
case Plugins.NOISE_CANCELLATION: { | ||
this.handleNoiseCancellationPlugin(plugins[pluginName]); | ||
break; | ||
} | ||
default: { | ||
break; | ||
} | ||
} | ||
}); | ||
} | ||
private addPermissionToRole = ( | ||
role: string, | ||
pluginName: keyof PolicyParams['plugins'], | ||
permission: HMSPermissionType, | ||
mode?: HMSTranscriptionMode, | ||
) => { | ||
if (!this.knownRoles[role]) { | ||
HMSLogger.d(this.TAG, `role ${role} is not present in given roles`, this.knownRoles); | ||
return; | ||
} | ||
const rolePermissions = this.knownRoles[role].permissions; | ||
if (pluginName === Plugins.TRANSCRIPTIONS && mode) { | ||
// currently only admin is allowed, so no issue | ||
rolePermissions[pluginName] = { | ||
...rolePermissions[pluginName], | ||
[mode]: [permission], | ||
}; | ||
} else if (pluginName === Plugins.WHITEBOARD) { | ||
if (!rolePermissions[pluginName]) { | ||
rolePermissions[pluginName] = []; | ||
} | ||
rolePermissions[pluginName]?.push(permission); | ||
} | ||
}; | ||
private addWhiteboardPluginToRole = (plugin?: WhiteBoardPluginPermissions) => { | ||
const permissions = plugin?.permissions; | ||
permissions?.admin?.forEach(role => this.addPermissionToRole(role, Plugins.WHITEBOARD, 'admin')); | ||
permissions?.reader?.forEach(role => this.addPermissionToRole(role, Plugins.WHITEBOARD, 'read')); | ||
permissions?.writer?.forEach(role => this.addPermissionToRole(role, Plugins.WHITEBOARD, 'write')); | ||
}; | ||
private addTranscriptionsPluginToRole = (plugin: TranscriptionPluginPermissions[] = []) => { | ||
for (const transcription of plugin) { | ||
transcription.permissions?.admin?.forEach(role => | ||
this.addPermissionToRole(role, Plugins.TRANSCRIPTIONS, 'admin', transcription.mode), | ||
); | ||
} | ||
}; | ||
private handleNoiseCancellationPlugin = (plugin?: NoiseCancellationPlugin) => { | ||
if (!this.room) { | ||
return; | ||
} | ||
// it will be called again after internalConnect room initialization, even after network disconnection | ||
this.room.isNoiseCancellationEnabled = !!plugin?.enabled && !!this.room.isNoiseCancellationEnabled; | ||
}; | ||
private setEnv() { | ||
@@ -475,0 +502,0 @@ const endPoint = this.config?.initEndpoint!; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
4485381
38627