@techsee/techsee-media-service 18.6.1 → 19.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.
Files changed (141) hide show
  1. package/lib/LocalStreamManager.d.ts +1 -0
  2. package/lib/LocalStreamManager.d.ts.map +1 -1
  3. package/lib/LocalStreamManager.js +320 -441
  4. package/lib/LocalStreamManager.js.map +1 -1
  5. package/lib/MediaConstants.d.ts +1 -0
  6. package/lib/MediaConstants.d.ts.map +1 -1
  7. package/lib/MediaConstants.js +53 -95
  8. package/lib/MediaConstants.js.map +1 -1
  9. package/lib/MediaContracts.d.ts +1 -0
  10. package/lib/MediaContracts.d.ts.map +1 -1
  11. package/lib/MediaContracts.js +2 -5
  12. package/lib/MediaContracts.js.map +1 -1
  13. package/lib/MediaPublisher.d.ts +1 -0
  14. package/lib/MediaPublisher.d.ts.map +1 -1
  15. package/lib/MediaPublisher.js +36 -49
  16. package/lib/MediaPublisher.js.map +1 -1
  17. package/lib/MediaServiceBase.d.ts +1 -0
  18. package/lib/MediaServiceBase.d.ts.map +1 -1
  19. package/lib/MediaServiceBase.js +687 -937
  20. package/lib/MediaServiceBase.js.map +1 -1
  21. package/lib/MediaSession/MediaServer.d.ts +1 -0
  22. package/lib/MediaSession/MediaServer.d.ts.map +1 -1
  23. package/lib/MediaSession/MediaServer.js +372 -517
  24. package/lib/MediaSession/MediaServer.js.map +1 -1
  25. package/lib/MediaSession/MediaSessionBase.d.ts +1 -0
  26. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  27. package/lib/MediaSession/MediaSessionBase.js +88 -127
  28. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  29. package/lib/MediaSession/SessionOpentok.d.ts +1 -0
  30. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  31. package/lib/MediaSession/SessionOpentok.js +357 -503
  32. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  33. package/lib/MediaSession/SessionTurn.d.ts +1 -0
  34. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  35. package/lib/MediaSession/SessionTurn.js +431 -613
  36. package/lib/MediaSession/SessionTurn.js.map +1 -1
  37. package/lib/MediaSession/TurnConstants.d.ts +1 -0
  38. package/lib/MediaSession/TurnConstants.d.ts.map +1 -1
  39. package/lib/MediaSession/TurnConstants.js +17 -32
  40. package/lib/MediaSession/TurnConstants.js.map +1 -1
  41. package/lib/MediaSubscriber.d.ts +1 -0
  42. package/lib/MediaSubscriber.d.ts.map +1 -1
  43. package/lib/MediaSubscriber.js +189 -245
  44. package/lib/MediaSubscriber.js.map +1 -1
  45. package/lib/MediaUtils/Compatibility.d.ts +1 -0
  46. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  47. package/lib/MediaUtils/Compatibility.js +129 -283
  48. package/lib/MediaUtils/Compatibility.js.map +1 -1
  49. package/lib/MediaUtils/MediaDomUtils.d.ts +1 -0
  50. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  51. package/lib/MediaUtils/MediaDomUtils.js +184 -252
  52. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  53. package/lib/MediaUtils/MediaTracer.d.ts +1 -0
  54. package/lib/MediaUtils/MediaTracer.d.ts.map +1 -1
  55. package/lib/MediaUtils/MediaTracer.js +3 -10
  56. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  57. package/lib/MediaUtils/index.d.ts +1 -0
  58. package/lib/MediaUtils/index.d.ts.map +1 -1
  59. package/lib/MediaUtils/index.js +3 -13
  60. package/lib/MediaUtils/index.js.map +1 -1
  61. package/lib/MultiParty/DetectWebRtcService.d.ts +1 -0
  62. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
  63. package/lib/MultiParty/DetectWebRtcService.js +92 -241
  64. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  65. package/lib/MultiParty/MediaCapabilitiesService.d.ts +1 -0
  66. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -1
  67. package/lib/MultiParty/MediaCapabilitiesService.js +143 -312
  68. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -1
  69. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +1 -0
  70. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -1
  71. package/lib/MultiParty/MediaCapabilitiesUtils.js +95 -277
  72. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -1
  73. package/lib/MultiParty/MediaTracer.d.ts +1 -0
  74. package/lib/MultiParty/MediaTracer.d.ts.map +1 -1
  75. package/lib/MultiParty/MediaTracer.js +3 -10
  76. package/lib/MultiParty/MediaTracer.js.map +1 -1
  77. package/lib/MultiParty/MultiPartyService.d.ts +1 -0
  78. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
  79. package/lib/MultiParty/MultiPartyService.js +24 -47
  80. package/lib/MultiParty/MultiPartyService.js.map +1 -1
  81. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +2 -1
  82. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
  83. package/lib/MultiParty/MultiPartyServiceFactory.js +7 -15
  84. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  85. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +1 -0
  86. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -1
  87. package/lib/MultiParty/MultipartyServiceEventTypes.js +11 -15
  88. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -1
  89. package/lib/MultiParty/index.d.ts +1 -0
  90. package/lib/MultiParty/index.d.ts.map +1 -1
  91. package/lib/MultiParty/index.js +15 -35
  92. package/lib/MultiParty/index.js.map +1 -1
  93. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +2 -1
  94. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -1
  95. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +457 -839
  96. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -1
  97. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +1 -0
  98. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +1 -1
  99. package/lib/MultiParty/opentok/OpentokPublisher.js +107 -269
  100. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -1
  101. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts +1 -0
  102. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts.map +1 -1
  103. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js +34 -54
  104. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -1
  105. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts +1 -0
  106. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts.map +1 -1
  107. package/lib/MultiParty/opentok/OpentokScreenPublisher.js +40 -77
  108. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +1 -1
  109. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts +1 -0
  110. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts.map +1 -1
  111. package/lib/MultiParty/opentok/OpentokSubscriber.js +20 -28
  112. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -1
  113. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts +1 -0
  114. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts.map +1 -1
  115. package/lib/MultiParty/opentok/OpentokVideoPublisher.js +150 -355
  116. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +1 -1
  117. package/lib/MultiParty/opentok/trace.d.ts +1 -0
  118. package/lib/MultiParty/opentok/trace.d.ts.map +1 -1
  119. package/lib/MultiParty/opentok/trace.js +11 -24
  120. package/lib/MultiParty/opentok/trace.js.map +1 -1
  121. package/lib/MultiParty/types.d.ts +1 -0
  122. package/lib/MultiParty/types.d.ts.map +1 -1
  123. package/lib/MultiParty/types.js +2 -5
  124. package/lib/MultiParty/types.js.map +1 -1
  125. package/lib/MultiParty/utils.d.ts +1 -0
  126. package/lib/MultiParty/utils.d.ts.map +1 -1
  127. package/lib/MultiParty/utils.js +5 -15
  128. package/lib/MultiParty/utils.js.map +1 -1
  129. package/lib/TechseeMediaStream.d.ts +1 -0
  130. package/lib/TechseeMediaStream.d.ts.map +1 -1
  131. package/lib/TechseeMediaStream.js +53 -61
  132. package/lib/TechseeMediaStream.js.map +1 -1
  133. package/lib/qos/raw-qos.d.ts +29 -0
  134. package/lib/qos/raw-qos.d.ts.map +1 -0
  135. package/lib/qos/raw-qos.js +247 -382
  136. package/lib/qos/raw-qos.js.map +1 -1
  137. package/lib/webrtc-ie-shim.d.ts +4 -0
  138. package/lib/webrtc-ie-shim.d.ts.map +1 -0
  139. package/lib/webrtc-ie-shim.js +1999 -3454
  140. package/lib/webrtc-ie-shim.js.map +1 -1
  141. package/package.json +42 -45
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/MediaServer.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__importDefault","mod","__esModule","defineProperty","exports","value","MediaServerSession","MediaSessionBase_1","require","MediaConstants_1","openvidu_browser_1","MediaTracer_1","guards_1","bluebird_1","get_1","trace","getMediaTracer","_super","sessionParams","streamFactory","_this","OV","_session","_lastStreamEvents","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onPublisherDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","connection","connectionId","enumerable","configurable","connectOnly","info","error","Promise","reject","OpenVidu","initSession","initSessionEvents","token","clientRole","_sessionParams","err","sessionDisconnect","resolve","promiseDisconnect","_peerConnections","forEach","peerConnection","push","destroyPeerConnection","all","then","removeSessionEvent","off","removeHandlers","getRemoteTrackStats","mediaTrack","undefined","promises","peerRole","destroyPublisherOnPeerConnection","mediaStream","replaceStreamTracks","Error","initHandlers","on","event","emitEvent","recordingEvents","RECORD_STARTED","RECORD_STOPPED","RECONNECTING","stream","sessionExistsGuard","warn","destroySubscriberOnPeerConnection","has","peerId","subscriber","unsubscribe","unregisterPeersRemoteMediaTracks","publisher","unpublish","localStream","createMediaSubscriber","remoteStream","subscribe","ownPeerId","getMediaStream","getTracks","addRemoteTrackToPeer","registerPeersRemoteTracks","destinationRole","_sessionStreamsManager","getMediaStreamForRole","videoSource","audioSource","track","kind","SessionClientRole","USER","ovParams","publishAudio","publishVideo","ovPublisher","initPublisher","preventDefault","JSON","parse","data","streams","peerType","clientType","SessionClientType","INITIATOR","GUEST","remoteMediaTracks","connectionTimoutPrt","set","reduce","promiseChain","streamEvent","publish","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"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","file":"MediaServer.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 __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MediaServerSession = void 0;\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar openvidu_browser_1 = require(\"@techsee/openvidu-browser\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar bluebird_1 = require(\"bluebird\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar trace = MediaTracer_1.getMediaTracer('MediaServerSession');\nvar MediaServerSession = /** @class */ (function (_super) {\n __extends(MediaServerSession, _super);\n function MediaServerSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this.OV = null;\n _this._session = null;\n _this._lastStreamEvents = [];\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onPublisherDestroyed = _this.onPublisherDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(MediaServerSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: false,\n configurable: true\n });\n MediaServerSession.prototype.connect = function (connectOnly) {\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return bluebird_1.Promise.reject('Cannot connect to session while another session is active');\n }\n // const iceServers = this._credentials.ice.map((item: any) => ({\n // urls: item.url,\n // username: item.login,\n // credential: item.password\n // }));\n this.OV = new openvidu_browser_1.OpenVidu();\n // this.OV.setAdvancedConfiguration({ iceServers });\n this._session = this.OV.initSession();\n this.initSessionEvents();\n return this._session\n .connect(this._credentials.token, { clientRole: this._sessionParams.clientRole })\n .catch(function (err) {\n trace.error('Error to connect to session Media Server: ', err);\n throw err;\n });\n };\n MediaServerSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n return this._session.disconnect(true);\n }\n };\n MediaServerSession.prototype.disconnect = function () {\n var _this = this;\n return new bluebird_1.Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var promiseDisconnect = [];\n _this._peerConnections.forEach(function (peerConnection) {\n promiseDisconnect.push(_this.destroyPeerConnection(peerConnection));\n });\n return bluebird_1.Promise.all(promiseDisconnect).then(function () {\n if (!_this._session) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n _this.removeSessionEvent();\n _this._session.disconnect();\n _this._lastStreamEvents = [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete _this._session;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete _this.OV;\n resolve();\n });\n });\n };\n MediaServerSession.prototype.removeSessionEvent = function () {\n if (!this._session) {\n return;\n }\n this._session.off('connectionCreated');\n this._session.off('streamCreated');\n this._session.off('streamDestroyed');\n this._session.off('connectionDestroyed');\n this._session.off('sessionDisconnected');\n this._session.off('recordingStarted');\n this._session.off('recordingStopped');\n this._sessionParams.removeHandlers && this._sessionParams.removeHandlers();\n trace.info('Remove Events Listener');\n };\n MediaServerSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore// @ts-ignore\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n trace.info('onMediaStreamDestroyed');\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return bluebird_1.Promise.all(promises).then(function () { return trace.info('onMediaStreamDestroyed: Success'); });\n };\n MediaServerSession.prototype.onPublisherDestroyed = function (connectionId) {\n trace.info('onPublisherDestroyed');\n var peerConnection = this._peerConnections.get(connectionId);\n if (!peerConnection) {\n return bluebird_1.Promise.resolve();\n }\n return this.destroyPublisherOnPeerConnection(peerConnection);\n };\n MediaServerSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n return bluebird_1.Promise.resolve(undefined);\n };\n MediaServerSession.prototype.replaceStreamTracks = function (mediaStream) {\n return bluebird_1.Promise.reject(new Error('Not implemented'));\n };\n MediaServerSession.prototype.initSessionEvents = function () {\n var _this = this;\n if (!this._session) {\n return;\n }\n this._sessionParams.initHandlers && this._sessionParams.initHandlers();\n this._lastStreamEvents = [];\n this._session.on('connectionCreated', this.connectionCreatedHandler);\n this._session.on('streamCreated', this.streamCreatedHandler);\n this._session.on('streamDestroyed', this.streamDestroyedHandler);\n this._session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this._session.on('recordingStarted', function (event) {\n trace.info('recordingStarted event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STARTED, event);\n });\n this._session.on('recordingStopped', function (event) {\n trace.info('recordingStopped event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);\n });\n this._session.on('reconnecting', function () {\n trace.info('reconnecting event');\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECONNECTING);\n });\n this._session.on('sessionDisconnected', this.disconnect);\n };\n MediaServerSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n };\n MediaServerSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n var peerConnection = this._peerConnections.get(connection.connectionId);\n this.destroySubscriberOnPeerConnection(peerConnection).catch(function () { return undefined; });\n }\n };\n MediaServerSession.prototype.destroyPeerConnection = function (peerConnection) {\n trace.info('destroyPeerConnection');\n this._peerConnections.delete(peerConnection.peerId);\n return bluebird_1.Promise.all([\n this.destroyPublisherOnPeerConnection(peerConnection),\n this.destroySubscriberOnPeerConnection(peerConnection)\n ])\n .then(function () { return undefined; })\n .catch(function () {\n trace.warn('destroyPeerConnection - something wrong with destroy');\n });\n };\n MediaServerSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n trace.info('destroySubscriberOnPeerConnection', peerConnection);\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n trace.info('destroySubscriberOnPeerConnection- before unregisterPeersRemoteMediaTracks');\n return this.unregisterPeersRemoteMediaTracks(peerConnection)\n .catch(function () { return trace.warn('Error removing remote streams from peerConnection'); })\n .then(function () {\n trace.info('destroySubscriberOnPeerConnection- unregisterPeersRemoteMediaTracks successfully');\n peerConnection.subscriber = null;\n });\n };\n MediaServerSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n trace.info('destroyPublisherOnPeerConnection');\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n trace.info('destroyPublisherOnPeerConnection- unpublish!');\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return bluebird_1.Promise.resolve();\n };\n MediaServerSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n trace.info('createMediaSubscriber');\n return new bluebird_1.Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n return reject('Session not exists');\n }\n trace.info('Before create subscriber');\n var subscriber = _this._session.subscribe(remoteStream, '', {}, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n return reject(err);\n }\n trace.info('create subscriber successfully', subscriber);\n return resolve(subscriber);\n });\n });\n };\n MediaServerSession.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n if (!event) {\n return bluebird_1.Promise.resolve();\n }\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return bluebird_1.Promise.resolve();\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist, add to streams to subscribe list', event);\n this._lastStreamEvents.push(event);\n return bluebird_1.Promise.resolve();\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n return this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n trace.info('Registering remote media tracks', peerConnection.subscriber);\n subscriber.stream\n .getMediaStream()\n .getTracks()\n .forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n return _this.registerPeersRemoteTracks(peerConnection);\n });\n };\n MediaServerSession.prototype.createStreamForPublishing = function (destinationRole) {\n var _this = this;\n trace.info('createStreamForPublishing');\n return this._sessionStreamsManager\n .getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n var stream = { videoSource: null, audioSource: null };\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n MediaServerSession.prototype.createMediaPublisher = function (stream) {\n var _this = this;\n var ovParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource\n };\n return new bluebird_1.Promise(function (resolve, reject) {\n var ovPublisher = _this.OV.initPublisher('', ovParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n ovPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n var connectionId = get_1.default(event, 'stream.connection.connectionId');\n _this.onPublisherDestroyed(connectionId);\n //We preventing the default, in order to prevent stop the stream by OV.\n //We managing streams by ourselves and if we allow OV to close the stream, it cannot be reused.\n event.preventDefault();\n });\n resolve(ovPublisher);\n });\n });\n };\n MediaServerSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var destinationRole = JSON.parse(connection.data).clientRole;\n this.createStreamForPublishing(destinationRole)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST\n : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n return _this.createMediaPublisher(streams).then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (connection.connectionId === _this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n return _this._lastStreamEvents\n .reduce(function (promiseChain, streamEvent) {\n return promiseChain.then(function () { return _this.streamCreatedHandler(streamEvent); });\n }, bluebird_1.Promise.resolve())\n .then(function () {\n if (peerConnection.publisher) {\n trace.info('Starting publish to peerConnection.publisher');\n return _this._session.publish(peerConnection.publisher).catch(function (err) {\n trace.info('Error during publish', peerConnection.publisher);\n if (peerConnection.publisher) {\n trace.info('Error during publish- unpublish');\n _this._session.unpublish(peerConnection.publisher);\n }\n throw err;\n });\n }\n return bluebird_1.Promise.resolve();\n });\n }\n })\n .catch(function (error) {\n trace.error('Error handling new peer connection', error);\n });\n };\n MediaServerSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no MediaServer session exists', shouldThrow);\n };\n return MediaServerSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.MediaServerSession = MediaServerSession;\n\n//# sourceMappingURL=MediaServer.js.map\n"]}
1
+ {"version":3,"file":"MediaServer.js","sourceRoot":"","sources":["../../src/MediaSession/MediaServer.ts"],"names":[],"mappings":"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"}
@@ -32,3 +32,4 @@ export declare abstract class MediaSessionBase<PeerType extends IMediaSessionPee
32
32
  protected unregisterPeersRemoteMediaTracks(peerConnection: PeerType): Promise<void>;
