@techsee/techsee-media-service 5.0.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO7E,OAAO,EAGH,iBAAiB,EACjB,cAAc,EAEjB,MAAM,qBAAqB,CAAC;AAc7B,qBAAa,wBAAyB,SAAQ,iBAAiB;IAQvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAGhC,QAAQ,EAAE,eAAe,EACR,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAOxE,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA2C/C;IAEK,UAAU,QAAO,IAAI,CAW1B;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBACK,OAAO,KAC5B,QAAQ,IAAI,CAAC,CAiBd;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAuC3C;IAEF,OAAO,CAAC,aAAa;IAOrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAoH9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAkBpE;IAEF,oBAAoB,kBAIjB,QAAQ,IAAI,CAAC,CAyCd;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAe/C;IAEF,sBAAsB,kBAKnB,IAAI,CAgBL;IAEF,wBAAwB,kBAIrB,IAAI,CAsBL;IAEF,0BAA0B,kBAKvB,IAAI,CAyBL;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA0BtB;CACL","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import * as OT from '@opentok/client';\nimport { MultiPartyCameraTypes, SessionClientRole } from '../MediaConstants';\nimport { getMediaTracer } from '../MediaUtils';\nimport { BrandingSettings, Credentials, SessionSettings } from './Contracts';\nimport { MediaCapabilitiesService } from './MediaCapabilitiesService';\nimport {\n checkAudioCapabilities,\n checkIsMobile,\n checkVideoCapabilities\n} from './MediaCapabilitiesUtils';\nimport {\n DEFAULT_AVATAR_URI,\n MULTI_PARTY_EVENTS,\n MultiPartyService,\n SubscriberInfo,\n maxParticipantsNumber\n} from './MultiPartyService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\ntype OpentokSubscriberInfo = SubscriberInfo & {\n subscriber: OT.Subscriber;\n};\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n private subscriberList: OpentokSubscriberInfo[] = [];\n private session?: OT.Session;\n private currentPublisher?: any;\n private branding?: BrandingSettings;\n\n constructor(\n settings: SessionSettings,\n private readonly getParticipantId: (connectionId?: string) => string\n ) {\n super(settings);\n\n this.branding = settings.branding;\n }\n\n get ownConnectionId(): string {\n return this.session?.connection?.connectionId || '';\n }\n\n get subscribers(): SubscriberInfo[] {\n return [...this.subscriberList];\n }\n\n public connect = (credentials: Credentials): void => {\n try {\n this.session = OT.initSession(\n credentials.apiKey,\n credentials.sessionId\n );\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on(\n 'connectionDestroyed',\n this.connectionDestroyedHandler\n );\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on(\n 'streamPropertyChanged',\n this.streamPropertyChangedHandler\n );\n this.session.on(\n 'sessionDisconnected',\n this.sessionDisconnectedHandler\n );\n\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(error) }\n });\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(err) }\n });\n }\n };\n\n public disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n private createPublisher = async (\n settings: Readonly<SessionSettings>\n ): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error(\n 'Did not create publisher due to lack of media capabilities.'\n );\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted:\n settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error(\n 'Creating session requires initialized publisher'\n );\n }\n\n this.currentPublisher &&\n this.session?.publish(\n this.currentPublisher,\n this.traceErrorCallback\n );\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (\n shouldPublishVideo: boolean\n ): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\n `cameraType not valid: ${this.settings.selectedCamera}`\n );\n }\n\n return this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType\n });\n trace.info(\n `Success to switch camera to cameraType: ${cameraType}`\n );\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (\n (connection?.data && JSON.parse(connection.data).clientRole) ||\n SessionClientRole.USER\n );\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const { selectedCamera } = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {\n frontCameraDeviceId,\n backCameraDeviceId\n } = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT\n ? frontCameraDeviceId\n : backCameraDeviceId) || undefined;\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.currentPublisher = OT.initPublisher(\n this.getParticipantId(this.session?.connection?.connectionId || ''),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode:\n isMobile || !videoSourceId ? mobileCameraType : undefined\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on(\n 'videoElementCreated',\n (event: any) => {\n trace.info('videoElementCreated', event);\n\n this.emit(\n MULTI_PARTY_EVENTS.videoElementCreated,\n event\n );\n }\n );\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantId(connectionId);\n const isOwnConnection =\n this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on(\n 'streamCreated',\n async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantId(\n event?.stream?.connection.connectionId\n );\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings\n .startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection:\n this.ownConnectionId ===\n event?.stream?.connection?.connectionId\n });\n\n trace.info('publisher stream created', {\n event,\n hasAudio: this.currentPublisher?.[\n 'stream.hasAudio'\n ],\n participantId\n });\n }\n );\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n reinitializeStreams = async (settings: SessionSettings): Promise<void> => {\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n await this.createPublisher(settings);\n\n this.subscriberList = this.subscriberList.map((s) => {\n const { connectionId, subscriber } = s;\n const { stream } = subscriber;\n\n this.session?.unsubscribe(subscriber);\n\n return {\n ...s,\n subscriber: this.createSubscriber(stream, connectionId)\n };\n });\n };\n\n streamCreatedHandler = async (\n event: any & {\n stream: any;\n }\n ): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const { stream } = event;\n const { connection } = stream;\n const { connectionId } = connection;\n const participantId = this.getParticipantId(connectionId);\n\n await MediaCapabilitiesService.setDevicesList();\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio\n });\n\n if (\n !this.ownConnectionId ||\n !stream ||\n connectionId === this.ownConnectionId\n ) {\n return;\n }\n\n if (this.subscriberList.length >= maxParticipantsNumber - 1) {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n\n return;\n }\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole: this.getClientRole(connection)\n });\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const { stream } = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantId(\n stream?.connection.connectionId\n ),\n isOwnConnection:\n this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (\n event: any & {\n stream: any;\n reason: string;\n }\n ): void => {\n trace.info('streamDestroyedHandler', event);\n\n const { stream } = event;\n const destroyedConnectionId =\n stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n this.subscriberList = this.subscriberList.filter(\n (subscriber) => subscriber.connectionId !== destroyedConnectionId\n );\n };\n\n connectionCreatedHandler = (\n event: any & {\n connection: any;\n }\n ): void => {\n trace.info('connectionCreatedHandler', event);\n\n const { connection } = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole,\n event,\n participantId: this.getParticipantId(connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (\n event: any & {\n connection: any;\n reason: string;\n }\n ): void => {\n const { connection } = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole,\n event,\n participantId: this.getParticipantId(event?.connection.connectionId)\n });\n\n if (\n !this.ownConnectionId ||\n !connection ||\n connection.connectionId !== this.ownConnectionId\n ) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n this.session = undefined;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n\n private createSubscriber = (stream: any, connectionId: string): OT.Subscriber => {\n // ToDo: OT session can be undefined. This needs to be fixed.\n const subscriber = this.session!.subscribe(\n stream,\n this.getParticipantId(connectionId),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n }\n );\n\n return subscriber;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO7E,OAAO,EAGH,iBAAiB,EACjB,cAAc,EAEjB,MAAM,qBAAqB,CAAC;AAc7B,qBAAa,wBAAyB,SAAQ,iBAAiB;IAQvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAGhC,QAAQ,EAAE,eAAe,EACR,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAOxE,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA2C/C;IAEK,UAAU,QAAO,IAAI,CAW1B;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBACK,OAAO,KAC5B,QAAQ,IAAI,CAAC,CAiBd;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAuC3C;IAEF,OAAO,CAAC,aAAa;IAOrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAoH9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAkBpE;IAEF,oBAAoB,kBAIjB,QAAQ,IAAI,CAAC,CAyCd;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAe/C;IAEF,sBAAsB,kBAKnB,IAAI,CAgBL;IAEF,wBAAwB,kBAIrB,IAAI,CAsBL;IAEF,0BAA0B,kBAKvB,IAAI,CAyBL;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA0BtB;CACL","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import { MultiPartyCameraTypes, SessionClientRole } from '../MediaConstants';\nimport { getMediaTracer } from '../MediaUtils';\nimport { BrandingSettings, Credentials, SessionSettings } from './Contracts';\nimport { MediaCapabilitiesService } from './MediaCapabilitiesService';\nimport {\n checkAudioCapabilities,\n checkIsMobile,\n checkVideoCapabilities\n} from './MediaCapabilitiesUtils';\nimport {\n DEFAULT_AVATAR_URI,\n MULTI_PARTY_EVENTS,\n MultiPartyService,\n SubscriberInfo,\n maxParticipantsNumber\n} from './MultiPartyService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\ntype OpentokSubscriberInfo = SubscriberInfo & {\n subscriber: OT.Subscriber;\n};\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n private subscriberList: OpentokSubscriberInfo[] = [];\n private session?: OT.Session;\n private currentPublisher?: any;\n private branding?: BrandingSettings;\n\n constructor(\n settings: SessionSettings,\n private readonly getParticipantId: (connectionId?: string) => string\n ) {\n super(settings);\n\n this.branding = settings.branding;\n }\n\n get ownConnectionId(): string {\n return this.session?.connection?.connectionId || '';\n }\n\n get subscribers(): SubscriberInfo[] {\n return [...this.subscriberList];\n }\n\n public connect = (credentials: Credentials): void => {\n try {\n this.session = OT.initSession(\n credentials.apiKey,\n credentials.sessionId\n );\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on(\n 'connectionDestroyed',\n this.connectionDestroyedHandler\n );\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on(\n 'streamPropertyChanged',\n this.streamPropertyChangedHandler\n );\n this.session.on(\n 'sessionDisconnected',\n this.sessionDisconnectedHandler\n );\n\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(error) }\n });\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(err) }\n });\n }\n };\n\n public disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n private createPublisher = async (\n settings: Readonly<SessionSettings>\n ): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error(\n 'Did not create publisher due to lack of media capabilities.'\n );\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted:\n settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error(\n 'Creating session requires initialized publisher'\n );\n }\n\n this.currentPublisher &&\n this.session?.publish(\n this.currentPublisher,\n this.traceErrorCallback\n );\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (\n shouldPublishVideo: boolean\n ): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\n `cameraType not valid: ${this.settings.selectedCamera}`\n );\n }\n\n return this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType\n });\n trace.info(\n `Success to switch camera to cameraType: ${cameraType}`\n );\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (\n (connection?.data && JSON.parse(connection.data).clientRole) ||\n SessionClientRole.USER\n );\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const { selectedCamera } = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {\n frontCameraDeviceId,\n backCameraDeviceId\n } = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT\n ? frontCameraDeviceId\n : backCameraDeviceId) || undefined;\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.currentPublisher = OT.initPublisher(\n this.getParticipantId(this.session?.connection?.connectionId || ''),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode:\n isMobile || !videoSourceId ? mobileCameraType : undefined\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on(\n 'videoElementCreated',\n (event: any) => {\n trace.info('videoElementCreated', event);\n\n this.emit(\n MULTI_PARTY_EVENTS.videoElementCreated,\n event\n );\n }\n );\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantId(connectionId);\n const isOwnConnection =\n this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on(\n 'streamCreated',\n async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantId(\n event?.stream?.connection.connectionId\n );\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings\n .startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection:\n this.ownConnectionId ===\n event?.stream?.connection?.connectionId\n });\n\n trace.info('publisher stream created', {\n event,\n hasAudio: this.currentPublisher?.[\n 'stream.hasAudio'\n ],\n participantId\n });\n }\n );\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n reinitializeStreams = async (settings: SessionSettings): Promise<void> => {\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n await this.createPublisher(settings);\n\n this.subscriberList = this.subscriberList.map((s) => {\n const { connectionId, subscriber } = s;\n const { stream } = subscriber;\n\n this.session?.unsubscribe(subscriber);\n\n return {\n ...s,\n subscriber: this.createSubscriber(stream, connectionId)\n };\n });\n };\n\n streamCreatedHandler = async (\n event: any & {\n stream: any;\n }\n ): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const { stream } = event;\n const { connection } = stream;\n const { connectionId } = connection;\n const participantId = this.getParticipantId(connectionId);\n\n await MediaCapabilitiesService.setDevicesList();\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio\n });\n\n if (\n !this.ownConnectionId ||\n !stream ||\n connectionId === this.ownConnectionId\n ) {\n return;\n }\n\n if (this.subscriberList.length >= maxParticipantsNumber - 1) {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n\n return;\n }\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole: this.getClientRole(connection)\n });\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const { stream } = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantId(\n stream?.connection.connectionId\n ),\n isOwnConnection:\n this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (\n event: any & {\n stream: any;\n reason: string;\n }\n ): void => {\n trace.info('streamDestroyedHandler', event);\n\n const { stream } = event;\n const destroyedConnectionId =\n stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: this.getParticipantId(\n event?.stream?.connection.connectionId\n )\n });\n this.subscriberList = this.subscriberList.filter(\n (subscriber) => subscriber.connectionId !== destroyedConnectionId\n );\n };\n\n connectionCreatedHandler = (\n event: any & {\n connection: any;\n }\n ): void => {\n trace.info('connectionCreatedHandler', event);\n\n const { connection } = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole,\n event,\n participantId: this.getParticipantId(connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (\n event: any & {\n connection: any;\n reason: string;\n }\n ): void => {\n const { connection } = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole,\n event,\n participantId: this.getParticipantId(event?.connection.connectionId)\n });\n\n if (\n !this.ownConnectionId ||\n !connection ||\n connection.connectionId !== this.ownConnectionId\n ) {\n return;\n }\n\n this.emit(\n MULTI_PARTY_EVENTS.participantsNumberChanged,\n this.subscriberList.length\n );\n this.session = undefined;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n\n private createSubscriber = (stream: any, connectionId: string): OT.Subscriber => {\n // ToDo: OT session can be undefined. This needs to be fixed.\n const subscriber = this.session!.subscribe(\n stream,\n this.getParticipantId(connectionId),\n {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI:\n this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n }\n );\n\n return subscriber;\n };\n}\n"]}
|
|
@@ -42,40 +42,6 @@ var __assign = void 0 && (void 0).__assign || function () {
|
|
|
42
42
|
return __assign.apply(this, arguments);
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {
|
|
46
|
-
if (k2 === undefined) k2 = k;
|
|
47
|
-
Object.defineProperty(o, k2, {
|
|
48
|
-
enumerable: true,
|
|
49
|
-
get: function get() {
|
|
50
|
-
return m[k];
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
} : function (o, m, k, k2) {
|
|
54
|
-
if (k2 === undefined) k2 = k;
|
|
55
|
-
o[k2] = m[k];
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {
|
|
59
|
-
Object.defineProperty(o, "default", {
|
|
60
|
-
enumerable: true,
|
|
61
|
-
value: v
|
|
62
|
-
});
|
|
63
|
-
} : function (o, v) {
|
|
64
|
-
o["default"] = v;
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
var __importStar = void 0 && (void 0).__importStar || function (mod) {
|
|
68
|
-
if (mod && mod.__esModule) return mod;
|
|
69
|
-
var result = {};
|
|
70
|
-
if (mod != null) for (var k in mod) {
|
|
71
|
-
if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
__setModuleDefault(result, mod);
|
|
75
|
-
|
|
76
|
-
return result;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
45
|
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
80
46
|
function adopt(value) {
|
|
81
47
|
return value instanceof P ? value : new P(function (resolve) {
|
|
@@ -238,8 +204,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
238
204
|
});
|
|
239
205
|
exports.OpentokMultiPartyService = void 0;
|
|
240
206
|
|
|
241
|
-
var OT = __importStar(require("@opentok/client"));
|
|
242
|
-
|
|
243
207
|
var MediaConstants_1 = require("../MediaConstants");
|
|
244
208
|
|
|
245
209
|
var MediaUtils_1 = require("../MediaUtils");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MultiParty/OpentokMultiPartyService.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__createBinding","o","m","k","k2","undefined","defineProperty","enumerable","get","__setModuleDefault","v","value","__importStar","mod","__esModule","result","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","__generator","body","_","label","sent","trys","ops","f","y","g","verb","Symbol","iterator","op","TypeError","pop","push","__spreadArrays","il","r","a","j","jl","exports","OpentokMultiPartyService","OT","require","MediaConstants_1","MediaUtils_1","MediaCapabilitiesService_1","MediaCapabilitiesUtils_1","MultiPartyService_1","trace","getMediaTracer","OpentokFacingMode","_super","settings","getParticipantId","_this","subscriberList","connect","credentials","session","initSession","apiKey","sessionId","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","error","_a","off","traceErrorCallback","emit","MULTI_PARTY_EVENTS","connectFailed","meta","err","JSON","stringify","createPublisher","disconnect","info","canStartWithAudio","canStartWithVideo","_b","checkAudioCapabilities","checkVideoCapabilities","currentPublisher","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraType_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","setVideoSource","cameraSourceChanged","cameraSource","isMobile","videoSourceId","mobileCameraType","err_2","_c","_d","checkIsMobile","USER","ENVIRONMENT","connection","connectionId","insertMode","fitMode","width","height","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","event","videoElementCreated","streamDestroyed","participantId","stream","isOwnConnection","ownConnectionId","mediaDeviceAccessDenied","_e","_f","_g","setDevicesList","streamCreated","hasAudio","hasVideo","reinitializeStreams","destroy","map","subscriber","unsubscribe","createSubscriber","maxParticipantsNumber","clientRole","getClientRole","videoAudioStatus","destroyedConnectionId","filter","participantsNumberChanged","connectionCreated","connectionDestroyed","subscribe","configurable","data","parse","SessionClientRole","MultiPartyService"],"mappings":"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","file":"OpentokMultiPartyService.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiPartyService = void 0;\nvar OT = __importStar(require(\"@opentok/client\"));\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaUtils_1 = require(\"../MediaUtils\");\nvar MediaCapabilitiesService_1 = require(\"./MediaCapabilitiesService\");\nvar MediaCapabilitiesUtils_1 = require(\"./MediaCapabilitiesUtils\");\nvar MultiPartyService_1 = require(\"./MultiPartyService\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\n// The preferred camera position to use for the video source\nvar OpentokFacingMode;\n(function (OpentokFacingMode) {\n OpentokFacingMode[\"USER\"] = \"user\";\n OpentokFacingMode[\"ENVIRONMENT\"] = \"environment\";\n})(OpentokFacingMode || (OpentokFacingMode = {}));\nvar OpentokMultiPartyService = /** @class */ (function (_super) {\n __extends(OpentokMultiPartyService, _super);\n function OpentokMultiPartyService(settings, getParticipantId) {\n var _this = _super.call(this, settings) || this;\n _this.getParticipantId = getParticipantId;\n _this.subscriberList = [];\n _this.connect = function (credentials) {\n try {\n _this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n _this.session.on('connectionCreated', _this.connectionCreatedHandler);\n _this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this.session.on('streamCreated', _this.streamCreatedHandler);\n _this.session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this.session.on('streamPropertyChanged', _this.streamPropertyChangedHandler);\n _this.session.on('sessionDisconnected', _this.sessionDisconnectedHandler);\n _this.session.connect(credentials.token, function (error) {\n var _a;\n if (error) {\n (_a = _this.session) === null || _a === void 0 ? void 0 : _a.off();\n _this.session = undefined;\n _this.traceErrorCallback(error);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(error) }\n });\n return;\n }\n _this.createPublisher(_this.settings);\n });\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(err) }\n });\n }\n };\n _this.disconnect = function () {\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n _this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n _this.createPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var canStartWithAudio, canStartWithVideo;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canStartWithAudio = _b.sent();\n return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 2:\n canStartWithVideo = _b.sent();\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 4];\n return [4 /*yield*/, this.initPublisher(__assign(__assign({}, settings), { cameraEnabled: settings.cameraEnabled && canStartWithVideo, startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio }))];\n case 3:\n _b.sent();\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n this.currentPublisher && ((_a = this.session) === null || _a === void 0 ? void 0 : _a.publish(this.currentPublisher, this.traceErrorCallback));\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishAudio = function (shouldMute) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishAudio;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canPublishAudio = _a.sent();\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { \n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishAudio(shouldMute);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishVideo = function (shouldPublishVideo) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishVideo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 1:\n canPublishVideo = _a.sent();\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { cameraEnabled: shouldPublishVideo }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishVideo(shouldPublishVideo);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.switchCamera = function () { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesService, deviceId, cameraType_1, err_1;\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _b.sent();\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n deviceId = '';\n switch (this.settings.selectedCamera) {\n case MediaConstants_1.MultiPartyCameraTypes.BACK:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [2 /*return*/, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n _this.settings.selectedCamera = cameraType_1;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType_1\n });\n trace.info(\"Success to switch camera to cameraType: \" + cameraType_1);\n })];\n case 2:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.initPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var selectedCamera, isMobile, mediaCapabilitiesService, frontCameraDeviceId, backCameraDeviceId, videoSourceId, mobileCameraType, err_2;\n var _this = this;\n var _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _d.trys.push([0, 2, , 3]);\n selectedCamera = settings.selectedCamera;\n isMobile = MediaCapabilitiesUtils_1.checkIsMobile();\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _d.sent();\n frontCameraDeviceId = mediaCapabilitiesService.frontCameraDeviceId, backCameraDeviceId = mediaCapabilitiesService.backCameraDeviceId;\n videoSourceId = (selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? frontCameraDeviceId\n : backCameraDeviceId) || undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n this.currentPublisher = OT.initPublisher(this.getParticipantId(((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId) || ''), {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_c = this.branding) === null || _c === void 0 ? void 0 : _c.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n }, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n }\n else {\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n var _a;\n trace.info('Publisher stream destroyed', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)\n });\n });\n this.currentPublisher.on('accessDenied', function (event) {\n var _a;\n trace.info('Publisher denied media permissions', event);\n var connection = (_a = _this.session) === null || _a === void 0 ? void 0 : _a.connection;\n var connectionId = connection === null || connection === void 0 ? void 0 : connection.connectionId;\n var participantId = _this.getParticipantId(connectionId);\n var isOwnConnection = _this.ownConnectionId === connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId: connectionId,\n isOwnConnection: isOwnConnection,\n participantId: participantId\n });\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var participantId;\n var _a, _b, _c, _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _g.sent();\n participantId = this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings\n .startWithAudioMuted,\n hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio,\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n isOwnConnection: this.ownConnectionId === ((_e = (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.connection) === null || _e === void 0 ? void 0 : _e.connectionId)\n });\n trace.info('publisher stream created', {\n event: event,\n hasAudio: (_f = this.currentPublisher) === null || _f === void 0 ? void 0 : _f['stream.hasAudio'],\n participantId: participantId\n });\n return [2 /*return*/];\n }\n });\n }); });\n }\n return [3 /*break*/, 3];\n case 2:\n err_2 = _d.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.reinitializeStreams = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n return [4 /*yield*/, this.createPublisher(settings)];\n case 1:\n _a.sent();\n this.subscriberList = this.subscriberList.map(function (s) {\n var _a;\n var connectionId = s.connectionId, subscriber = s.subscriber;\n var stream = subscriber.stream;\n (_a = _this.session) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber);\n return __assign(__assign({}, s), { subscriber: _this.createSubscriber(stream, connectionId) });\n });\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, connectionId, participantId, subscriber;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection;\n connectionId = connection.connectionId;\n participantId = this.getParticipantId(connectionId);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _c.sent();\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: (_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.hasVideo,\n hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio\n });\n if (!this.ownConnectionId ||\n !stream ||\n connectionId === this.ownConnectionId) {\n return [2 /*return*/];\n }\n if (this.subscriberList.length >= MultiPartyService_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n return [2 /*return*/];\n }\n subscriber = this.createSubscriber(stream, connectionId);\n this.subscriberList.push({\n subscriber: subscriber,\n connectionId: connectionId,\n clientRole: this.getClientRole(connection)\n });\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamPropertyChangedHandler = function (event) {\n var _a;\n trace.info('streamPropertyChangedHandler', event);\n var stream = event.stream;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream === null || stream === void 0 ? void 0 : stream.hasVideo,\n hasAudio: stream === null || stream === void 0 ? void 0 : stream.hasAudio,\n participantId: _this.getParticipantId(stream === null || stream === void 0 ? void 0 : stream.connection.connectionId),\n isOwnConnection: _this.ownConnectionId === ((_a = stream === null || stream === void 0 ? void 0 : stream.connection) === null || _a === void 0 ? void 0 : _a.connectionId),\n stream: stream\n });\n };\n _this.streamDestroyedHandler = function (event) {\n var _a;\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)\n });\n _this.subscriberList = _this.subscriberList.filter(function (subscriber) { return subscriber.connectionId !== destroyedConnectionId; });\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.subscriberList.length);\n var clientRole = _this.getClientRole(connection);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole: clientRole,\n event: event,\n participantId: _this.getParticipantId(connection.connectionId),\n isOwnConnection: _this.ownConnectionId === connection.connectionId\n });\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var clientRole = _this.getClientRole(connection);\n trace.info('connectionDestroyedHandler', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole: clientRole,\n event: event,\n participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId)\n });\n if (!_this.ownConnectionId ||\n !connection ||\n connection.connectionId !== _this.ownConnectionId) {\n return;\n }\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.subscriberList.length);\n _this.session = undefined;\n };\n _this.traceErrorCallback = function (error) {\n trace.error(JSON.stringify(error));\n };\n _this.sessionDisconnectedHandler = function (event) {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n _this.createSubscriber = function (stream, connectionId) {\n var _a;\n // ToDo: OT session can be undefined. This needs to be fixed.\n var subscriber = _this.session.subscribe(stream, _this.getParticipantId(connectionId), {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_a = _this.branding) === null || _a === void 0 ? void 0 : _a.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n }\n }, function (err) {\n _this.traceErrorCallback(err);\n subscriber === null || subscriber === void 0 ? void 0 : subscriber.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n });\n return subscriber;\n };\n _this.branding = settings.branding;\n return _this;\n }\n Object.defineProperty(OpentokMultiPartyService.prototype, \"ownConnectionId\", {\n get: function () {\n var _a, _b;\n return ((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId) || '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(OpentokMultiPartyService.prototype, \"subscribers\", {\n get: function () {\n return __spreadArrays(this.subscriberList);\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiPartyService.prototype.getClientRole = function (connection) {\n return (((connection === null || connection === void 0 ? void 0 : connection.data) && JSON.parse(connection.data).clientRole) ||\n MediaConstants_1.SessionClientRole.USER);\n };\n return OpentokMultiPartyService;\n}(MultiPartyService_1.MultiPartyService));\nexports.OpentokMultiPartyService = OpentokMultiPartyService;\n\n//# sourceMappingURL=OpentokMultiPartyService.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MultiParty/OpentokMultiPartyService.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","_","label","sent","trys","ops","f","y","g","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArrays","il","r","k","a","j","jl","defineProperty","exports","OpentokMultiPartyService","MediaConstants_1","require","MediaUtils_1","MediaCapabilitiesService_1","MediaCapabilitiesUtils_1","MultiPartyService_1","trace","getMediaTracer","OpentokFacingMode","_super","settings","getParticipantId","_this","subscriberList","connect","credentials","session","OT","initSession","apiKey","sessionId","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","error","_a","off","undefined","traceErrorCallback","emit","MULTI_PARTY_EVENTS","connectFailed","meta","err","JSON","stringify","createPublisher","disconnect","info","canStartWithAudio","canStartWithVideo","_b","checkAudioCapabilities","checkVideoCapabilities","currentPublisher","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraType_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","setVideoSource","cameraSourceChanged","cameraSource","isMobile","videoSourceId","mobileCameraType","err_2","_c","_d","checkIsMobile","USER","ENVIRONMENT","connection","connectionId","insertMode","fitMode","width","height","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","event","videoElementCreated","streamDestroyed","participantId","stream","isOwnConnection","ownConnectionId","mediaDeviceAccessDenied","_e","_f","_g","setDevicesList","streamCreated","hasAudio","hasVideo","reinitializeStreams","destroy","map","subscriber","unsubscribe","createSubscriber","maxParticipantsNumber","clientRole","getClientRole","videoAudioStatus","destroyedConnectionId","filter","participantsNumberChanged","connectionCreated","connectionDestroyed","subscribe","get","enumerable","configurable","data","parse","SessionClientRole","MultiPartyService"],"mappings":"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","file":"OpentokMultiPartyService.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiPartyService = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaUtils_1 = require(\"../MediaUtils\");\nvar MediaCapabilitiesService_1 = require(\"./MediaCapabilitiesService\");\nvar MediaCapabilitiesUtils_1 = require(\"./MediaCapabilitiesUtils\");\nvar MultiPartyService_1 = require(\"./MultiPartyService\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\n// The preferred camera position to use for the video source\nvar OpentokFacingMode;\n(function (OpentokFacingMode) {\n OpentokFacingMode[\"USER\"] = \"user\";\n OpentokFacingMode[\"ENVIRONMENT\"] = \"environment\";\n})(OpentokFacingMode || (OpentokFacingMode = {}));\nvar OpentokMultiPartyService = /** @class */ (function (_super) {\n __extends(OpentokMultiPartyService, _super);\n function OpentokMultiPartyService(settings, getParticipantId) {\n var _this = _super.call(this, settings) || this;\n _this.getParticipantId = getParticipantId;\n _this.subscriberList = [];\n _this.connect = function (credentials) {\n try {\n _this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n _this.session.on('connectionCreated', _this.connectionCreatedHandler);\n _this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this.session.on('streamCreated', _this.streamCreatedHandler);\n _this.session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this.session.on('streamPropertyChanged', _this.streamPropertyChangedHandler);\n _this.session.on('sessionDisconnected', _this.sessionDisconnectedHandler);\n _this.session.connect(credentials.token, function (error) {\n var _a;\n if (error) {\n (_a = _this.session) === null || _a === void 0 ? void 0 : _a.off();\n _this.session = undefined;\n _this.traceErrorCallback(error);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(error) }\n });\n return;\n }\n _this.createPublisher(_this.settings);\n });\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, {\n meta: { err: JSON.stringify(err) }\n });\n }\n };\n _this.disconnect = function () {\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n _this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n _this.createPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var canStartWithAudio, canStartWithVideo;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canStartWithAudio = _b.sent();\n return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 2:\n canStartWithVideo = _b.sent();\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 4];\n return [4 /*yield*/, this.initPublisher(__assign(__assign({}, settings), { cameraEnabled: settings.cameraEnabled && canStartWithVideo, startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio }))];\n case 3:\n _b.sent();\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n this.currentPublisher && ((_a = this.session) === null || _a === void 0 ? void 0 : _a.publish(this.currentPublisher, this.traceErrorCallback));\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishAudio = function (shouldMute) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishAudio;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canPublishAudio = _a.sent();\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { \n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishAudio(shouldMute);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishVideo = function (shouldPublishVideo) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishVideo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 1:\n canPublishVideo = _a.sent();\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { cameraEnabled: shouldPublishVideo }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishVideo(shouldPublishVideo);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.switchCamera = function () { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesService, deviceId, cameraType_1, err_1;\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _b.sent();\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n deviceId = '';\n switch (this.settings.selectedCamera) {\n case MediaConstants_1.MultiPartyCameraTypes.BACK:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [2 /*return*/, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n _this.settings.selectedCamera = cameraType_1;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.cameraSourceChanged, {\n cameraSource: cameraType_1\n });\n trace.info(\"Success to switch camera to cameraType: \" + cameraType_1);\n })];\n case 2:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.initPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var selectedCamera, isMobile, mediaCapabilitiesService, frontCameraDeviceId, backCameraDeviceId, videoSourceId, mobileCameraType, err_2;\n var _this = this;\n var _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _d.trys.push([0, 2, , 3]);\n selectedCamera = settings.selectedCamera;\n isMobile = MediaCapabilitiesUtils_1.checkIsMobile();\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _d.sent();\n frontCameraDeviceId = mediaCapabilitiesService.frontCameraDeviceId, backCameraDeviceId = mediaCapabilitiesService.backCameraDeviceId;\n videoSourceId = (selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? frontCameraDeviceId\n : backCameraDeviceId) || undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n this.currentPublisher = OT.initPublisher(this.getParticipantId(((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId) || ''), {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_c = this.branding) === null || _c === void 0 ? void 0 : _c.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n }, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n }\n else {\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n var _a;\n trace.info('Publisher stream destroyed', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)\n });\n });\n this.currentPublisher.on('accessDenied', function (event) {\n var _a;\n trace.info('Publisher denied media permissions', event);\n var connection = (_a = _this.session) === null || _a === void 0 ? void 0 : _a.connection;\n var connectionId = connection === null || connection === void 0 ? void 0 : connection.connectionId;\n var participantId = _this.getParticipantId(connectionId);\n var isOwnConnection = _this.ownConnectionId === connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId: connectionId,\n isOwnConnection: isOwnConnection,\n participantId: participantId\n });\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var participantId;\n var _a, _b, _c, _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _g.sent();\n participantId = this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings\n .startWithAudioMuted,\n hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio,\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n isOwnConnection: this.ownConnectionId === ((_e = (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.connection) === null || _e === void 0 ? void 0 : _e.connectionId)\n });\n trace.info('publisher stream created', {\n event: event,\n hasAudio: (_f = this.currentPublisher) === null || _f === void 0 ? void 0 : _f['stream.hasAudio'],\n participantId: participantId\n });\n return [2 /*return*/];\n }\n });\n }); });\n }\n return [3 /*break*/, 3];\n case 2:\n err_2 = _d.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.reinitializeStreams = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n return [4 /*yield*/, this.createPublisher(settings)];\n case 1:\n _a.sent();\n this.subscriberList = this.subscriberList.map(function (s) {\n var _a;\n var connectionId = s.connectionId, subscriber = s.subscriber;\n var stream = subscriber.stream;\n (_a = _this.session) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriber);\n return __assign(__assign({}, s), { subscriber: _this.createSubscriber(stream, connectionId) });\n });\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, connectionId, participantId, subscriber;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection;\n connectionId = connection.connectionId;\n participantId = this.getParticipantId(connectionId);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _c.sent();\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {\n event: event,\n participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === connectionId,\n hasVideo: (_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.hasVideo,\n hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio\n });\n if (!this.ownConnectionId ||\n !stream ||\n connectionId === this.ownConnectionId) {\n return [2 /*return*/];\n }\n if (this.subscriberList.length >= MultiPartyService_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n return [2 /*return*/];\n }\n subscriber = this.createSubscriber(stream, connectionId);\n this.subscriberList.push({\n subscriber: subscriber,\n connectionId: connectionId,\n clientRole: this.getClientRole(connection)\n });\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamPropertyChangedHandler = function (event) {\n var _a;\n trace.info('streamPropertyChangedHandler', event);\n var stream = event.stream;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream === null || stream === void 0 ? void 0 : stream.hasVideo,\n hasAudio: stream === null || stream === void 0 ? void 0 : stream.hasAudio,\n participantId: _this.getParticipantId(stream === null || stream === void 0 ? void 0 : stream.connection.connectionId),\n isOwnConnection: _this.ownConnectionId === ((_a = stream === null || stream === void 0 ? void 0 : stream.connection) === null || _a === void 0 ? void 0 : _a.connectionId),\n stream: stream\n });\n };\n _this.streamDestroyedHandler = function (event) {\n var _a;\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {\n event: event,\n participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)\n });\n _this.subscriberList = _this.subscriberList.filter(function (subscriber) { return subscriber.connectionId !== destroyedConnectionId; });\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.subscriberList.length);\n var clientRole = _this.getClientRole(connection);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole: clientRole,\n event: event,\n participantId: _this.getParticipantId(connection.connectionId),\n isOwnConnection: _this.ownConnectionId === connection.connectionId\n });\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var clientRole = _this.getClientRole(connection);\n trace.info('connectionDestroyedHandler', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, {\n clientRole: clientRole,\n event: event,\n participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId)\n });\n if (!_this.ownConnectionId ||\n !connection ||\n connection.connectionId !== _this.ownConnectionId) {\n return;\n }\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.subscriberList.length);\n _this.session = undefined;\n };\n _this.traceErrorCallback = function (error) {\n trace.error(JSON.stringify(error));\n };\n _this.sessionDisconnectedHandler = function (event) {\n trace.info('sessionDisconnectedHandler', event);\n // ToDo: Below line makes no sense (according to the OT types). This is not how OT signals work.\n // this?.session?.signal({ retryAfterReconnect: true });\n };\n _this.createSubscriber = function (stream, connectionId) {\n var _a;\n // ToDo: OT session can be undefined. This needs to be fixed.\n var subscriber = _this.session.subscribe(stream, _this.getParticipantId(connectionId), {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_a = _this.branding) === null || _a === void 0 ? void 0 : _a.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n }\n }, function (err) {\n _this.traceErrorCallback(err);\n subscriber === null || subscriber === void 0 ? void 0 : subscriber.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n });\n return subscriber;\n };\n _this.branding = settings.branding;\n return _this;\n }\n Object.defineProperty(OpentokMultiPartyService.prototype, \"ownConnectionId\", {\n get: function () {\n var _a, _b;\n return ((_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId) || '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(OpentokMultiPartyService.prototype, \"subscribers\", {\n get: function () {\n return __spreadArrays(this.subscriberList);\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiPartyService.prototype.getClientRole = function (connection) {\n return (((connection === null || connection === void 0 ? void 0 : connection.data) && JSON.parse(connection.data).clientRole) ||\n MediaConstants_1.SessionClientRole.USER);\n };\n return OpentokMultiPartyService;\n}(MultiPartyService_1.MultiPartyService));\nexports.OpentokMultiPartyService = OpentokMultiPartyService;\n\n//# sourceMappingURL=OpentokMultiPartyService.js.map\n"]}
|
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
declare namespace OT {
|
|
2
|
+
export type OTError = {
|
|
3
|
+
name: string;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export type Dimensions = {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ScreenSharingCapabilityResponse = {
|
|
13
|
+
extensionInstalled?: boolean;
|
|
14
|
+
supported: boolean;
|
|
15
|
+
supportedSources: {
|
|
16
|
+
application?: boolean;
|
|
17
|
+
screen?: boolean;
|
|
18
|
+
window?: boolean;
|
|
19
|
+
};
|
|
20
|
+
extensionRequired?: string;
|
|
21
|
+
extensionRegistered?: boolean;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export function checkScreenSharingCapability(
|
|
25
|
+
callback: (response: ScreenSharingCapabilityResponse) => void
|
|
26
|
+
): void;
|
|
27
|
+
|
|
28
|
+
export function checkSystemRequirements(): number;
|
|
29
|
+
|
|
30
|
+
export type Device = {
|
|
31
|
+
kind: 'audioInput' | 'videoInput';
|
|
32
|
+
deviceId: string;
|
|
33
|
+
label: string;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export function getDevices(
|
|
37
|
+
callback: (error: OTError | undefined, devices?: Device[]) => void
|
|
38
|
+
): void;
|
|
39
|
+
|
|
40
|
+
export function setProxyUrl(proxyUrl: string): void;
|
|
41
|
+
|
|
42
|
+
export function getSupportedCodecs(): Promise<{ videoEncoders: ('H264' | 'VP8')[], videoDecoders: ('H264' | 'VP8')[] }>;
|
|
43
|
+
|
|
44
|
+
export type WidgetStyle = {
|
|
45
|
+
audioLevelDisplayMode: 'auto' | 'on' | 'off';
|
|
46
|
+
backgroundImageURI: string;
|
|
47
|
+
buttonDisplayMode: 'auto' | 'on' | 'off';
|
|
48
|
+
nameDisplayMode: 'auto' | 'on' | 'off';
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export type WidgetProperties = {
|
|
52
|
+
fitMode?: 'cover' | 'contain';
|
|
53
|
+
insertDefaultUI?: boolean;
|
|
54
|
+
insertMode?: 'replace' | 'after' | 'before' | 'append';
|
|
55
|
+
showControls?: boolean;
|
|
56
|
+
width?: string | number;
|
|
57
|
+
height?: string | number;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type PublisherStyle = WidgetStyle & {
|
|
61
|
+
archiveStatusDisplayMode: 'auto' | 'off';
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type GetUserMediaProperties = {
|
|
65
|
+
audioSource?: string | null | boolean | MediaStreamTrack;
|
|
66
|
+
disableAudioProcessing?: boolean;
|
|
67
|
+
echoCancellation?: boolean;
|
|
68
|
+
noiseSuppression?: boolean;
|
|
69
|
+
autoGainControl?: boolean;
|
|
70
|
+
facingMode?: 'user' | 'environment' | 'left' | 'right';
|
|
71
|
+
frameRate?: 30 | 15 | 7 | 1;
|
|
72
|
+
maxResolution?: Dimensions;
|
|
73
|
+
resolution?: (
|
|
74
|
+
'1280x960' |
|
|
75
|
+
'1280x720' |
|
|
76
|
+
'640x480' |
|
|
77
|
+
'640x360' |
|
|
78
|
+
'320x240' |
|
|
79
|
+
'320x180'
|
|
80
|
+
);
|
|
81
|
+
videoSource?: string | null | boolean | MediaStreamTrack;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type PublisherProperties = WidgetProperties & GetUserMediaProperties & {
|
|
85
|
+
audioBitrate?: number;
|
|
86
|
+
audioFallbackEnabled?: boolean;
|
|
87
|
+
mirror?: boolean;
|
|
88
|
+
name?: string;
|
|
89
|
+
publishAudio?: boolean;
|
|
90
|
+
publishVideo?: boolean;
|
|
91
|
+
style?: Partial<PublisherStyle>;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export type SubscriberStyle = WidgetStyle & {
|
|
95
|
+
videoDisabledDisplayMode: 'auto' | 'on' | 'off';
|
|
96
|
+
audioBlockedDisplayMode: 'auto' | 'on' | 'off';
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export type SubscriberProperties = WidgetProperties & {
|
|
100
|
+
audioVolume?: number;
|
|
101
|
+
preferredFrameRate?: number;
|
|
102
|
+
preferredResolution?: Dimensions;
|
|
103
|
+
style?: Partial<SubscriberStyle>;
|
|
104
|
+
subscribeToAudio?: boolean;
|
|
105
|
+
subscribeToVideo?: boolean;
|
|
106
|
+
testNetwork?: boolean;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export class Connection {
|
|
110
|
+
connectionId: string;
|
|
111
|
+
creationTime: number;
|
|
112
|
+
data: string;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export class Stream {
|
|
116
|
+
connection: Connection;
|
|
117
|
+
creationTime: number;
|
|
118
|
+
frameRate: number;
|
|
119
|
+
hasAudio: boolean;
|
|
120
|
+
hasVideo: boolean;
|
|
121
|
+
name: string;
|
|
122
|
+
streamId: string;
|
|
123
|
+
videoDimensions: {
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
};
|
|
127
|
+
videoType: 'camera' | 'screen';
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export type Event<Type, Target> = {
|
|
131
|
+
type: Type;
|
|
132
|
+
cancelable: boolean;
|
|
133
|
+
target: Target;
|
|
134
|
+
|
|
135
|
+
isDefaultPrevented(): boolean;
|
|
136
|
+
preventDefault(): void;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export type ExceptionEvent = Event<'exception', {}> & {
|
|
140
|
+
code: number;
|
|
141
|
+
message: string;
|
|
142
|
+
title: string;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export type VideoDimensionsChangedEvent<Target> = Event<'videoDimensionsChanged', Target> & {
|
|
146
|
+
oldValue: Dimensions;
|
|
147
|
+
newValue: Dimensions;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
class OTEventEmitter<EventMap> {
|
|
151
|
+
on<EventName extends keyof EventMap>(
|
|
152
|
+
eventName: EventName,
|
|
153
|
+
callback: (event: EventMap[EventName]) => void,
|
|
154
|
+
context?: object
|
|
155
|
+
): void;
|
|
156
|
+
|
|
157
|
+
on(
|
|
158
|
+
eventName: string,
|
|
159
|
+
callback: (event: Event<string, any>) => void,
|
|
160
|
+
context?: object
|
|
161
|
+
): void;
|
|
162
|
+
|
|
163
|
+
on(
|
|
164
|
+
eventMap: object,
|
|
165
|
+
context?: object
|
|
166
|
+
): void;
|
|
167
|
+
|
|
168
|
+
once<EventName extends keyof EventMap>(
|
|
169
|
+
eventName: EventName,
|
|
170
|
+
callback: (event: EventMap[EventName]) => void,
|
|
171
|
+
context?: object
|
|
172
|
+
): void;
|
|
173
|
+
|
|
174
|
+
once(
|
|
175
|
+
eventName: string,
|
|
176
|
+
callback: (event: Event<string, any>) => void,
|
|
177
|
+
context?: object
|
|
178
|
+
): void;
|
|
179
|
+
|
|
180
|
+
once(
|
|
181
|
+
eventMap: object,
|
|
182
|
+
context?: object
|
|
183
|
+
): void;
|
|
184
|
+
|
|
185
|
+
off<EventName extends keyof EventMap>(
|
|
186
|
+
eventName?: EventName,
|
|
187
|
+
callback?: (event: EventMap[EventName]) => void,
|
|
188
|
+
context?: object
|
|
189
|
+
): void;
|
|
190
|
+
|
|
191
|
+
off(
|
|
192
|
+
eventName?: string,
|
|
193
|
+
callback?: (event: Event<string, any>) => void,
|
|
194
|
+
context?: object
|
|
195
|
+
): void;
|
|
196
|
+
|
|
197
|
+
off(
|
|
198
|
+
eventMap: object,
|
|
199
|
+
context?: object
|
|
200
|
+
): void;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export class Publisher extends OTEventEmitter<{
|
|
204
|
+
accessAllowed: Event<'accessAllowed', Publisher>;
|
|
205
|
+
accessDenied: Event<'accessDenied', Publisher>;
|
|
206
|
+
accessDialogClosed: Event<'accessDialogClosed', Publisher>;
|
|
207
|
+
accessDialogOpened: Event<'accessDialogOpened', Publisher>;
|
|
208
|
+
|
|
209
|
+
audioLevelUpdated: Event<'audioLevelUpdated', Publisher> & {
|
|
210
|
+
audioLevel: number
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
destroyed: Event<'destroyed', Publisher>;
|
|
214
|
+
|
|
215
|
+
mediaStopped: Event<'mediaStopped', Publisher> & {
|
|
216
|
+
track: MediaStreamTrack | undefined
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
streamCreated: Event<'streamCreated', Publisher> & {
|
|
220
|
+
stream: Stream;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
streamDestroyed: Event<'streamDestroyed', Publisher> & {
|
|
224
|
+
stream: Stream;
|
|
225
|
+
reason: string;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
videoDimensionsChanged: VideoDimensionsChangedEvent<Publisher>;
|
|
229
|
+
|
|
230
|
+
videoElementCreated: Event<'videoElementCreated', Publisher> & {
|
|
231
|
+
element: HTMLVideoElement | HTMLObjectElement;
|
|
232
|
+
};
|
|
233
|
+
}> {
|
|
234
|
+
accessAllowed: boolean;
|
|
235
|
+
element?: HTMLElement | undefined;
|
|
236
|
+
id?: string;
|
|
237
|
+
stream?: Stream;
|
|
238
|
+
session?: Session;
|
|
239
|
+
|
|
240
|
+
destroy(): void;
|
|
241
|
+
getImgData(): string | null;
|
|
242
|
+
getStats(callback: (error?: OTError, stats?: PublisherStatsArr) => void): void;
|
|
243
|
+
getRtcStatsReport(): Promise<PublisherRtcStatsReportArr>;
|
|
244
|
+
getStyle(): PublisherProperties;
|
|
245
|
+
publishAudio(value: boolean): void;
|
|
246
|
+
publishVideo(value: boolean): void;
|
|
247
|
+
cycleVideo(): Promise<{ deviceId: string }>;
|
|
248
|
+
setAudioSource(audioSource:string | MediaStreamTrack): Promise<undefined>;
|
|
249
|
+
getAudioSource(): MediaStreamTrack;
|
|
250
|
+
setVideoSource(videoSourceId: string): Promise<undefined>;
|
|
251
|
+
getVideoSource(): {deviceId: string | null, type: string | null, track: MediaStreamTrack | null};
|
|
252
|
+
setStyle<Style extends keyof PublisherStyle>(style: Style, value: PublisherStyle[Style]): void;
|
|
253
|
+
videoWidth(): number | undefined;
|
|
254
|
+
videoHeight(): number | undefined;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export function getUserMedia(
|
|
258
|
+
properties?: GetUserMediaProperties
|
|
259
|
+
): Promise<MediaStream>;
|
|
260
|
+
|
|
261
|
+
export function initPublisher(
|
|
262
|
+
targetElement?: HTMLElement | string,
|
|
263
|
+
properties?: PublisherProperties,
|
|
264
|
+
callback?: (error?: OTError) => void
|
|
265
|
+
): Publisher;
|
|
266
|
+
|
|
267
|
+
export function log(message: string): void;
|
|
268
|
+
|
|
269
|
+
export function off(
|
|
270
|
+
eventName?: 'exception',
|
|
271
|
+
callback?: (event: ExceptionEvent) => void,
|
|
272
|
+
context?: object
|
|
273
|
+
): void;
|
|
274
|
+
|
|
275
|
+
export function on(
|
|
276
|
+
eventName: 'exception',
|
|
277
|
+
callback: (event: ExceptionEvent) => void,
|
|
278
|
+
context?: object
|
|
279
|
+
): void;
|
|
280
|
+
|
|
281
|
+
export function once(
|
|
282
|
+
eventName: 'exception',
|
|
283
|
+
callback: (event: ExceptionEvent) => void,
|
|
284
|
+
context?: object
|
|
285
|
+
): void;
|
|
286
|
+
|
|
287
|
+
export class Session extends OTEventEmitter<{
|
|
288
|
+
archiveStarted: Event<'archiveStarted', Session> & {
|
|
289
|
+
id: string;
|
|
290
|
+
name: string;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
archiveStopped: Event<'archiveStopped', Session> & {
|
|
294
|
+
id: string;
|
|
295
|
+
name: string;
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
connectionCreated: Event<'connectionCreated', Session> & {
|
|
299
|
+
connection: Connection;
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
connectionDestroyed: Event<'connectionDestroyed', Session> & {
|
|
303
|
+
connection: Connection;
|
|
304
|
+
reason: string;
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
sessionConnected: Event<'sessionConnected', Session>;
|
|
308
|
+
|
|
309
|
+
sessionDisconnected: Event<'sessionDisconnected', Session> & {
|
|
310
|
+
reason: string;
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
sessionReconnected: Event<'sessionReconnected', Session>;
|
|
314
|
+
sessionReconnecting: Event<'sessionReconnecting', Session>;
|
|
315
|
+
|
|
316
|
+
signal: Event<'signal', Session> & {
|
|
317
|
+
type?: string;
|
|
318
|
+
data?: string;
|
|
319
|
+
from: Connection;
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
streamCreated: Event<'streamCreated', Session> & {
|
|
323
|
+
stream: Stream;
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
streamDestroyed: Event<'streamDestroyed', Session> & {
|
|
327
|
+
stream: Stream;
|
|
328
|
+
reason: string;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
streamPropertyChanged: (
|
|
332
|
+
Event<'streamPropertyChanged', Session> & {
|
|
333
|
+
stream: Stream;
|
|
334
|
+
} & (
|
|
335
|
+
{ changedProperty: 'hasAudio'; oldValue: boolean; newValue: boolean; } |
|
|
336
|
+
{ changedProperty: 'hasVideo'; oldValue: boolean; newValue: boolean; } |
|
|
337
|
+
{ changedProperty: 'videoDimensions'; oldValue: Dimensions; newValue: Dimensions; }
|
|
338
|
+
)
|
|
339
|
+
);
|
|
340
|
+
}> {
|
|
341
|
+
capabilities: {
|
|
342
|
+
forceDisconnect: number;
|
|
343
|
+
forceUnpublish: number;
|
|
344
|
+
publish: number;
|
|
345
|
+
subscribe: number;
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
connection?: Connection;
|
|
349
|
+
sessionId: string;
|
|
350
|
+
|
|
351
|
+
connect(token: string, callback: (error?: OTError) => void): void;
|
|
352
|
+
disconnect(): void;
|
|
353
|
+
forceDisconnect(connection: Connection, callback: (error?: OTError) => void): void;
|
|
354
|
+
forceUnpublish(stream: Stream, callback: (error?: OTError) => void): void;
|
|
355
|
+
getPublisherForStream(stream: Stream): Publisher | undefined;
|
|
356
|
+
getSubscribersForStream(stream: Stream): [Subscriber];
|
|
357
|
+
publish(publisher: Publisher, callback?: (error?: OTError) => void): Publisher;
|
|
358
|
+
publish(targetElement: string | HTMLElement, properties?: PublisherProperties, callback?: (error?: OTError) => void): Publisher;
|
|
359
|
+
|
|
360
|
+
signal(
|
|
361
|
+
signal: { type?: string, data?: string, to?: Connection },
|
|
362
|
+
callback: (error?: OTError) => void
|
|
363
|
+
): void;
|
|
364
|
+
|
|
365
|
+
subscribe(
|
|
366
|
+
stream: Stream,
|
|
367
|
+
targetElement?: HTMLElement | string,
|
|
368
|
+
properties?: SubscriberProperties,
|
|
369
|
+
callback?: (error?: OTError) => void
|
|
370
|
+
): Subscriber;
|
|
371
|
+
|
|
372
|
+
unpublish(publisher: Publisher): void;
|
|
373
|
+
unsubscribe(subscriber: Subscriber): void;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export function initSession(
|
|
377
|
+
partnerId: string,
|
|
378
|
+
sessionId: string,
|
|
379
|
+
options?: {
|
|
380
|
+
connectionEventsSuppressed?: boolean;
|
|
381
|
+
iceConfig?: {
|
|
382
|
+
includeServers: 'all' | 'custom';
|
|
383
|
+
transportPolicy: 'all' | 'relay';
|
|
384
|
+
customServers: {
|
|
385
|
+
urls: string | string[];
|
|
386
|
+
username?: string;
|
|
387
|
+
credential?: string;
|
|
388
|
+
}[];
|
|
389
|
+
};
|
|
390
|
+
ipWhitelist?: boolean;
|
|
391
|
+
}
|
|
392
|
+
): Session;
|
|
393
|
+
|
|
394
|
+
export type IncomingTrackStats = {
|
|
395
|
+
bytesReceived: number;
|
|
396
|
+
packetsLost: number;
|
|
397
|
+
packetsReceived: number;
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
export type OutgoingTrackStats = {
|
|
401
|
+
bytesSent: number;
|
|
402
|
+
packetsLost: number;
|
|
403
|
+
packetsSent: number;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export type SubscriberStats = {
|
|
407
|
+
audio: IncomingTrackStats;
|
|
408
|
+
video: IncomingTrackStats & { frameRate: number; };
|
|
409
|
+
timestamp: number;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
export type PublisherStats = {
|
|
413
|
+
audio: OutgoingTrackStats;
|
|
414
|
+
video: OutgoingTrackStats & { frameRate: number; };
|
|
415
|
+
timestamp: number;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
export type PublisherStatContainer = {
|
|
419
|
+
subscriberId?: string,
|
|
420
|
+
connectionId?: string,
|
|
421
|
+
stats: PublisherStats
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
export type PublisherStatsArr = PublisherStatContainer[];
|
|
425
|
+
|
|
426
|
+
export type PublisherRtcStatsReportContainer = {
|
|
427
|
+
subscriberId?: string,
|
|
428
|
+
connectionId?: string,
|
|
429
|
+
rtcStatsReport: RTCStatsReport
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export type PublisherRtcStatsReportArr = PublisherRtcStatsReportContainer[];
|
|
433
|
+
|
|
434
|
+
export class Subscriber extends OTEventEmitter<{
|
|
435
|
+
audioLevelUpdated: Event<'audioLevelUpdated', Subscriber> & {
|
|
436
|
+
audioLevel: number
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
connected: Event<'connected', Subscriber>;
|
|
440
|
+
|
|
441
|
+
destroyed: Event<'destroyed', Subscriber> & {
|
|
442
|
+
reason: string;
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
videoDimensionsChanged: VideoDimensionsChangedEvent<Subscriber>;
|
|
446
|
+
|
|
447
|
+
videoDisabled: Event<'videoDisabled', Subscriber> & {
|
|
448
|
+
reason: string;
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
videoDisableWarning: Event<'videoDisableWarning', Subscriber>;
|
|
452
|
+
videoDisableWarningLifted: Event<'videoDisableWarningLifted', Subscriber>;
|
|
453
|
+
|
|
454
|
+
videoElementCreated: Event<'videoElementCreated', Subscriber> & {
|
|
455
|
+
element: HTMLVideoElement | HTMLObjectElement;
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
videoEnabled: Event<'videoEnabled', Subscriber> & {
|
|
459
|
+
reason: string;
|
|
460
|
+
};
|
|
461
|
+
}> {
|
|
462
|
+
element?: HTMLElement;
|
|
463
|
+
id?: string;
|
|
464
|
+
stream?: Stream;
|
|
465
|
+
|
|
466
|
+
getAudioVolume(): number;
|
|
467
|
+
getImgData(): string | null;
|
|
468
|
+
getStats(callback: (error?: OTError, stats?: SubscriberStats) => void): void;
|
|
469
|
+
getRtcStatsReport(): Promise<RTCStatsReport>;
|
|
470
|
+
restrictFrameRate(value: boolean): void;
|
|
471
|
+
setAudioVolume(volume: number): void;
|
|
472
|
+
setPreferredFrameRate(frameRate: number): void;
|
|
473
|
+
setPreferredResolution(resolution: Dimensions): void;
|
|
474
|
+
subscribeToAudio(value: boolean): void;
|
|
475
|
+
subscribeToVideo(value: boolean): void;
|
|
476
|
+
|
|
477
|
+
setStyle<Style extends keyof SubscriberStyle>(
|
|
478
|
+
style: Style,
|
|
479
|
+
value: SubscriberStyle[Style]
|
|
480
|
+
): void;
|
|
481
|
+
|
|
482
|
+
videoHeight(): number | undefined;
|
|
483
|
+
videoWidth(): number | undefined;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
export function registerScreenSharingExtension(
|
|
487
|
+
kind: string,
|
|
488
|
+
id: string,
|
|
489
|
+
version: number
|
|
490
|
+
): void;
|
|
491
|
+
|
|
492
|
+
export function reportIssue(callback: (error?: OTError, reportId?: string) => void): void;
|
|
493
|
+
|
|
494
|
+
export function setLogLevel(level: number): void;
|
|
495
|
+
|
|
496
|
+
export function upgradeSystemRequirements(): void;
|
|
497
|
+
|
|
498
|
+
export function unblockAudio(): Promise<undefined>;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
declare module '@opentok/client' {
|
|
502
|
+
export = OT;
|
|
503
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@techsee/techsee-media-service",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "Techsee Media Service",
|
|
5
5
|
"author": "TechSee",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@techsee/kurento-utils-temasys-mod": "6.6.3-dev-3",
|
|
22
22
|
"@techsee/openvidu-browser": "~12.15.6",
|
|
23
|
-
"@techsee/techsee-common": "^2.
|
|
23
|
+
"@techsee/techsee-common": "^2.23.1",
|
|
24
24
|
"bluebird": "~3.7.2",
|
|
25
25
|
"kurento-utils": "6.6.2",
|
|
26
26
|
"lodash": "4.17.20",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"@babel/preset-env": "7.14.0",
|
|
33
33
|
"@babel/preset-react": "7.13.13",
|
|
34
34
|
"@babel/runtime": "7.14.0",
|
|
35
|
-
"@opentok/client": "2.19.3",
|
|
36
35
|
"@storybook/addon-actions": "~5.3.19",
|
|
37
36
|
"@storybook/addon-info": "~5.3.19",
|
|
38
37
|
"@storybook/addon-knobs": "~5.3.19",
|