@techsee/techsee-media-service 8.0.1 → 9.0.0
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.
- package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +12 -0
- package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.js +20 -9
- package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -1
- package/lib/oldCode/utils/ImageFixer.js +2 -0
- package/lib/oldCode/utils/ImageFixer.js.map +1 -1
- package/package.json +2 -2
|
@@ -36,6 +36,10 @@ export declare type MultipartyServiceStreamCreatedEvent = {
|
|
|
36
36
|
hasVideo: boolean;
|
|
37
37
|
hasAudio: boolean;
|
|
38
38
|
mirror: boolean;
|
|
39
|
+
videoDimensions: {
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
};
|
|
39
43
|
};
|
|
40
44
|
export declare type MultipartyServiceStreamDestroyedEvent = {
|
|
41
45
|
isOwnConnection: boolean;
|
|
@@ -50,10 +54,18 @@ export declare type MultipartyServiceStreamPropertyChangedEvent = {
|
|
|
50
54
|
clientRole: SessionClientRole;
|
|
51
55
|
hasVideo: boolean;
|
|
52
56
|
hasAudio: boolean;
|
|
57
|
+
videoDimensions: {
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
60
|
+
};
|
|
53
61
|
};
|
|
54
62
|
export declare type MultipartyServiceCameraSourceChangedEvent = {
|
|
55
63
|
cameraSource: MultiPartyCameraTypes;
|
|
56
64
|
mirror: boolean;
|
|
65
|
+
videoDimensions: {
|
|
66
|
+
width: number;
|
|
67
|
+
height: number;
|
|
68
|
+
};
|
|
57
69
|
};
|
|
58
70
|
export declare type MultipartyServiceMediaAccessDeniedEvent = {
|
|
59
71
|
isOwnConnection: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MultipartyServiceEventTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAE3E,oBAAY,kBAAkB;IAC1B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC9C;AAED,oBAAY,mCAAmC,GAAG;IAC9C,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;CACL,CAAC;AAEF,oBAAY,uCAAuC,GAAG;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACpD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,oBAAY,mCAAmC,GAAG;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MultipartyServiceEventTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAE3E,oBAAY,kBAAkB;IAC1B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC9C;AAED,oBAAY,mCAAmC,GAAG;IAC9C,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;KACf,CAAC;CACL,CAAC;AAEF,oBAAY,uCAAuC,GAAG;IAClD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACpD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,oBAAY,mCAAmC,GAAG;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,oBAAY,qCAAqC,GAAG;IAChD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,oBAAY,2CAA2C,GAAG;IACtD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACpD,YAAY,EAAE,qBAAqB,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,oBAAY,uCAAuC,GAAG;IAClD,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC","file":"MultipartyServiceEventTypes.d.ts","sourcesContent":["import {MultiPartyCameraTypes, SessionClientRole} from '../MediaConstants';\n\nexport enum MULTI_PARTY_EVENTS {\n connectFailed = 'connectFailed',\n streamDestroyed = 'streamDestroyed',\n connectionCreated = 'connectionCreated',\n connectionDestroyed = 'connectionDestroyed',\n streamCreated = 'streamCreated',\n videoElementCreated = 'videoElementCreated',\n streamPropertyChanged = 'streamPropertyChanged',\n mediaDeviceAccessDenied = 'mediaDeviceAccessDenied',\n cameraSourceChanged = 'cameraSourceChanged'\n}\n\nexport type MultipartyServiceConnectFailedEvent = {\n meta: {\n err: string;\n };\n};\n\nexport type MultipartyServiceConnectionCreatedEvent = {\n isOwnConnection: boolean;\n connectionId: string;\n participantId: string;\n clientRole: SessionClientRole;\n};\n\nexport type MultipartyServiceConnectionDestroyedEvent = {\n isOwnConnection: boolean;\n connectionId: string;\n participantId: string;\n clientRole: SessionClientRole;\n};\n\nexport type MultipartyServiceStreamCreatedEvent = {\n isOwnConnection: boolean;\n connectionId: string;\n participantId: string;\n clientRole: SessionClientRole;\n audioEnabled: boolean;\n hasVideo: boolean;\n hasAudio: boolean;\n mirror: boolean;\n videoDimensions: {\n width: number;\n height: number;\n };\n};\n\nexport type MultipartyServiceStreamDestroyedEvent = {\n isOwnConnection: boolean;\n connectionId: string;\n participantId: string;\n clientRole: SessionClientRole;\n};\n\nexport type MultipartyServiceStreamPropertyChangedEvent = {\n isOwnConnection: boolean;\n connectionId: string;\n participantId: string;\n clientRole: SessionClientRole;\n hasVideo: boolean;\n hasAudio: boolean;\n videoDimensions: {\n width: number;\n height: number;\n };\n};\n\nexport type MultipartyServiceCameraSourceChangedEvent = {\n cameraSource: MultiPartyCameraTypes;\n mirror: boolean;\n videoDimensions: {\n width: number;\n height: number;\n };\n};\n\nexport type MultipartyServiceMediaAccessDeniedEvent = {\n isOwnConnection: boolean;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAqB,iBAAiB,EAAE,cAAc,EAAwB,MAAM,qBAAqB,CAAC;AA0BjH,qBAAa,wBAAyB,SAAQ,iBAAiB;IAQpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPxE,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAExB,QAAQ,EAAE,eAAe,EAAmB,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAM3G,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CAmC/C;IAEK,UAAU,QAAO,IAAI,CAW1B;IAEK,YAAY,iBAAkB,MAAM,KAAG,MAAM,GAAG,IAAI,CAUzD;IAEF,OAAO,CAAC,eAAe,CA4BrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBAA8B,OAAO,KAAG,QAAQ,IAAI,CAAC,CAiBtE;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CA+C3C;IAEF,OAAO,CAAC,aAAa;IAIrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAqG9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAcpE;IAEF,oBAAoB;gBAA0B,GAAG,MAAM;UAAI,QAAQ,IAAI,CAAC,CAwCtE;IAEF,sBAAsB,UAAW;QAAC,MAAM,EAAE,GAAG,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,KAAG,IAAI,CAczE;IAEF,wBAAwB;oBAAwB,GAAG,UAAU;UAAI,IAAI,CAkBnE;IAEF,0BAA0B;oBAAwB,GAAG,UAAU;gBAAU,MAAM;UAAI,IAAI,CAoBrF;IAEF,4BAA4B,UAAW;QAAC,MAAM,EAAE,GAAG,MAAM,CAAA;KAAC,KAAG,IAAI,CAgB/D;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA2BtB;IAEF,OAAO,CAAC,kBAAkB,CACsD;CACnF","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 {checkAudioCapabilities, checkIsMobile, checkVideoCapabilities} from './MediaCapabilitiesUtils';\nimport {DEFAULT_AVATAR_URI, MultiPartyService, SubscriberInfo, maxParticipantsNumber} from './MultiPartyService';\nimport {\n MultipartyServiceCameraSourceChangedEvent,\n MultipartyServiceConnectFailedEvent,\n MultipartyServiceConnectionCreatedEvent,\n MultipartyServiceConnectionDestroyedEvent,\n MultipartyServiceMediaAccessDeniedEvent,\n MultipartyServiceStreamCreatedEvent,\n MultipartyServiceStreamDestroyedEvent,\n MultipartyServiceStreamPropertyChangedEvent,\n MULTI_PARTY_EVENTS\n} from './MultipartyServiceEventTypes';\n\nconst trace = getMediaTracer('Multiparty');\nconst OPENTOK_MIRRORED_CSS_CLASS = 'OT_mirrored';\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 mirror: boolean = true;\n\n private session?: OT.Session;\n private currentPublisher?: OT.Publisher;\n private branding?: BrandingSettings;\n\n constructor(settings: SessionSettings, private readonly getParticipantId: (connectionId?: string) => string) {\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(credentials.apiKey, credentials.sessionId);\n\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\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n const e: MultipartyServiceConnectFailedEvent = {\n meta: {err: JSON.stringify(error)}\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectFailed, e);\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n const e: MultipartyServiceConnectFailedEvent = {\n meta: {err: JSON.stringify(err)}\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectFailed, e);\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 public takeSnapshot = (connectionId: string): string | null => {\n if (!connectionId) {\n return null;\n }\n\n if (connectionId === this.ownConnectionId) {\n return this.currentPublisher?.getImgData() || null;\n }\n\n return this.subscribers.find((s) => s.connectionId === connectionId)?.subscriber.getImgData() || null;\n };\n\n private createPublisher = async (settings: Readonly<SessionSettings>): Promise<void> => {\n if (!this.session) {\n return;\n }\n\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n\n this.currentPublisher && this.session?.publish(this.currentPublisher, this.traceErrorCallback);\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 (shouldPublishVideo: boolean): 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 cameraSource: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraSource = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n this.mirror = true;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraSource = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n this.mirror = !checkIsMobile();\n break;\n default:\n throw new Error(`cameraType not valid: ${this.settings.selectedCamera}`);\n }\n\n return await this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraSource;\n\n if (this.mirror) {\n this.currentPublisher?.element?.classList.add(OPENTOK_MIRRORED_CSS_CLASS);\n } else {\n this.currentPublisher?.element?.classList.remove(OPENTOK_MIRRORED_CSS_CLASS);\n }\n\n const e: MultipartyServiceCameraSourceChangedEvent = {\n cameraSource,\n mirror: this.mirror\n };\n\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, e);\n trace.info(`Success to switch camera to cameraSource: ${cameraSource}`);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (connection?.data && JSON.parse(connection.data).clientRole) || SessionClientRole.USER;\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 {frontCameraDeviceId, backCameraDeviceId} = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) ||\n undefined;\n\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.mirror = !isMobile || settings.selectedCamera !== MultiPartyCameraTypes.BACK;\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: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined,\n mirror: this.mirror\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: unknown) => {\n trace.info('videoElementCreated', event);\n\n this.emit(MULTI_PARTY_EVENTS.videoElementCreated);\n });\n this.currentPublisher.on('streamDestroyed', (event: {stream: OT.Stream; reason: string}) => {\n trace.info('Publisher stream destroyed', event);\n\n const {connection} = event.stream;\n const {connectionId} = connection;\n const e: MultipartyServiceStreamDestroyedEvent = {\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: true,\n clientRole: this.getClientRole(connection)\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, e);\n });\n this.currentPublisher.on('accessDenied', () => {\n trace.info('Publisher denied media permissions');\n const e: MultipartyServiceMediaAccessDeniedEvent = {\n isOwnConnection: true\n };\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, e);\n });\n this.currentPublisher.on('streamCreated', async (event: {stream: OT.Stream}) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const {hasAudio, hasVideo} = event.stream;\n const {connectionId} = event.stream.connection;\n const participantId = this.getParticipantId(connectionId);\n const clientRole = this.getClientRole(event.stream.connection);\n\n const e: MultipartyServiceStreamCreatedEvent = {\n participantId,\n clientRole,\n connectionId,\n hasVideo,\n hasAudio,\n isOwnConnection: true,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: this.mirror\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, e);\n\n trace.info('publisher stream created', {\n event,\n hasAudio,\n participantId\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.session) {\n return;\n }\n\n this.subscriberList.map((s) => s.subscriber).forEach(this.session?.unsubscribe);\n this.subscriberList = [];\n\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n\n return this.createPublisher(settings);\n };\n\n streamCreatedHandler = async (event: {stream: OT.Stream}): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const {stream} = event;\n const {connection} = stream;\n const {connectionId} = connection;\n const {hasAudio, hasVideo} = stream;\n const participantId = this.getParticipantId(connectionId);\n const clientRole = this.getClientRole(connection);\n\n await MediaCapabilitiesService.setDevicesList();\n\n if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {\n if (this.subscriberList.length < maxParticipantsNumber - 1) {\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole\n });\n } else {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n }\n }\n\n const e: MultipartyServiceStreamCreatedEvent = {\n participantId: participantId,\n clientRole,\n connectionId,\n hasVideo,\n hasAudio,\n isOwnConnection: false,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: false\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, e);\n };\n\n streamDestroyedHandler = (event: {stream: OT.Stream; reason: string}): void => {\n trace.info('streamDestroyedHandler', event);\n\n const {connection} = event.stream;\n const {connectionId} = connection;\n const e: MultipartyServiceStreamDestroyedEvent = {\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: false,\n clientRole: this.getClientRole(connection)\n };\n\n this.subscriberList = this.subscriberList.filter((subscriber) => subscriber.connectionId !== connectionId);\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, e);\n };\n\n connectionCreatedHandler = (event: {connection: OT.Connection}): void => {\n trace.info('connectionCreatedHandler', event);\n\n const {connection} = event;\n const {connectionId} = connection;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n const e: MultipartyServiceConnectionCreatedEvent = {\n clientRole: this.getClientRole(connection),\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId)\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, e);\n };\n\n connectionDestroyedHandler = (event: {connection: OT.Connection; reason: string}): void => {\n const {connection} = event;\n const {connectionId} = connection;\n\n trace.info('connectionDestroyedHandler', event);\n\n const e: MultipartyServiceConnectionDestroyedEvent = {\n clientRole: this.getClientRole(connection),\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId)\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, e);\n\n if (connectionId !== this.ownConnectionId || !this.ownConnectionId) {\n return;\n }\n\n this.session = undefined;\n };\n\n streamPropertyChangedHandler = (event: {stream: OT.Stream}): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const {hasVideo, hasAudio, connection} = event.stream;\n const {connectionId} = connection;\n\n const e: MultipartyServiceStreamPropertyChangedEvent = {\n hasVideo,\n hasAudio,\n participantId: this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId),\n clientRole: this.getClientRole(connection)\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamPropertyChanged, e);\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: OT.Stream, 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 videoDisabledDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err) => {\n this.traceErrorCallback(err);\n }\n );\n\n subscriber.on('videoElementCreated', (event: unknown) => {\n trace.info('videoElementCreated', event);\n });\n\n return subscriber;\n };\n\n private checkOwnConnection = (connectionId: string) =>\n this.ownConnectionId !== undefined && this.ownConnectionId === connectionId;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAqB,iBAAiB,EAAE,cAAc,EAAwB,MAAM,qBAAqB,CAAC;AA0BjH,qBAAa,wBAAyB,SAAQ,iBAAiB;IAQpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPxE,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAmB;gBAExB,QAAQ,EAAE,eAAe,EAAmB,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM;IAM3G,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,WAAW,IAAI,cAAc,EAAE,CAElC;IAEM,OAAO,gBAAiB,WAAW,KAAG,IAAI,CAmC/C;IAEK,UAAU,QAAO,IAAI,CAY1B;IAEK,YAAY,iBAAkB,MAAM,KAAG,MAAM,GAAG,IAAI,CAUzD;IAEF,OAAO,CAAC,eAAe,CA4BrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBAA8B,OAAO,KAAG,QAAQ,IAAI,CAAC,CAiBtE;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAgD3C;IAEF,OAAO,CAAC,aAAa;IAIrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAsG9D;IAEF,mBAAmB,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CAcpE;IAEF,oBAAoB;gBAA0B,GAAG,MAAM;UAAI,QAAQ,IAAI,CAAC,CAwCtE;IAEF,sBAAsB,UAAW;QAAC,MAAM,EAAE,GAAG,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,KAAG,IAAI,CAczE;IAEF,wBAAwB;oBAAwB,GAAG,UAAU;UAAI,IAAI,CAkBnE;IAEF,0BAA0B;oBAAwB,GAAG,UAAU;gBAAU,MAAM;UAAI,IAAI,CAoBrF;IAEF,4BAA4B,UAAW;QAAC,MAAM,EAAE,GAAG,MAAM,CAAA;KAAC,KAAG,IAAI,CAiB/D;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAIhC;IAEF,OAAO,CAAC,gBAAgB,CA2BtB;IAEF,OAAO,CAAC,kBAAkB,CACsD;CACnF","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 {checkAudioCapabilities, checkIsMobile, checkVideoCapabilities} from './MediaCapabilitiesUtils';\nimport {DEFAULT_AVATAR_URI, MultiPartyService, SubscriberInfo, maxParticipantsNumber} from './MultiPartyService';\nimport {\n MultipartyServiceCameraSourceChangedEvent,\n MultipartyServiceConnectFailedEvent,\n MultipartyServiceConnectionCreatedEvent,\n MultipartyServiceConnectionDestroyedEvent,\n MultipartyServiceMediaAccessDeniedEvent,\n MultipartyServiceStreamCreatedEvent,\n MultipartyServiceStreamDestroyedEvent,\n MultipartyServiceStreamPropertyChangedEvent,\n MULTI_PARTY_EVENTS\n} from './MultipartyServiceEventTypes';\n\nconst trace = getMediaTracer('Multiparty');\nconst OPENTOK_MIRRORED_CSS_CLASS = 'OT_mirrored';\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 mirror: boolean = true;\n\n private session?: OT.Session;\n private currentPublisher?: OT.Publisher;\n private branding?: BrandingSettings;\n\n constructor(settings: SessionSettings, private readonly getParticipantId: (connectionId?: string) => string) {\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(credentials.apiKey, credentials.sessionId);\n\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\n this.session.connect(credentials.token, (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = undefined;\n this.traceErrorCallback(error);\n const e: MultipartyServiceConnectFailedEvent = {\n meta: {err: JSON.stringify(error)}\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectFailed, e);\n\n return;\n }\n\n this.createPublisher(this.settings);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n const e: MultipartyServiceConnectFailedEvent = {\n meta: {err: JSON.stringify(err)}\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectFailed, e);\n }\n };\n\n public disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.currentPublisher?.destroy();\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 public takeSnapshot = (connectionId: string): string | null => {\n if (!connectionId) {\n return null;\n }\n\n if (connectionId === this.ownConnectionId) {\n return this.currentPublisher?.getImgData() || null;\n }\n\n return this.subscribers.find((s) => s.connectionId === connectionId)?.subscriber.getImgData() || null;\n };\n\n private createPublisher = async (settings: Readonly<SessionSettings>): Promise<void> => {\n if (!this.session) {\n return;\n }\n\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n\n this.currentPublisher && this.session?.publish(this.currentPublisher, this.traceErrorCallback);\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 (shouldPublishVideo: boolean): 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 cameraSource: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraSource = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n this.mirror = true;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraSource = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n this.mirror = !checkIsMobile();\n break;\n default:\n throw new Error(`cameraType not valid: ${this.settings.selectedCamera}`);\n }\n\n return await this.currentPublisher?.setVideoSource(deviceId).then(() => {\n this.settings.selectedCamera = cameraSource;\n\n if (this.mirror) {\n this.currentPublisher?.element?.classList.add(OPENTOK_MIRRORED_CSS_CLASS);\n } else {\n this.currentPublisher?.element?.classList.remove(OPENTOK_MIRRORED_CSS_CLASS);\n }\n\n const e: MultipartyServiceCameraSourceChangedEvent = {\n cameraSource,\n mirror: this.mirror,\n videoDimensions: this.currentPublisher?.stream?.videoDimensions || {width: 0, height: 0}\n };\n\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, e);\n trace.info(`Success to switch camera to cameraSource: ${cameraSource}`);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (connection?.data && JSON.parse(connection.data).clientRole) || SessionClientRole.USER;\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 {frontCameraDeviceId, backCameraDeviceId} = mediaCapabilitiesService;\n\n const videoSourceId =\n (selectedCamera === MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) ||\n undefined;\n\n const mobileCameraType =\n settings.selectedCamera === MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n\n this.mirror = !isMobile || settings.selectedCamera !== MultiPartyCameraTypes.BACK;\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: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined,\n mirror: this.mirror\n },\n this.traceErrorCallback\n );\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: unknown) => {\n trace.info('videoElementCreated', event);\n\n this.emit(MULTI_PARTY_EVENTS.videoElementCreated);\n });\n this.currentPublisher.on('streamDestroyed', (event: {stream: OT.Stream; reason: string}) => {\n trace.info('Publisher stream destroyed', event);\n\n const {connection} = event.stream;\n const {connectionId} = connection;\n const e: MultipartyServiceStreamDestroyedEvent = {\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: true,\n clientRole: this.getClientRole(connection)\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, e);\n });\n this.currentPublisher.on('accessDenied', () => {\n trace.info('Publisher denied media permissions');\n const e: MultipartyServiceMediaAccessDeniedEvent = {\n isOwnConnection: true\n };\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, e);\n });\n this.currentPublisher.on('streamCreated', async (event: {stream: OT.Stream}) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const {hasAudio, hasVideo} = event.stream;\n const {connectionId} = event.stream.connection;\n const participantId = this.getParticipantId(connectionId);\n const clientRole = this.getClientRole(event.stream.connection);\n\n const e: MultipartyServiceStreamCreatedEvent = {\n participantId,\n clientRole,\n connectionId,\n hasVideo,\n hasAudio,\n isOwnConnection: true,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: this.mirror,\n videoDimensions: event.stream.videoDimensions\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, e);\n\n trace.info('publisher stream created', {\n event,\n hasAudio,\n participantId\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.session) {\n return;\n }\n\n this.subscriberList.map((s) => s.subscriber).forEach(this.session?.unsubscribe);\n this.subscriberList = [];\n\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n\n return this.createPublisher(settings);\n };\n\n streamCreatedHandler = async (event: {stream: OT.Stream}): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const {stream} = event;\n const {connection, hasAudio, hasVideo, videoDimensions} = stream;\n const {connectionId} = connection;\n const participantId = this.getParticipantId(connectionId);\n const clientRole = this.getClientRole(connection);\n\n await MediaCapabilitiesService.setDevicesList();\n\n if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {\n if (this.subscriberList.length < maxParticipantsNumber - 1) {\n const subscriber = this.createSubscriber(stream, connectionId);\n\n this.subscriberList.push({\n subscriber,\n connectionId,\n clientRole\n });\n } else {\n trace.info(\n `a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`\n );\n }\n }\n\n const e: MultipartyServiceStreamCreatedEvent = {\n participantId: participantId,\n clientRole,\n connectionId,\n hasVideo,\n hasAudio,\n isOwnConnection: false,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: false,\n videoDimensions\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated, e);\n };\n\n streamDestroyedHandler = (event: {stream: OT.Stream; reason: string}): void => {\n trace.info('streamDestroyedHandler', event);\n\n const {connection} = event.stream;\n const {connectionId} = connection;\n const e: MultipartyServiceStreamDestroyedEvent = {\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: false,\n clientRole: this.getClientRole(connection)\n };\n\n this.subscriberList = this.subscriberList.filter((subscriber) => subscriber.connectionId !== connectionId);\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, e);\n };\n\n connectionCreatedHandler = (event: {connection: OT.Connection}): void => {\n trace.info('connectionCreatedHandler', event);\n\n const {connection} = event;\n const {connectionId} = connection;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n const e: MultipartyServiceConnectionCreatedEvent = {\n clientRole: this.getClientRole(connection),\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId)\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, e);\n };\n\n connectionDestroyedHandler = (event: {connection: OT.Connection; reason: string}): void => {\n const {connection} = event;\n const {connectionId} = connection;\n\n trace.info('connectionDestroyedHandler', event);\n\n const e: MultipartyServiceConnectionDestroyedEvent = {\n clientRole: this.getClientRole(connection),\n participantId: this.getParticipantId(connectionId),\n connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId)\n };\n\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, e);\n\n if (connectionId !== this.ownConnectionId || !this.ownConnectionId) {\n return;\n }\n\n this.session = undefined;\n };\n\n streamPropertyChangedHandler = (event: {stream: OT.Stream}): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const {hasVideo, hasAudio, connection, videoDimensions} = event.stream;\n const {connectionId} = connection;\n\n const e: MultipartyServiceStreamPropertyChangedEvent = {\n hasVideo,\n hasAudio,\n participantId: this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: this.checkOwnConnection(connectionId),\n clientRole: this.getClientRole(connection),\n videoDimensions\n };\n\n this.emit(MULTI_PARTY_EVENTS.streamPropertyChanged, e);\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: OT.Stream, 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 videoDisabledDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n }\n },\n (err) => {\n this.traceErrorCallback(err);\n }\n );\n\n subscriber.on('videoElementCreated', (event: unknown) => {\n trace.info('videoElementCreated', event);\n });\n\n return subscriber;\n };\n\n private checkOwnConnection = (connectionId: string) =>\n this.ownConnectionId !== undefined && this.ownConnectionId === connectionId;\n}\n"]}
|
|
@@ -289,10 +289,14 @@ function (_super) {
|
|
|
289
289
|
};
|
|
290
290
|
|
|
291
291
|
_this.disconnect = function () {
|
|
292
|
+
var _a;
|
|
293
|
+
|
|
292
294
|
try {
|
|
293
295
|
trace.info('Disconnecting from session');
|
|
294
296
|
|
|
295
297
|
if (_this.session) {
|
|
298
|
+
(_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
299
|
+
|
|
296
300
|
_this.session.disconnect();
|
|
297
301
|
|
|
298
302
|
trace.info('Disconnection from session completed');
|
|
@@ -528,7 +532,7 @@ function (_super) {
|
|
|
528
532
|
return [4
|
|
529
533
|
/*yield*/
|
|
530
534
|
, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {
|
|
531
|
-
var _a, _b, _c, _d;
|
|
535
|
+
var _a, _b, _c, _d, _e, _f;
|
|
532
536
|
|
|
533
537
|
_this.settings.selectedCamera = cameraSource_1;
|
|
534
538
|
|
|
@@ -540,7 +544,11 @@ function (_super) {
|
|
|
540
544
|
|
|
541
545
|
var e = {
|
|
542
546
|
cameraSource: cameraSource_1,
|
|
543
|
-
mirror: _this.mirror
|
|
547
|
+
mirror: _this.mirror,
|
|
548
|
+
videoDimensions: ((_f = (_e = _this.currentPublisher) === null || _e === void 0 ? void 0 : _e.stream) === null || _f === void 0 ? void 0 : _f.videoDimensions) || {
|
|
549
|
+
width: 0,
|
|
550
|
+
height: 0
|
|
551
|
+
}
|
|
544
552
|
};
|
|
545
553
|
|
|
546
554
|
_this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.cameraSourceChanged, e);
|
|
@@ -665,7 +673,8 @@ function (_super) {
|
|
|
665
673
|
hasAudio: hasAudio,
|
|
666
674
|
isOwnConnection: true,
|
|
667
675
|
audioEnabled: !this.settings.startWithAudioMuted,
|
|
668
|
-
mirror: this.mirror
|
|
676
|
+
mirror: this.mirror,
|
|
677
|
+
videoDimensions: event.stream.videoDimensions
|
|
669
678
|
};
|
|
670
679
|
this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);
|
|
671
680
|
trace.info('publisher stream created', {
|
|
@@ -730,15 +739,14 @@ function (_super) {
|
|
|
730
739
|
|
|
731
740
|
_this.streamCreatedHandler = function (event) {
|
|
732
741
|
return __awaiter(_this, void 0, void 0, function () {
|
|
733
|
-
var stream, connection,
|
|
742
|
+
var stream, connection, hasAudio, hasVideo, videoDimensions, connectionId, participantId, clientRole, subscriber, e;
|
|
734
743
|
return __generator(this, function (_a) {
|
|
735
744
|
switch (_a.label) {
|
|
736
745
|
case 0:
|
|
737
746
|
trace.info('streamCreatedHandler', event.stream);
|
|
738
747
|
stream = event.stream;
|
|
739
|
-
connection = stream.connection;
|
|
748
|
+
connection = stream.connection, hasAudio = stream.hasAudio, hasVideo = stream.hasVideo, videoDimensions = stream.videoDimensions;
|
|
740
749
|
connectionId = connection.connectionId;
|
|
741
|
-
hasAudio = stream.hasAudio, hasVideo = stream.hasVideo;
|
|
742
750
|
participantId = this.getParticipantId(connectionId);
|
|
743
751
|
clientRole = this.getClientRole(connection);
|
|
744
752
|
return [4
|
|
@@ -769,7 +777,8 @@ function (_super) {
|
|
|
769
777
|
hasAudio: hasAudio,
|
|
770
778
|
isOwnConnection: false,
|
|
771
779
|
audioEnabled: !this.settings.startWithAudioMuted,
|
|
772
|
-
mirror: false
|
|
780
|
+
mirror: false,
|
|
781
|
+
videoDimensions: videoDimensions
|
|
773
782
|
};
|
|
774
783
|
this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);
|
|
775
784
|
return [2
|
|
@@ -841,7 +850,8 @@ function (_super) {
|
|
|
841
850
|
var _a = event.stream,
|
|
842
851
|
hasVideo = _a.hasVideo,
|
|
843
852
|
hasAudio = _a.hasAudio,
|
|
844
|
-
connection = _a.connection
|
|
853
|
+
connection = _a.connection,
|
|
854
|
+
videoDimensions = _a.videoDimensions;
|
|
845
855
|
var connectionId = connection.connectionId;
|
|
846
856
|
var e = {
|
|
847
857
|
hasVideo: hasVideo,
|
|
@@ -849,7 +859,8 @@ function (_super) {
|
|
|
849
859
|
participantId: _this.getParticipantId(connectionId),
|
|
850
860
|
connectionId: connectionId,
|
|
851
861
|
isOwnConnection: _this.checkOwnConnection(connectionId),
|
|
852
|
-
clientRole: _this.getClientRole(connection)
|
|
862
|
+
clientRole: _this.getClientRole(connection),
|
|
863
|
+
videoDimensions: videoDimensions
|
|
853
864
|
};
|
|
854
865
|
|
|
855
866
|
_this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamPropertyChanged, e);
|
|
@@ -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","__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","MultipartyServiceEventTypes_1","trace","getMediaTracer","OPENTOK_MIRRORED_CSS_CLASS","OpentokFacingMode","_super","settings","getParticipantId","_this","subscriberList","mirror","connect","credentials","session","OT","initSession","apiKey","sessionId","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","error","_a","off","undefined","traceErrorCallback","meta","err","JSON","stringify","emit","MULTI_PARTY_EVENTS","connectFailed","createPublisher","disconnect","info","takeSnapshot","connectionId","_b","ownConnectionId","currentPublisher","getImgData","subscribers","find","subscriber","canStartWithAudio","canStartWithVideo","checkAudioCapabilities","checkVideoCapabilities","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraSource_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","checkIsMobile","setVideoSource","_c","_d","element","classList","add","remove","cameraSource","cameraSourceChanged","isMobile","videoSourceId","mobileCameraType","err_2","USER","ENVIRONMENT","connection","insertMode","fitMode","width","height","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","event","videoElementCreated","stream","participantId","isOwnConnection","clientRole","getClientRole","streamDestroyed","mediaDeviceAccessDenied","hasAudio","hasVideo","setDevicesList","audioEnabled","streamCreated","reinitializeStreams","map","forEach","unsubscribe","destroy","maxParticipantsNumber","createSubscriber","filter","checkOwnConnection","connectionCreated","connectionDestroyed","streamPropertyChanged","subscribe","videoDisabledDisplayMode","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 MultipartyServiceEventTypes_1 = require(\"./MultipartyServiceEventTypes\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\nvar OPENTOK_MIRRORED_CSS_CLASS = 'OT_mirrored';\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.mirror = true;\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 var e = {\n meta: { err: JSON.stringify(error) }\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectFailed, e);\n return;\n }\n _this.createPublisher(_this.settings);\n });\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n var e = {\n meta: { err: JSON.stringify(err) }\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectFailed, e);\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.takeSnapshot = function (connectionId) {\n var _a, _b;\n if (!connectionId) {\n return null;\n }\n if (connectionId === _this.ownConnectionId) {\n return ((_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.getImgData()) || null;\n }\n return ((_b = _this.subscribers.find(function (s) { return s.connectionId === connectionId; })) === null || _b === void 0 ? void 0 : _b.subscriber.getImgData()) || null;\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:\n if (!this.session) {\n return [2 /*return*/];\n }\n 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, cameraSource_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, 3, , 4]);\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 cameraSource_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n this.mirror = true;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraSource_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n this.mirror = !MediaCapabilitiesUtils_1.checkIsMobile();\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [4 /*yield*/, ((_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n var _a, _b, _c, _d;\n _this.settings.selectedCamera = cameraSource_1;\n if (_this.mirror) {\n (_b = (_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.element) === null || _b === void 0 ? void 0 : _b.classList.add(OPENTOK_MIRRORED_CSS_CLASS);\n }\n else {\n (_d = (_c = _this.currentPublisher) === null || _c === void 0 ? void 0 : _c.element) === null || _d === void 0 ? void 0 : _d.classList.remove(OPENTOK_MIRRORED_CSS_CLASS);\n }\n var e = {\n cameraSource: cameraSource_1,\n mirror: _this.mirror\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.cameraSourceChanged, e);\n trace.info(\"Success to switch camera to cameraSource: \" + cameraSource_1);\n }))];\n case 2: return [2 /*return*/, _b.sent()];\n case 3:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 4: 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 ? frontCameraDeviceId : backCameraDeviceId) ||\n undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n this.mirror = !isMobile || settings.selectedCamera !== MediaConstants_1.MultiPartyCameraTypes.BACK;\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 mirror: this.mirror\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(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.videoElementCreated);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n var connection = event.stream.connection;\n var connectionId = connection.connectionId;\n var e = {\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: true,\n clientRole: _this.getClientRole(connection)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamDestroyed, e);\n });\n this.currentPublisher.on('accessDenied', function () {\n trace.info('Publisher denied media permissions');\n var e = {\n isOwnConnection: true\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, e);\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var _a, hasAudio, hasVideo, connectionId, participantId, clientRole, e;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _b.sent();\n _a = event.stream, hasAudio = _a.hasAudio, hasVideo = _a.hasVideo;\n connectionId = event.stream.connection.connectionId;\n participantId = this.getParticipantId(connectionId);\n clientRole = this.getClientRole(event.stream.connection);\n e = {\n participantId: participantId,\n clientRole: clientRole,\n connectionId: connectionId,\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n isOwnConnection: true,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: this.mirror\n };\n this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);\n trace.info('publisher stream created', {\n event: event,\n hasAudio: 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 _a;\n return __generator(this, function (_b) {\n if (!this.session) {\n return [2 /*return*/];\n }\n this.subscriberList.map(function (s) { return s.subscriber; }).forEach((_a = this.session) === null || _a === void 0 ? void 0 : _a.unsubscribe);\n this.subscriberList = [];\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n return [2 /*return*/, this.createPublisher(settings)];\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, connectionId, hasAudio, hasVideo, participantId, clientRole, subscriber, e;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection;\n connectionId = connection.connectionId;\n hasAudio = stream.hasAudio, hasVideo = stream.hasVideo;\n participantId = this.getParticipantId(connectionId);\n clientRole = this.getClientRole(connection);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _a.sent();\n if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {\n if (this.subscriberList.length < MultiPartyService_1.maxParticipantsNumber - 1) {\n subscriber = this.createSubscriber(stream, connectionId);\n this.subscriberList.push({\n subscriber: subscriber,\n connectionId: connectionId,\n clientRole: clientRole\n });\n }\n else {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n }\n }\n e = {\n participantId: participantId,\n clientRole: clientRole,\n connectionId: connectionId,\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n isOwnConnection: false,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: false\n };\n this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var connection = event.stream.connection;\n var connectionId = connection.connectionId;\n var e = {\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: false,\n clientRole: _this.getClientRole(connection)\n };\n _this.subscriberList = _this.subscriberList.filter(function (subscriber) { return subscriber.connectionId !== connectionId; });\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamDestroyed, e);\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n var connectionId = connection.connectionId;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n var e = {\n clientRole: _this.getClientRole(connection),\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectionCreated, e);\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var connectionId = connection.connectionId;\n trace.info('connectionDestroyedHandler', event);\n var e = {\n clientRole: _this.getClientRole(connection),\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectionDestroyed, e);\n if (connectionId !== _this.ownConnectionId || !_this.ownConnectionId) {\n return;\n }\n _this.session = undefined;\n };\n _this.streamPropertyChangedHandler = function (event) {\n trace.info('streamPropertyChangedHandler', event);\n var _a = event.stream, hasVideo = _a.hasVideo, hasAudio = _a.hasAudio, connection = _a.connection;\n var connectionId = connection.connectionId;\n var e = {\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId),\n clientRole: _this.getClientRole(connection)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamPropertyChanged, e);\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 videoDisabledDisplayMode: '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 });\n subscriber.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n return subscriber;\n };\n _this.checkOwnConnection = function (connectionId) {\n return _this.ownConnectionId !== undefined && _this.ownConnectionId === connectionId;\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) || 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","MultipartyServiceEventTypes_1","trace","getMediaTracer","OPENTOK_MIRRORED_CSS_CLASS","OpentokFacingMode","_super","settings","getParticipantId","_this","subscriberList","mirror","connect","credentials","session","OT","initSession","apiKey","sessionId","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","error","_a","off","undefined","traceErrorCallback","meta","err","JSON","stringify","emit","MULTI_PARTY_EVENTS","connectFailed","createPublisher","disconnect","info","currentPublisher","destroy","takeSnapshot","connectionId","_b","ownConnectionId","getImgData","subscribers","find","subscriber","canStartWithAudio","canStartWithVideo","checkAudioCapabilities","checkVideoCapabilities","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraSource_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","checkIsMobile","setVideoSource","_c","_d","_e","_f","element","classList","add","remove","cameraSource","videoDimensions","stream","width","height","cameraSourceChanged","isMobile","videoSourceId","mobileCameraType","err_2","USER","ENVIRONMENT","connection","insertMode","fitMode","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","event","videoElementCreated","participantId","isOwnConnection","clientRole","getClientRole","streamDestroyed","mediaDeviceAccessDenied","hasAudio","hasVideo","setDevicesList","audioEnabled","streamCreated","reinitializeStreams","map","forEach","unsubscribe","maxParticipantsNumber","createSubscriber","filter","checkOwnConnection","connectionCreated","connectionDestroyed","streamPropertyChanged","subscribe","videoDisabledDisplayMode","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 MultipartyServiceEventTypes_1 = require(\"./MultipartyServiceEventTypes\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\nvar OPENTOK_MIRRORED_CSS_CLASS = 'OT_mirrored';\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.mirror = true;\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 var e = {\n meta: { err: JSON.stringify(error) }\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectFailed, e);\n return;\n }\n _this.createPublisher(_this.settings);\n });\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n var e = {\n meta: { err: JSON.stringify(err) }\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectFailed, e);\n }\n };\n _this.disconnect = function () {\n var _a;\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n (_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.destroy();\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.takeSnapshot = function (connectionId) {\n var _a, _b;\n if (!connectionId) {\n return null;\n }\n if (connectionId === _this.ownConnectionId) {\n return ((_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.getImgData()) || null;\n }\n return ((_b = _this.subscribers.find(function (s) { return s.connectionId === connectionId; })) === null || _b === void 0 ? void 0 : _b.subscriber.getImgData()) || null;\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:\n if (!this.session) {\n return [2 /*return*/];\n }\n 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, cameraSource_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, 3, , 4]);\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 cameraSource_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n this.mirror = true;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraSource_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n this.mirror = !MediaCapabilitiesUtils_1.checkIsMobile();\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [4 /*yield*/, ((_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n var _a, _b, _c, _d, _e, _f;\n _this.settings.selectedCamera = cameraSource_1;\n if (_this.mirror) {\n (_b = (_a = _this.currentPublisher) === null || _a === void 0 ? void 0 : _a.element) === null || _b === void 0 ? void 0 : _b.classList.add(OPENTOK_MIRRORED_CSS_CLASS);\n }\n else {\n (_d = (_c = _this.currentPublisher) === null || _c === void 0 ? void 0 : _c.element) === null || _d === void 0 ? void 0 : _d.classList.remove(OPENTOK_MIRRORED_CSS_CLASS);\n }\n var e = {\n cameraSource: cameraSource_1,\n mirror: _this.mirror,\n videoDimensions: ((_f = (_e = _this.currentPublisher) === null || _e === void 0 ? void 0 : _e.stream) === null || _f === void 0 ? void 0 : _f.videoDimensions) || { width: 0, height: 0 }\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.cameraSourceChanged, e);\n trace.info(\"Success to switch camera to cameraSource: \" + cameraSource_1);\n }))];\n case 2: return [2 /*return*/, _b.sent()];\n case 3:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 4: 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 ? frontCameraDeviceId : backCameraDeviceId) ||\n undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT\n ? OpentokFacingMode.USER\n : OpentokFacingMode.ENVIRONMENT;\n this.mirror = !isMobile || settings.selectedCamera !== MediaConstants_1.MultiPartyCameraTypes.BACK;\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 mirror: this.mirror\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(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.videoElementCreated);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n var connection = event.stream.connection;\n var connectionId = connection.connectionId;\n var e = {\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: true,\n clientRole: _this.getClientRole(connection)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamDestroyed, e);\n });\n this.currentPublisher.on('accessDenied', function () {\n trace.info('Publisher denied media permissions');\n var e = {\n isOwnConnection: true\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, e);\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var _a, hasAudio, hasVideo, connectionId, participantId, clientRole, e;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _b.sent();\n _a = event.stream, hasAudio = _a.hasAudio, hasVideo = _a.hasVideo;\n connectionId = event.stream.connection.connectionId;\n participantId = this.getParticipantId(connectionId);\n clientRole = this.getClientRole(event.stream.connection);\n e = {\n participantId: participantId,\n clientRole: clientRole,\n connectionId: connectionId,\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n isOwnConnection: true,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: this.mirror,\n videoDimensions: event.stream.videoDimensions\n };\n this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);\n trace.info('publisher stream created', {\n event: event,\n hasAudio: 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 _a;\n return __generator(this, function (_b) {\n if (!this.session) {\n return [2 /*return*/];\n }\n this.subscriberList.map(function (s) { return s.subscriber; }).forEach((_a = this.session) === null || _a === void 0 ? void 0 : _a.unsubscribe);\n this.subscriberList = [];\n if (this.currentPublisher) {\n this.currentPublisher.destroy();\n this.currentPublisher = undefined;\n }\n return [2 /*return*/, this.createPublisher(settings)];\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, hasAudio, hasVideo, videoDimensions, connectionId, participantId, clientRole, subscriber, e;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection, hasAudio = stream.hasAudio, hasVideo = stream.hasVideo, videoDimensions = stream.videoDimensions;\n connectionId = connection.connectionId;\n participantId = this.getParticipantId(connectionId);\n clientRole = this.getClientRole(connection);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _a.sent();\n if (this.ownConnectionId && stream && connectionId !== this.ownConnectionId) {\n if (this.subscriberList.length < MultiPartyService_1.maxParticipantsNumber - 1) {\n subscriber = this.createSubscriber(stream, connectionId);\n this.subscriberList.push({\n subscriber: subscriber,\n connectionId: connectionId,\n clientRole: clientRole\n });\n }\n else {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n }\n }\n e = {\n participantId: participantId,\n clientRole: clientRole,\n connectionId: connectionId,\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n isOwnConnection: false,\n audioEnabled: !this.settings.startWithAudioMuted,\n mirror: false,\n videoDimensions: videoDimensions\n };\n this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamCreated, e);\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var connection = event.stream.connection;\n var connectionId = connection.connectionId;\n var e = {\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: false,\n clientRole: _this.getClientRole(connection)\n };\n _this.subscriberList = _this.subscriberList.filter(function (subscriber) { return subscriber.connectionId !== connectionId; });\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamDestroyed, e);\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n var connectionId = connection.connectionId;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n var e = {\n clientRole: _this.getClientRole(connection),\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectionCreated, e);\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var connectionId = connection.connectionId;\n trace.info('connectionDestroyedHandler', event);\n var e = {\n clientRole: _this.getClientRole(connection),\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId)\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.connectionDestroyed, e);\n if (connectionId !== _this.ownConnectionId || !_this.ownConnectionId) {\n return;\n }\n _this.session = undefined;\n };\n _this.streamPropertyChangedHandler = function (event) {\n trace.info('streamPropertyChangedHandler', event);\n var _a = event.stream, hasVideo = _a.hasVideo, hasAudio = _a.hasAudio, connection = _a.connection, videoDimensions = _a.videoDimensions;\n var connectionId = connection.connectionId;\n var e = {\n hasVideo: hasVideo,\n hasAudio: hasAudio,\n participantId: _this.getParticipantId(connectionId),\n connectionId: connectionId,\n isOwnConnection: _this.checkOwnConnection(connectionId),\n clientRole: _this.getClientRole(connection),\n videoDimensions: videoDimensions\n };\n _this.emit(MultipartyServiceEventTypes_1.MULTI_PARTY_EVENTS.streamPropertyChanged, e);\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 videoDisabledDisplayMode: '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 });\n subscriber.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n return subscriber;\n };\n _this.checkOwnConnection = function (connectionId) {\n return _this.ownConnectionId !== undefined && _this.ownConnectionId === connectionId;\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) || MediaConstants_1.SessionClientRole.USER;\n };\n return OpentokMultiPartyService;\n}(MultiPartyService_1.MultiPartyService));\nexports.OpentokMultiPartyService = OpentokMultiPartyService;\n\n//# sourceMappingURL=OpentokMultiPartyService.js.map\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["oldCode/utils/ImageFixer.js"],"names":["Object","defineProperty","exports","value","fixDataUrl","FIX_SETTINGS","imageSizeThreshold","highQualityImageSizeThreshold","defaultMime","imageQuality","dataUrl","useHighQuality","_dataUrlToImage","then","image","resizeRequirement","_isResizeRequired","resized","_resizeCanvas","Promise","resolve","reject","img","Image","onload","onerror","err","src","maxImageSize","naturalWidth","naturalHeight","ratio","newWidth","Math","sqrt","newHeight","width","height","size","canvas","document","createElement","ctx","getContext","Error","_a","drawImage","toDataURL"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,UAAR,GAAqB,KAAK,CAA1B;
|
|
1
|
+
{"version":3,"sources":["oldCode/utils/ImageFixer.js","../src/oldCode/utils/ImageFixer.ts"],"names":["Object","defineProperty","exports","value","fixDataUrl","FIX_SETTINGS","imageSizeThreshold","highQualityImageSizeThreshold","defaultMime","imageQuality","dataUrl","useHighQuality","_dataUrlToImage","then","image","resizeRequirement","_isResizeRequired","resized","_resizeCanvas","Promise","resolve","reject","img","Image","onload","onerror","err","src","maxImageSize","naturalWidth","naturalHeight","ratio","newWidth","Math","sqrt","newHeight","width","height","size","canvas","document","createElement","ctx","getContext","Error","_a","drawImage","toDataURL"],"mappings":"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","file":"ImageFixer.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixDataUrl = void 0;\nvar FIX_SETTINGS = {\n imageSizeThreshold: 640000,\n highQualityImageSizeThreshold: 16000000,\n defaultMime: 'image/jpeg',\n imageQuality: 0.8\n};\nfunction fixDataUrl(dataUrl, useHighQuality) {\n return _dataUrlToImage(dataUrl)\n .then(function (image) {\n var resizeRequirement = _isResizeRequired(image, useHighQuality);\n if (resizeRequirement.resized) {\n return _resizeCanvas(image, resizeRequirement);\n }\n return dataUrl;\n });\n}\nexports.fixDataUrl = fixDataUrl;\nfunction _dataUrlToImage(dataUrl) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.onload = function () { return resolve(img); };\n img.onerror = function (err) { return reject(err); };\n img.src = dataUrl;\n });\n}\nfunction _isResizeRequired(image, useHighQuality) {\n var maxImageSize = useHighQuality\n ? FIX_SETTINGS.highQualityImageSizeThreshold\n : FIX_SETTINGS.imageSizeThreshold;\n if (image.naturalWidth * image.naturalHeight > maxImageSize) {\n var ratio = image.naturalWidth / image.naturalHeight, newWidth = Math.sqrt(maxImageSize * ratio), newHeight = newWidth / ratio;\n return { resized: true, width: newWidth, height: newHeight };\n }\n return { width: image.naturalWidth, height: image.naturalHeight };\n}\nfunction _resizeCanvas(image, size) {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('RESIZE_CANVAS_FAILED');\n }\n var _a = size || _isResizeRequired(image), width = _a.width, height = _a.height;\n canvas.width = width;\n canvas.height = height;\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n return canvas.toDataURL(FIX_SETTINGS.defaultMime, FIX_SETTINGS.imageQuality);\n}\n","const FIX_SETTINGS = {\n imageSizeThreshold: 640000, // 0.64 MP images and larger get resized\n highQualityImageSizeThreshold: 16000000, // 4000x4000 MP images and larger get resized\n defaultMime: 'image/jpeg',\n imageQuality: 0.8\n};\n\nexport function fixDataUrl(dataUrl: string, useHighQuality: boolean): Promise<string> {\n return _dataUrlToImage(dataUrl)\n .then((image: any) => {\n const resizeRequirement = _isResizeRequired(image, useHighQuality);\n\n if (resizeRequirement.resized) {\n return _resizeCanvas(image, resizeRequirement);\n }\n\n return dataUrl;\n });\n}\n\nfunction _dataUrlToImage(dataUrl: string) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.onload = () => resolve(img);\n img.onerror = (err) => reject(err);\n img.src = dataUrl;\n });\n}\n\nfunction _isResizeRequired(image: any, useHighQuality?: boolean) {\n const maxImageSize = useHighQuality\n ? FIX_SETTINGS.highQualityImageSizeThreshold\n : FIX_SETTINGS.imageSizeThreshold;\n\n if (image.naturalWidth * image.naturalHeight > maxImageSize) {\n const ratio = image.naturalWidth / image.naturalHeight,\n newWidth = Math.sqrt(maxImageSize * ratio),\n newHeight = newWidth / ratio;\n\n return {resized: true, width: newWidth, height: newHeight};\n }\n\n return {width: image.naturalWidth, height: image.naturalHeight};\n}\n\nfunction _resizeCanvas(image: any, size: any) {\n const canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('RESIZE_CANVAS_FAILED');\n }\n\n const {width, height} = size || _isResizeRequired(image);\n\n canvas.width = width;\n canvas.height = height;\n\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n return canvas.toDataURL(FIX_SETTINGS.defaultMime, FIX_SETTINGS.imageQuality);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@techsee/techsee-media-service",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "Techsee Media Service",
|
|
5
5
|
"author": "TechSee",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@techsee/kurento-utils-temasys-mod": "6.6.3-dev-3",
|
|
29
29
|
"@techsee/openvidu-browser": "~12.15.6",
|
|
30
|
-
"@techsee/techsee-common": "^3.
|
|
30
|
+
"@techsee/techsee-common": "^3.12.0",
|
|
31
31
|
"bluebird": "~3.7.2",
|
|
32
32
|
"kurento-utils": "6.6.2",
|
|
33
33
|
"lodash": "4.17.20",
|