33
33
  protected getPeerConnectionByMediaTrack(mediaTrack: MediaStreamTrack): Nullable<PeerType>;
34
34
  }
35
+ //# sourceMappingURL=MediaSessionBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSession/MediaSessionBase.ts"],"names":[],"mappings":";AAAA,OAAO,EAAyC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EACH,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,mBAAmB,EAAE,GAAG,CAAC;CAC5B;AAED,oBAAY,eAAe;IACvB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,iBAAkB,SAAQ,iBAAiB;KAAG;CAC3D;AAID,8BAAsB,gBAAgB,CAAC,QAAQ,SAAS,iBAAiB;IACrE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3D,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAElE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IAElF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAE1C,SAAS,aACL,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAC7D,aAAa,EAAE,sBAAsB;IASzC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/E,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI;IAMzD,SAAS,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB;IAgCpG,SAAS,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,iBAAiB;IAiB3E,SAAS,CAAC,gCAAgC,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF,SAAS,CAAC,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC;CAmB5F","file":"MediaSessionBase.d.ts","sourcesContent":["import {KnownMediaStream, KnownMediaStreamKind, SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteMediaTrack\n} from '../MediaContracts';\n\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {Nullable} from '@techsee/techsee-common';\nimport {EventEmitter} from 'events';\n\nexport interface IMediaSessionPeer {\n peerId: string;\n peerType: SessionClientType;\n peerRole: SessionClientRole;\n remoteMediaTracks: RemoteMediaTrack[];\n connectionTimoutPrt: any;\n}\n\nexport enum recordingEvents {\n RECORD_STARTED = 'RECORD_STARTED',\n RECORD_STOPPED = 'RECORD_STOPPED',\n RECONNECTING = 'RECONNECTING'\n}\n\ndeclare global {\n interface RTCPeerConnection extends IMediaSessionPeer {}\n}\n\nconst trace = getMediaTracer('MediaSessionBase');\n\nexport abstract class MediaSessionBase<PeerType extends IMediaSessionPeer> {\n protected readonly _peerConnections: Map<string, PeerType>;\n\n protected readonly _sessionStreamsManager: ISessionStreamsManager;\n\n protected readonly _sessionParams: MediaSessionParams & MediaSessionConfiguration;\n\n protected readonly _emitter: EventEmitter;\n\n protected constructor(\n sessionParams: MediaSessionParams & MediaSessionConfiguration,\n streamFactory: ISessionStreamsManager\n ) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new EventEmitter();\n\n this._peerConnections = new Map();\n }\n\n registerEventCallback(event: string, callback: (eventArgs?: any) => void): void {\n this._emitter.on(event, callback);\n }\n\n protected emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n protected addRemoteTrackToPeer(sourcePeerConnection: IMediaSessionPeer, mediaTrack: MediaStreamTrack) {\n if (\n mediaTrack.kind === KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === SessionClientRole.AGENT\n ) {\n //Currently We don't support video streams from Agent side\n return;\n }\n\n let trackType: Nullable<KnownMediaStream> = null;\n\n if (mediaTrack.kind.toLowerCase() === KnownMediaStreamKind.Audio) {\n switch (sourcePeerConnection.peerRole) {\n case SessionClientRole.AGENT:\n trackType = KnownMediaStream.AGENT_AUDIO_STREAM;\n break;\n case SessionClientRole.OBSERVER:\n trackType = KnownMediaStream.OBSERVER_AUDIO_STREAM;\n break;\n default:\n trackType = KnownMediaStream.USER_AUDIO_STREAM;\n break;\n }\n } else {\n trackType = KnownMediaStream.USER_VIDEO_STREAM;\n }\n\n const remoteMediaTrack: RemoteMediaTrack = {mediaTrack, trackType, isRegistered: false};\n\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n }\n\n protected registerPeersRemoteTracks(sourcePeerConnection: IMediaSessionPeer) {\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach((remoteMediaTrack: RemoteMediaTrack) => {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n this._sessionStreamsManager\n .addRemoteMediaTrack(remoteMediaTrack)\n .then(() => {\n remoteMediaTrack.isRegistered = true;\n })\n .catch((error: any) => {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n }\n\n protected unregisterPeersRemoteMediaTracks(peerConnection: PeerType): Promise<void> {\n const promises: Promise<any>[] = [];\n\n peerConnection.remoteMediaTracks.forEach((remoteMediaTrack) => {\n const removalPromise = this._sessionStreamsManager\n .removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(() => (remoteMediaTrack.isRegistered = false))\n .catch(() => trace.warn('Error while removing remote media track', remoteMediaTrack));\n\n promises.push(removalPromise);\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n protected getPeerConnectionByMediaTrack(mediaTrack: MediaStreamTrack): Nullable<PeerType> {\n let peerConnectionOfTrack: Nullable<PeerType> = null;\n\n this._peerConnections.forEach((peerConnection: PeerType) => {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n\n const remoteTrack = peerConnection.remoteMediaTracks.filter(\n (track) => track.mediaTrack.id === mediaTrack.id\n );\n\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n\n return peerConnectionOfTrack;\n }\n}\n"]}
1
+ {"version":3,"file":"MediaSessionBase.d.ts","sourceRoot":"","sources":["../../src/MediaSession/MediaSessionBase.ts"],"names":[],"mappings":";AAAA,OAAO,EAAyC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EACH,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,mBAAmB,EAAE,GAAG,CAAC;CAC5B;AAED,oBAAY,eAAe;IACvB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAChC;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,iBAAkB,SAAQ,iBAAiB;KAAG;CAC3D;AAID,8BAAsB,gBAAgB,CAAC,QAAQ,SAAS,iBAAiB;IACrE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3D,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;IAElE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IAElF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAE1C,SAAS,aACL,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAC7D,aAAa,EAAE,sBAAsB;IASzC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/E,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI;IAMzD,SAAS,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB;IAgCpG,SAAS,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,iBAAiB;IAiB3E,SAAS,CAAC,gCAAgC,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF,SAAS,CAAC,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC;CAmB5F"}
@@ -1,139 +1,100 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.MediaSessionBase = exports.recordingEvents = void 0;
7
-
8
4
  var MediaConstants_1 = require("../MediaConstants");
9
-
10
5
  var MediaTracer_1 = require("../MediaUtils/MediaTracer");
11
-
12
6
  var events_1 = require("events");
13
-
14
7
  var recordingEvents;
15
-
16
8
  (function (recordingEvents) {
17
- recordingEvents["RECORD_STARTED"] = "RECORD_STARTED";
18
- recordingEvents["RECORD_STOPPED"] = "RECORD_STOPPED";
19
- recordingEvents["RECONNECTING"] = "RECONNECTING";
9
+ recordingEvents["RECORD_STARTED"] = "RECORD_STARTED";
10
+ recordingEvents["RECORD_STOPPED"] = "RECORD_STOPPED";
11
+ recordingEvents["RECONNECTING"] = "RECONNECTING";
20
12
  })(recordingEvents = exports.recordingEvents || (exports.recordingEvents = {}));
21
-
22
- var trace = MediaTracer_1.getMediaTracer('MediaSessionBase');
23
-
24
- var MediaSessionBase =
25
- /** @class */
26
- function () {
27
- function MediaSessionBase(sessionParams, streamFactory) {
28
- this._sessionParams = sessionParams;
29
- this._sessionStreamsManager = streamFactory;
30
- this._emitter = new events_1.EventEmitter();
31
- this._peerConnections = new Map();
32
- }
33
-
34
- MediaSessionBase.prototype.registerEventCallback = function (event, callback) {
35
- this._emitter.on(event, callback);
36
- };
37
-
38
- MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {
39
- var _this = this;
40
-
41
- setTimeout(function () {
42
- _this._emitter.emit(event, eventArgs);
43
- });
44
- };
45
-
46
- MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {
47
- if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video && sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {
48
- //Currently We don't support video streams from Agent side
49
- return;
13
+ var trace = (0, MediaTracer_1.getMediaTracer)('MediaSessionBase');
14
+ var MediaSessionBase = (function () {
15
+ function MediaSessionBase(sessionParams, streamFactory) {
16
+ this._sessionParams = sessionParams;
17
+ this._sessionStreamsManager = streamFactory;
18
+ this._emitter = new events_1.EventEmitter();
19
+ this._peerConnections = new Map();
50
20
  }
51
-
52
- var trackType = null;
53
-
54
- if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {
55
- switch (sourcePeerConnection.peerRole) {
56
- case MediaConstants_1.SessionClientRole.AGENT:
57
- trackType = MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM;
58
- break;
59
-
60
- case MediaConstants_1.SessionClientRole.OBSERVER:
61
- trackType = MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM;
62
- break;
63
-
64
- default:
65
- trackType = MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;
66
- break;
67
- }
68
- } else {
69
- trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;
70
- }
71
-
72
- var remoteMediaTrack = {
73
- mediaTrack: mediaTrack,
74
- trackType: trackType,
75
- isRegistered: false
21
+ MediaSessionBase.prototype.registerEventCallback = function (event, callback) {
22
+ this._emitter.on(event, callback);
76
23
  };
77
- sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);
78
- };
79
-
80
- MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {
81
- var _this = this;
82
-
83
- trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);
84
- sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {
85
- if (!remoteMediaTrack.isRegistered) {
86
- trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);
87
-
88
- _this._sessionStreamsManager.addRemoteMediaTrack(remoteMediaTrack).then(function () {
89
- remoteMediaTrack.isRegistered = true;
90
- })["catch"](function (error) {
91
- trace.warn('Error adding remote media track to available streams', error);
24
+ MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {
25
+ var _this = this;
26
+ setTimeout(function () {
27
+ _this._emitter.emit(event, eventArgs);
92
28
  });
93
- }
94
- });
95
- };
96
-
97
- MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {
98
- var _this = this;
99
-
100
- var promises = [];
101
- peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {
102
- var removalPromise = _this._sessionStreamsManager.removeMediaTrack(remoteMediaTrack.mediaTrack).then(function () {
103
- return remoteMediaTrack.isRegistered = false;
104
- })["catch"](function () {
105
- return trace.warn('Error while removing remote media track', remoteMediaTrack);
106
- });
107
-
108
- promises.push(removalPromise);
109
- });
110
- return Promise.all(promises).then(function () {
111
- return undefined;
112
- });
113
- };
114
-
115
- MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {
116
- var peerConnectionOfTrack = null;
117
-
118
- this._peerConnections.forEach(function (peerConnection) {
119
- if (peerConnectionOfTrack !== null) {
120
- return;
121
- }
122
-
123
- var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) {
124
- return track.mediaTrack.id === mediaTrack.id;
125
- });
126
-
127
- if (remoteTrack.length === 1) {
128
- peerConnectionOfTrack = peerConnection;
129
- }
130
- });
131
-
132
- return peerConnectionOfTrack;
133
- };
134
-
135
- return MediaSessionBase;
136
- }();
137
-
29
+ };
30
+ MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {
31
+ if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&
32
+ sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {
33
+ return;
34
+ }
35
+ var trackType = null;
36
+ if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {
37
+ switch (sourcePeerConnection.peerRole) {
38
+ case MediaConstants_1.SessionClientRole.AGENT:
39
+ trackType = MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM;
40
+ break;
41
+ case MediaConstants_1.SessionClientRole.OBSERVER:
42
+ trackType = MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM;
43
+ break;
44
+ default:
45
+ trackType = MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;
46
+ break;
47
+ }
48
+ }
49
+ else {
50
+ trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;
51
+ }
52
+ var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };
53
+ sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);
54
+ };
55
+ MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {
56
+ var _this = this;
57
+ trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);
58
+ sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {
59
+ if (!remoteMediaTrack.isRegistered) {
60
+ trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);
61
+ _this._sessionStreamsManager
62
+ .addRemoteMediaTrack(remoteMediaTrack)
63
+ .then(function () {
64
+ remoteMediaTrack.isRegistered = true;
65
+ })
66
+ .catch(function (error) {
67
+ trace.warn('Error adding remote media track to available streams', error);
68
+ });
69
+ }
70
+ });
71
+ };
72
+ MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {
73
+ var _this = this;
74
+ var promises = [];
75
+ peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {
76
+ var removalPromise = _this._sessionStreamsManager
77
+ .removeMediaTrack(remoteMediaTrack.mediaTrack)
78
+ .then(function () { return (remoteMediaTrack.isRegistered = false); })
79
+ .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });
80
+ promises.push(removalPromise);
81
+ });
82
+ return Promise.all(promises).then(function () { return undefined; });
83
+ };
84
+ MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {
85
+ var peerConnectionOfTrack = null;
86
+ this._peerConnections.forEach(function (peerConnection) {
87
+ if (peerConnectionOfTrack !== null) {
88
+ return;
89
+ }
90
+ var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });
91
+ if (remoteTrack.length === 1) {
92
+ peerConnectionOfTrack = peerConnection;
93
+ }
94
+ });
95
+ return peerConnectionOfTrack;
96
+ };
97
+ return MediaSessionBase;
98
+ }());
138
99
  exports.MediaSessionBase = MediaSessionBase;
139
- //# sourceMappingURL=MediaSessionBase.js.map
100
+ //# sourceMappingURL=MediaSessionBase.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/MediaSessionBase.js"],"names":["Object","defineProperty","exports","value","MediaSessionBase","recordingEvents","MediaConstants_1","require","MediaTracer_1","events_1","trace","getMediaTracer","sessionParams","streamFactory","_sessionParams","_sessionStreamsManager","_emitter","EventEmitter","_peerConnections","Map","prototype","registerEventCallback","event","callback","on","emitEvent","eventArgs","_this","setTimeout","emit","addRemoteTrackToPeer","sourcePeerConnection","mediaTrack","kind","KnownMediaStreamKind","Video","peerRole","SessionClientRole","AGENT","trackType","toLowerCase","Audio","KnownMediaStream","AGENT_AUDIO_STREAM","OBSERVER","OBSERVER_AUDIO_STREAM","USER_AUDIO_STREAM","USER_VIDEO_STREAM","remoteMediaTrack","isRegistered","remoteMediaTracks","push","registerPeersRemoteTracks","info","forEach","addRemoteMediaTrack","then","error","warn","unregisterPeersRemoteMediaTracks","peerConnection","promises","removalPromise","removeMediaTrack","Promise","all","undefined","getPeerConnectionByMediaTrack","peerConnectionOfTrack","remoteTrack","filter","track","id","length"],"mappings":"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","file":"MediaSessionBase.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MediaSessionBase = exports.recordingEvents = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar events_1 = require(\"events\");\nvar recordingEvents;\n(function (recordingEvents) {\n recordingEvents[\"RECORD_STARTED\"] = \"RECORD_STARTED\";\n recordingEvents[\"RECORD_STOPPED\"] = \"RECORD_STOPPED\";\n recordingEvents[\"RECONNECTING\"] = \"RECONNECTING\";\n})(recordingEvents = exports.recordingEvents || (exports.recordingEvents = {}));\nvar trace = MediaTracer_1.getMediaTracer('MediaSessionBase');\nvar MediaSessionBase = /** @class */ (function () {\n function MediaSessionBase(sessionParams, streamFactory) {\n this._sessionParams = sessionParams;\n this._sessionStreamsManager = streamFactory;\n this._emitter = new events_1.EventEmitter();\n this._peerConnections = new Map();\n }\n MediaSessionBase.prototype.registerEventCallback = function (event, callback) {\n this._emitter.on(event, callback);\n };\n MediaSessionBase.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n MediaSessionBase.prototype.addRemoteTrackToPeer = function (sourcePeerConnection, mediaTrack) {\n if (mediaTrack.kind === MediaConstants_1.KnownMediaStreamKind.Video &&\n sourcePeerConnection.peerRole === MediaConstants_1.SessionClientRole.AGENT) {\n //Currently We don't support video streams from Agent side\n return;\n }\n var trackType = null;\n if (mediaTrack.kind.toLowerCase() === MediaConstants_1.KnownMediaStreamKind.Audio) {\n switch (sourcePeerConnection.peerRole) {\n case MediaConstants_1.SessionClientRole.AGENT:\n trackType = MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM;\n break;\n case MediaConstants_1.SessionClientRole.OBSERVER:\n trackType = MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM;\n break;\n default:\n trackType = MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM;\n break;\n }\n }\n else {\n trackType = MediaConstants_1.KnownMediaStream.USER_VIDEO_STREAM;\n }\n var remoteMediaTrack = { mediaTrack: mediaTrack, trackType: trackType, isRegistered: false };\n sourcePeerConnection.remoteMediaTracks.push(remoteMediaTrack);\n };\n MediaSessionBase.prototype.registerPeersRemoteTracks = function (sourcePeerConnection) {\n var _this = this;\n trace.info('registerPeersRemoteTracks', sourcePeerConnection && sourcePeerConnection.remoteMediaTracks);\n sourcePeerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n if (!remoteMediaTrack.isRegistered) {\n trace.info('call addRemoteMediaTrack with the remote media track', remoteMediaTrack);\n _this._sessionStreamsManager\n .addRemoteMediaTrack(remoteMediaTrack)\n .then(function () {\n remoteMediaTrack.isRegistered = true;\n })\n .catch(function (error) {\n trace.warn('Error adding remote media track to available streams', error);\n });\n }\n });\n };\n MediaSessionBase.prototype.unregisterPeersRemoteMediaTracks = function (peerConnection) {\n var _this = this;\n var promises = [];\n peerConnection.remoteMediaTracks.forEach(function (remoteMediaTrack) {\n var removalPromise = _this._sessionStreamsManager\n .removeMediaTrack(remoteMediaTrack.mediaTrack)\n .then(function () { return (remoteMediaTrack.isRegistered = false); })\n .catch(function () { return trace.warn('Error while removing remote media track', remoteMediaTrack); });\n promises.push(removalPromise);\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n MediaSessionBase.prototype.getPeerConnectionByMediaTrack = function (mediaTrack) {\n var peerConnectionOfTrack = null;\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnectionOfTrack !== null) {\n return;\n }\n var remoteTrack = peerConnection.remoteMediaTracks.filter(function (track) { return track.mediaTrack.id === mediaTrack.id; });\n if (remoteTrack.length === 1) {\n peerConnectionOfTrack = peerConnection;\n }\n });\n return peerConnectionOfTrack;\n };\n return MediaSessionBase;\n}());\nexports.MediaSessionBase = MediaSessionBase;\n\n//# sourceMappingURL=MediaSessionBase.js.map\n"]}
1
+ {"version":3,"file":"MediaSessionBase.js","sourceRoot":"","sources":["../../src/MediaSession/MediaSessionBase.ts"],"names":[],"mappings":"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"}
@@ -49,3 +49,4 @@ export declare class OpentokSession extends MediaSessionBase<OTPeerConnection> i
49
49
  private sessionExistsGuard;
50
50
  }
51
51
  export {};
52
+ //# sourceMappingURL=SessionOpentok.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AAKxF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AAED,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,aAAK,WAAW,GAAG,GAAG,CAAC;AAEvB,aAAK,YAAY,GAAG,GAAG,CAAC;AA8BxB,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAA8B;IAE9C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,OAAO,KAAK,SAAS,GAEpB;gBAEW,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,iBAAiB,IAAI,IAAI;IAMzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0B5E,OAAO,CAAC,wBAAwB;IAoFhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,yBAAyB;IAmCjC,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,iCAAiC;IAsBzC,OAAO,CAAC,kBAAkB;CAK7B","file":"SessionOpentok.d.ts","sourcesContent":["import {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaSession,\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\n\nimport {SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {IMediaSessionPeer, MediaSessionBase, recordingEvents} from './MediaSessionBase';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('OpentokSession');\n\ndeclare global {\n interface Window {\n OT: any;\n }\n}\n\ninterface OTConnection {\n connectionId: string;\n}\n\ntype OTPublisher = any;\n\ntype OTSubscriber = any;\n\ninterface IOTSession {\n sessionId: string;\n\n connection: Nullable<OTConnection>;\n\n isConnected(): boolean;\n\n connect(token: string, cb: any): void;\n\n disconnect(): void;\n\n publish(publisher: OTPublisher, cb: any): void;\n\n unpublish(publisher: OTPublisher): void;\n\n subscribe(stream: any, container: any, uiProps: any, doneCb: any): OTSubscriber;\n\n unsubscribe(subscriber: OTSubscriber): void;\n\n getSubscribersForStream(stream: any): OTSubscriber[];\n\n off(): void;\n\n on(param: string, cb: any): void;\n\n once(param: string, cb: any): void;\n}\n\ninterface OTStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\ninterface OTPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OTStreamSource>;\n connection: OTConnection;\n publisher: Nullable<OTPublisher>;\n subscriber: Nullable<OTSubscriber>;\n}\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class OpentokSession extends MediaSessionBase<OTPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n private _lastStreamEvents: any[] = [];\n private _session: Nullable<IOTSession> = null;\n\n get id(): string {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n }\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n\n this._credentials = sessionParams.credentials;\n\n this.connect = this.connect.bind(this);\n this.disconnect = this.disconnect.bind(this);\n this.onMediaStreamDestroyed = this.onMediaStreamDestroyed.bind(this);\n this.onMediaStreamRenewed = this.onMediaStreamRenewed.bind(this);\n\n this.createStreamForPublishing = this.createStreamForPublishing.bind(this);\n this.createMediaPublisher = this.createMediaPublisher.bind(this);\n this.connectionCreatedHandler = this.connectionCreatedHandler.bind(this);\n this.connectionDestroyedHandler = this.connectionDestroyedHandler.bind(this);\n this.streamCreatedHandler = this.streamCreatedHandler.bind(this);\n this.streamDestroyedHandler = this.streamDestroyedHandler.bind(this);\n }\n\n sessionDisconnect(): void {\n if (this._session) {\n this._session.disconnect();\n }\n }\n\n connect(): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n return new Promise((resolve, reject) => {\n const handleError = (error: any): void => {\n this._session && this._session!.off();\n this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n\n const {apiKey, sessionId} = this._sessionParams.credentials;\n\n this._session = (window as any).OTSESSION = window.OT.initSession(apiKey, sessionId);\n this._lastStreamEvents = [];\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('archiveStarted', (event: any) => {\n trace.info('archiveStarted event', event);\n this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n\n this._session!.on('archiveStopped', (event: any) => {\n trace.info('archiveStopped event', event);\n this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n\n const connectHandler = (error: any): void => {\n if (error) {\n handleError(error);\n\n return;\n }\n\n resolve();\n };\n\n this._session!.connect(this._credentials.token, connectHandler);\n });\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n const currentSession = this._session;\n\n this._session = null;\n\n this._peerConnections.forEach((peerConnection) => {\n this.destroyPeerConnection(peerConnection);\n });\n\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n this._lastStreamEvents = [];\n\n trace.info('Disconnection from session completed');\n\n resolve();\n });\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>): Promise<void> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n return new Promise((resolve: any, reject: any) => {\n const peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n\n return;\n }\n\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack!.subscriber.getStats((error: any, stats: any) => {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({trackId: mediaTrack.id, trackStats: {}});\n\n return;\n }\n\n resolve({trackId: mediaTrack.id, trackStats: stats});\n });\n });\n }\n\n //#region OpenTok Events Handlers\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const destinationRole = JSON.parse(connection.data).clientRole;\n\n this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId)\n .then((streams: OTStreamSource) => {\n const peerConnection: OTPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType:\n this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST\n : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (connection.connectionId !== this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n return this.createMediaPublisher(streams).then((publisher: OTPublisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OTPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (connection.connectionId === this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n\n /*\n When publisher connect after others participants,\n make sure the publisher will not loose their stream to subscribe\n */\n return this._lastStreamEvents\n .reduce(\n (promiseChain: any, streamEvent: any) =>\n promiseChain.then(() => this.streamCreatedHandler(streamEvent)),\n Promise.resolve()\n )\n .then(() => {\n if (peerConnection.publisher) {\n return new Promise<void>((resolve, reject) => {\n trace.info('Starting publish to peerConnection.publisher');\n this._session!.publish(peerConnection.publisher, (error: any) => {\n if (error) {\n trace.error(`Publish to peerConnection error ${error}`);\n\n return reject(error);\n }\n\n trace.info('Publish to peerConnection success');\n\n return resolve();\n });\n });\n }\n\n return Promise.resolve();\n });\n }\n })\n .catch((error: any) => {\n //Need to handle fail cases during reliability\n trace.error(`Error handling new peer connection: ${error}`);\n });\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId)!);\n }\n }\n\n private streamCreatedHandler(event: any): void {\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return;\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n this._lastStreamEvents.push(event);\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n this.createMediaSubscriber(stream).then((subscriber: OTSubscriber) => {\n peerConnection.subscriber = subscriber;\n });\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() =>\n trace.warn('Error destroying subscriber on stream destroy')\n );\n }\n\n //#endregion\n\n //#region PeerConnection\n\n private destroyPeerConnection(peerConnection: OTPeerConnection): void {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection).catch(() =>\n trace.warn('Error destroying publisher on peer destroy')\n );\n this.destroySubscriberOnPeerConnection(peerConnection).catch(() =>\n trace.warn('Error destroying subscriber on peer destroy')\n );\n }\n\n //#endregion\n\n //#region Publisher\n\n private createStreamForPublishing(\n destinationRole: SessionClientRole,\n shouldCreateStream: boolean\n ): Promise<OTStreamSource> {\n trace.info('createStreamForPublishing');\n const stream: OTStreamSource = {videoSource: null, audioSource: null};\n\n if (!shouldCreateStream) {\n trace.info(\n `createStreamForPublishing - destinationRole: ${destinationRole} not supposed to create a stream`\n );\n\n return Promise.resolve(stream);\n }\n\n return this._sessionStreamsManager\n .getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OTStreamSource): Promise<OTPublisher> {\n const otParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource,\n showControls: false,\n insertDefaultUI: false\n };\n\n return new Promise((resolve, reject) => {\n const otPublisher = window.OT.initPublisher(undefined, otParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n otPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n //We preventing the default, in order to prevent stop the stream by OT.\n //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.\n event.preventDefault();\n });\n otPublisher.on('videoElementCreated', (event: any) => {\n event.element.muted = true;\n });\n otPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, otPublisher.stream.hasAudio);\n });\n\n resolve(otPublisher);\n });\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n //#endregion\n\n //#region Subscriber\n\n private createMediaSubscriber(remoteStream: any): Promise<OTSubscriber> {\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n reject('Session not exists');\n\n return;\n }\n\n const subscriber: OTSubscriber = this._session!.subscribe(\n remoteStream,\n null,\n {insertDefaultUI: false},\n (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n\n return;\n }\n\n subscriber.on('videoElementCreated', (event: any) => {\n const {element} = event;\n const peerConnection = this._peerConnections.get(remoteStream.connection.connectionId)!;\n const otMediaStream: MediaStream = element.srcObject;\n\n peerConnection.subscriber = subscriber;\n\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n\n return;\n }\n\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n this.registerPeersRemoteTracks(peerConnection);\n });\n\n resolve(subscriber);\n }\n );\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n peerConnection.subscriber = null;\n\n return Promise.resolve();\n\n /**\n REMARK- opentok provide the same media track id for all participates.\n when we unregister the media track we check by the id which is the same for all.\n **/\n // return this.unregisterPeersRemoteMediaTracks(peerConnection)\n // .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n // .then(() => {\n // peerConnection.subscriber = null;\n // });\n }\n\n //#endregion\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n }\n}\n"]}
1
+ {"version":3,"file":"SessionOpentok.d.ts","sourceRoot":"","sources":["../../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AAKxF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AAED,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,aAAK,WAAW,GAAG,GAAG,CAAC;AAEvB,aAAK,YAAY,GAAG,GAAG,CAAC;AA8BxB,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAA8B;IAE9C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,OAAO,KAAK,SAAS,GAEpB;gBAEW,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,iBAAiB,IAAI,IAAI;IAMzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0B5E,OAAO,CAAC,wBAAwB;IAoFhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,yBAAyB;IAmCjC,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,iCAAiC;IAsBzC,OAAO,CAAC,kBAAkB;CAK7B"}