@techsee/techsee-media-service 18.5.2 → 18.6.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 (38) hide show
  1. package/lib/LocalStreamManager.js.map +1 -1
  2. package/lib/MediaConstants.js.map +1 -1
  3. package/lib/MediaContracts.js.map +1 -1
  4. package/lib/MediaPublisher.js.map +1 -1
  5. package/lib/MediaServiceBase.js.map +1 -1
  6. package/lib/MediaSession/MediaServer.js.map +1 -1
  7. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  8. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  9. package/lib/MediaSession/SessionTurn.js.map +1 -1
  10. package/lib/MediaSession/TurnConstants.js.map +1 -1
  11. package/lib/MediaSubscriber.js.map +1 -1
  12. package/lib/MediaUtils/Compatibility.js.map +1 -1
  13. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  14. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  15. package/lib/MediaUtils/index.js.map +1 -1
  16. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  17. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -1
  18. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -1
  19. package/lib/MultiParty/MediaTracer.js.map +1 -1
  20. package/lib/MultiParty/MultiPartyService.js.map +1 -1
  21. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  22. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -1
  23. package/lib/MultiParty/index.js.map +1 -1
  24. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -1
  25. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -1
  26. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -1
  27. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +1 -1
  28. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -1
  29. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +1 -1
  30. package/lib/MultiParty/opentok/trace.js.map +1 -1
  31. package/lib/MultiParty/types.js.map +1 -1
  32. package/lib/MultiParty/utils.js.map +1 -1
  33. package/lib/TechseeMediaStream.js.map +1 -1
  34. package/lib/qos/raw-qos.js +1 -1
  35. package/lib/qos/raw-qos.js.map +1 -1
  36. package/lib/webrtc-ie-shim.js +1 -1
  37. package/lib/webrtc-ie-shim.js.map +1 -1
  38. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/SessionTurn.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__createBinding","o","m","k","k2","undefined","defineProperty","enumerable","get","__setModuleDefault","v","value","__importStar","mod","__esModule","result","__importDefault","exports","TurnWebRtcSession","io","require","once_1","MediaConstants_1","TurnConstants_1","MediaTracer_1","MediaSessionBase_1","trace","getMediaTracer","_super","sessionParams","sessionHandlers","streamFactory","_this","_sessionHandlers","_socket","_pendingPeersIce","iceServers","credentials","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_joinResponseHandler","bind","_iceCandidateReceivedHandler","_sendOfferHandler","_sdpOfferHandler","_initiatorPeerReconnectHandler","_peerDisconnectedHandler","_onSocketDisconnectedHandler","_sessionParams","sessionId","configurable","connect","connectOnly","info","_connectSocket","then","emit","SOCKET_EVENTS","OUTGOING","JOIN_ROOM","clientType","error","disconnect","MediaSessionDisconnectReason","ForcedByConsumer","_disconnectInternal","Promise","resolve","reject","socket","forceNew","reconnectionDelay","SOCKET_RECONNECTION_DELAY","reconnectionDelayMax","SOCKET_RECONNECTION_DELAY_MAX","reconnectionAttempts","SOCKET_RECONNECTION_ATTEMPTS","path","SOCKET_PATH","done","err","once","on","INCOMING","ERROR","SEND_OFFER","JOIN_RESPONSE","PEER_DISCONNECTED","SDP_OFFER","PUBLISHER_RECONNECT","ICE_CANDIDATE","reason","SignalingChannelDisconnect","replaceStreamTracks","mediaStream","promises","_peerConnections","forEach","peerConnection","getTracks","track","sender","getSenders","find","s","kind","push","replaceTrack","id","all","window","mediaStreamAlreadyReplaced","sendOfferEventData","uid","peerId","_createPeerConnection","SessionClientType","GUEST","SessionClientRole","AGENT","offerParams","offerToReceiveAudio","offerToReceiveVideo","_sessionStreamsManager","getMediaStreamForRole","addTrack","createOffer","offerDesc","sdpOffer","sdp","setLocalDescription","_setPeerConnectionMonitor","latestUserMediaStream","e","warn","joinResponseData","sdpAnswer","_withPeerConnection","answer","RTCSessionDescription","type","setRemoteDescription","_processQueuedIceCandidates","peerDisconnectedEvent","_destroyPeerConnection","sdpOfferEvent","INITIATOR","USER","remoteDesc","createAnswer","SDP_ANSWER","InitiatorPeerReconnected","onMediaStreamDestroyed","clientRole","PublishedStreamDestroyed","onMediaStreamRenewed","getRemoteTrackStats","mediaTrack","peerConnectionOfTrack","getPeerConnectionByMediaTrack","getStats","Error","sessionDisconnect","setTimeout","onDisconnectedHandler","peerConnectionType","peerConnectionRole","RTCPeerConnection","peerType","remoteMediaTracks","peerRole","connectionTimoutPrt","onconnectionstatechange","oniceconnectionstatechange","state","currentTarget","iceConnectionState","cnState","clearTimeout","indexOf","_iceStateDisconnected","registerPeersRemoteTracks","onicecandidate","event","candidate","ontrack","trackEvent","addRemoteTrackToPeer","connectionState","set","_handlePeerConnectionTimeout","peerConnectivityTimeoutSeconds","PeerConnectionStateChangeTimeout","onicegatheringstatechange","unregisterPeersRemoteMediaTracks","close","callback","iceCandidateData","remoteDescription","_queueIceCandidate","_addIceCandidateToPeer","iceCandidate","addIceCandidate","pendingIces","pendingIce","PeerConnectionInterrupted","off","MediaSessionBase"],"mappings":"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","file":"SessionTurn.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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TurnWebRtcSession = void 0;\nvar io = __importStar(require(\"socket.io-client\"));\nvar once_1 = __importDefault(require(\"lodash/once\"));\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar TurnConstants_1 = require(\"./TurnConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar trace = MediaTracer_1.getMediaTracer('TurnWebRtcSession');\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nvar TurnWebRtcSession = /** @class */ (function (_super) {\n __extends(TurnWebRtcSession, _super);\n function TurnWebRtcSession(sessionParams, sessionHandlers, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this._sessionHandlers = sessionHandlers;\n _this._socket = null;\n _this._pendingPeersIce = {};\n var iceServers = sessionParams.credentials.ice.map(function (item) { return ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }); });\n _this._configuration = {\n iceServers: iceServers,\n iceTransportPolicy: 'relay'\n };\n _this._joinResponseHandler = _this._joinResponseHandler.bind(_this);\n _this._iceCandidateReceivedHandler = _this._iceCandidateReceivedHandler.bind(_this);\n _this._sendOfferHandler = _this._sendOfferHandler.bind(_this);\n _this._sdpOfferHandler = _this._sdpOfferHandler.bind(_this);\n _this._initiatorPeerReconnectHandler = _this._initiatorPeerReconnectHandler.bind(_this);\n _this._peerDisconnectedHandler = _this._peerDisconnectedHandler.bind(_this);\n _this._onSocketDisconnectedHandler = _this._onSocketDisconnectedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(TurnWebRtcSession.prototype, \"id\", {\n get: function () {\n return this._sessionParams.sessionId;\n },\n enumerable: false,\n configurable: true\n });\n //#region Socket Connectivity\n TurnWebRtcSession.prototype.connect = function (connectOnly) {\n var _this = this;\n if (connectOnly === void 0) { connectOnly = false; }\n trace.info('Connect to session');\n return this._connectSocket(this._sessionParams.credentials.url, connectOnly)\n .then(function () {\n trace.info('Joining SessionId: ' + _this._sessionParams.sessionId);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {\n clientType: _this._sessionParams.clientType,\n sessionId: _this._sessionParams.sessionId\n });\n })\n .catch(function (error) {\n throw error;\n });\n };\n TurnWebRtcSession.prototype.disconnect = function () {\n trace.info('disconnect - call disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.ForcedByConsumer);\n return this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.ForcedByConsumer);\n };\n TurnWebRtcSession.prototype._connectSocket = function (url, connectOnly) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var socket = (_this._socket = io.connect(url, {\n forceNew: true,\n reconnectionDelay: TurnConstants_1.SOCKET_RECONNECTION_DELAY,\n reconnectionDelayMax: TurnConstants_1.SOCKET_RECONNECTION_DELAY_MAX,\n reconnectionAttempts: TurnConstants_1.SOCKET_RECONNECTION_ATTEMPTS,\n path: TurnConstants_1.SOCKET_PATH\n }));\n var done = once_1.default(function (err) {\n err ? reject(err) : resolve();\n });\n socket.once('connect', function () { return done(); });\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.ERROR, done);\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n socket.on('disconnect', _this._onSocketDisconnectedHandler);\n if (!connectOnly) {\n trace.info('Subscribing socket events');\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.SEND_OFFER, _this._sendOfferHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, _this._joinResponseHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED, _this._peerDisconnectedHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.SDP_OFFER, _this._sdpOfferHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT, _this._initiatorPeerReconnectHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, _this._iceCandidateReceivedHandler);\n }\n });\n };\n TurnWebRtcSession.prototype._onSocketDisconnectedHandler = function (reason) {\n if (this._socket) {\n // The initial example of differentiating between \"forced\" disconnect and \"network\" disconnect is taken from:\n // https://socket.io/docs/client-api/#Event-%E2%80%98disconnect%E2%80%99\n if (reason !== 'io server disconnect' && reason !== 'io client disconnect') {\n trace.info('_onSocketDisconnectedHandler disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.SignalingChannelDisconnect);\n // the disconnection was initiated by the server or by client, you need to call (connect) manually\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.SignalingChannelDisconnect).catch(function () { return undefined; });\n }\n }\n };\n TurnWebRtcSession.prototype.replaceStreamTracks = function (mediaStream) {\n var promises = [];\n if (mediaStream && this._peerConnections) {\n trace.info('replaceStreamTracks - Replace local tracks to peer connection');\n this._peerConnections.forEach(function (peerConnection) {\n mediaStream.getTracks().forEach(function (track) {\n var sender = peerConnection.getSenders().find(function (s) { return s.track.kind === track.kind; });\n if (sender) {\n promises.push(sender\n .replaceTrack(track)\n .then(function () {\n return trace.info(\"replaceStreamTracks - Local \" + track.kind + \" \" + track.id + \" track replace to peer connection\");\n }));\n }\n });\n });\n }\n return Promise.all(promises).then(function () {\n window.mediaStreamAlreadyReplaced = true;\n trace.info('replaceStreamTracks: replace stream tracks - Success');\n });\n };\n //#endregion\n //#region WebRTC Initiator - session Initiator (User on mobile device)\n // Received by Initiator, causing him to emit SDP_OFFER\n TurnWebRtcSession.prototype._sendOfferHandler = function (sendOfferEventData) {\n var _this = this;\n var uid = sendOfferEventData.uid, peerId = sendOfferEventData.peerId;\n trace.info('_sendOfferHandler');\n //Currently we not support of passing role through signaling, so we assume every connection is \"AGENT\" like\n var peerConnection = this._createPeerConnection(peerId, MediaConstants_1.SessionClientType.GUEST, MediaConstants_1.SessionClientRole.AGENT);\n var offerParams = { offerToReceiveAudio: true, offerToReceiveVideo: true };\n //TODO - Alex: Currently we not sending \"role\" through signaling, and by default we assume that the one who asks fot offer, is agent.\n //On later stages we can send or the client \"role\" or the list of \"streams\" that peer is interested in.\n this._sessionStreamsManager\n .getMediaStreamForRole(MediaConstants_1.SessionClientRole.AGENT)\n .then(function (mediaStream) {\n trace.info('_sendOfferHandler stream and peer created');\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection for sending offer');\n mediaStream.getTracks().forEach(function (track) {\n peerConnection.addTrack(track, mediaStream);\n trace.info(\"Local \" + track.kind + \" \" + track.id + \" track added to peer connection\");\n });\n }\n else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(function () { return peerConnection.createOffer(offerParams); })\n .then(function (offerDesc) {\n trace.info('Initiator has created sdp offer', { offerDesc: offerDesc });\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.SDP_OFFER, {\n uid: uid,\n peerId: peerId,\n sessionId: _this._sessionParams.sessionId,\n sdpOffer: offerDesc.sdp\n });\n return peerConnection.setLocalDescription(offerDesc).then(function () {\n trace.info('Local description was set on peerConnection', peerConnection);\n _this._setPeerConnectionMonitor(peerConnection);\n // make sure using the tracks of the last stream that used\n if (window.latestUserMediaStream && window.mediaStreamAlreadyReplaced) {\n _this.replaceStreamTracks(window.latestUserMediaStream.mediaStream).catch(function (e) {\n return trace.warn('_sendOfferHandler - Failed to replaceStreamTrace', e);\n });\n }\n });\n })\n .catch(function (e) {\n trace.warn('Error', e);\n });\n };\n // Received by the Initiator: Indicates that publish should be started\n TurnWebRtcSession.prototype._joinResponseHandler = function (joinResponseData) {\n var _this = this;\n var sdpAnswer = joinResponseData.sdpAnswer, uid = joinResponseData.uid, peerId = joinResponseData.peerId;\n trace.info('joinResponse Received', { sdpAnswer: sdpAnswer });\n this._withPeerConnection(peerId, function (peerConnection) {\n var answer = new RTCSessionDescription({\n type: 'answer',\n sdp: sdpAnswer\n });\n peerConnection\n .setRemoteDescription(answer)\n .then(function () {\n trace.info('Remote description was set', answer);\n _this._processQueuedIceCandidates(peerId);\n })\n .catch(function (e) {\n trace.warn('Error', e);\n });\n });\n };\n // Received by Initiator after a guests socket has been disconnected\n TurnWebRtcSession.prototype._peerDisconnectedHandler = function (peerDisconnectedEvent) {\n var _this = this;\n var peerId = peerDisconnectedEvent.peerId;\n trace.info('_peerDisconnectedHandler');\n this._withPeerConnection(peerId, function (peerConnection) {\n _this._destroyPeerConnection(peerConnection);\n //this._disconnectInternal(MediaSessionDisconnectReason.PeerDisconnected).catch(() => undefined);\n });\n };\n //#endregion WebRTC Initiator - session Initiator (User on mobile device)\n //#region WebRTC Guest - session Guest (Agent on dashboard platform)\n // Received by Guest, causing him to emit SDP_ANSWER\n TurnWebRtcSession.prototype._sdpOfferHandler = function (sdpOfferEvent) {\n var _this = this;\n var sdpOffer = sdpOfferEvent.sdpOffer, peerId = sdpOfferEvent.peerId, uid = sdpOfferEvent.uid;\n trace.info('sdpOffer Received', { sdpOffer: sdpOffer });\n var peerConnection = this._createPeerConnection(peerId, MediaConstants_1.SessionClientType.INITIATOR, MediaConstants_1.SessionClientRole.USER);\n this._sessionStreamsManager\n .getMediaStreamForRole(MediaConstants_1.SessionClientRole.USER)\n .then(function (mediaStream) {\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection offer handler');\n mediaStream.getTracks().forEach(function (track) {\n peerConnection.addTrack(track, mediaStream);\n trace.info(\"Local \" + track.kind + \" track added to peer connection\");\n });\n }\n else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(function () {\n var remoteDesc = new RTCSessionDescription({ type: 'offer', sdp: sdpOffer });\n return peerConnection.setRemoteDescription(remoteDesc).then(function () {\n trace.info('Remote description was set', remoteDesc);\n return peerConnection.createAnswer().then(function (sdpAnswer) {\n trace.info('_sdpOfferHandler answer created', sdpAnswer);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {\n uid: uid,\n peerId: peerId,\n sessionId: _this._sessionParams.sessionId,\n sdpAnswer: sdpAnswer.sdp\n });\n return peerConnection.setLocalDescription(sdpAnswer).then(function () {\n trace.info('_sdpOfferHandler local desc was set');\n _this._processQueuedIceCandidates(peerId);\n _this._setPeerConnectionMonitor(peerConnection);\n });\n });\n });\n })\n .catch(function (e) {\n trace.error('Error in _sdpOfferHandler', e);\n throw e;\n });\n };\n // Received by Guest after an Initiator reconnects to room\n TurnWebRtcSession.prototype._initiatorPeerReconnectHandler = function () {\n trace.info('_initiatorPeerReconnectHandler disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.InitiatorPeerReconnected);\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.InitiatorPeerReconnected).catch(function (error) {\n trace.warn('Error while disconnecting during userPeerReconnectHandler.', error);\n });\n };\n //#endregion WebRTC Guest - session Guest (Agent on dashboard platform)\n //#region Peer Connection\n //#region Streams Handling\n TurnWebRtcSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n trace.info('onMediaStreamDestroyed disconnect all peer connections from session', MediaConstants_1.MediaSessionDisconnectReason.PublishedStreamDestroyed);\n this._peerConnections.forEach(function (peerConnection) {\n _this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PublishedStreamDestroyed).catch(function () { return undefined; });\n });\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n var peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n if (peerConnectionOfTrack !== null) {\n return peerConnectionOfTrack.getStats(mediaTrack);\n }\n return Promise.reject(new Error('Provided track is not remote track'));\n };\n //#endregion\n TurnWebRtcSession.prototype._disconnectInternal = function (reason) {\n var _this = this;\n this._peerConnections.forEach(function (peerConnection) {\n _this._destroyPeerConnection(peerConnection);\n });\n if (this._socket) {\n trace.info('Disconnecting from session', reason);\n this.sessionDisconnect();\n this._socket = null;\n setTimeout(function () { return _this._sessionHandlers.onDisconnectedHandler(reason); });\n }\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype._createPeerConnection = function (peerId, peerConnectionType, peerConnectionRole) {\n var _this = this;\n if (this._peerConnections.get(peerId)) {\n throw new Error(this._sessionParams.clientType + \" peer connection for \" + peerId + \" already exists\");\n }\n var peerConnection = new RTCPeerConnection(this._configuration);\n peerConnection.peerId = peerId;\n peerConnection.peerType = peerConnectionType;\n peerConnection.remoteMediaTracks = [];\n peerConnection.peerRole = peerConnectionRole;\n peerConnection.connectionTimoutPrt = null;\n peerConnection.onconnectionstatechange = function () {\n trace.info('onconnectionstatechange', peerConnection);\n };\n peerConnection.oniceconnectionstatechange = function (state) {\n trace.info(\"ICE Connection state for peer \" + peerId + \" was changed to: \" + state.currentTarget.iceConnectionState, state);\n var cnState = state.currentTarget.iceConnectionState;\n clearTimeout(peerConnection.connectionTimoutPrt);\n if (['closed', 'disconnected', 'failed'].indexOf(cnState) > -1) {\n _this._iceStateDisconnected(peerConnection);\n }\n else if (cnState === 'connected') {\n _this.registerPeersRemoteTracks(peerConnection);\n }\n };\n peerConnection.onicecandidate = function (event) {\n if (event.candidate) {\n trace.info(_this._sessionParams.clientType + \" peerConn.onicecandidate\", event.candidate);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId: _this._sessionParams.sessionId,\n peerId: peerId,\n candidate: event.candidate,\n clientType: _this._sessionParams.clientType\n });\n }\n else {\n trace.info('ICE Candidate is null in peerConnection', event);\n }\n };\n peerConnection.ontrack = function (trackEvent) {\n var track = trackEvent.track;\n trace.info(\"MediaStreamTrack arrived from peerConnection: \" + track.kind, track);\n _this.addRemoteTrackToPeer(peerConnection, track);\n if (peerConnection.connectionState === 'connected') {\n _this.registerPeersRemoteTracks(peerConnection);\n }\n };\n this._peerConnections.set(peerId, peerConnection);\n trace.info(peerConnectionType + \" peerConnection created\");\n return peerConnection;\n };\n TurnWebRtcSession.prototype._setPeerConnectionMonitor = function (peerConnection) {\n var _this = this;\n clearTimeout(peerConnection.connectionTimoutPrt);\n peerConnection.connectionTimoutPrt = setTimeout(function () {\n trace.info('PeerConnection ICE state timeout', peerConnection);\n _this._handlePeerConnectionTimeout(peerConnection);\n }, this._sessionParams.peerConnectivityTimeoutSeconds * 1000);\n };\n TurnWebRtcSession.prototype._handlePeerConnectionTimeout = function (peerConnection) {\n trace.info('_handlePeerConnectionTimeout disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout);\n if (peerConnection.peerRole === MediaConstants_1.SessionClientRole.USER) {\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout).catch(function () { return undefined; });\n }\n };\n TurnWebRtcSession.prototype._destroyPeerConnection = function (peerConnection) {\n trace.info('Destroying PeerConnection', peerConnection.peerType);\n peerConnection.ontrack = null;\n peerConnection.onicecandidate = null;\n peerConnection.onconnectionstatechange = null;\n peerConnection.oniceconnectionstatechange = null;\n peerConnection.onicegatheringstatechange = null;\n clearTimeout(peerConnection.connectionTimoutPrt);\n this.unregisterPeersRemoteMediaTracks(peerConnection).catch(function () { return undefined; });\n this._peerConnections.delete(peerConnection.peerId);\n peerConnection.close();\n };\n TurnWebRtcSession.prototype._withPeerConnection = function (peerId, callback) {\n if (this._peerConnections.get(peerId)) {\n return callback(this._peerConnections.get(peerId));\n }\n return undefined;\n };\n //#endregion\n //#region ICE Candidates\n TurnWebRtcSession.prototype._iceCandidateReceivedHandler = function (iceCandidateData) {\n var candidate = iceCandidateData.candidate, peerId = iceCandidateData.peerId;\n trace.info('_iceCandidateReceivedHandler', candidate);\n if (!candidate) {\n trace.info('Unexpected case, iceCandidate message arrived without candidate');\n return;\n }\n var peerConnection = this._peerConnections.get(peerId);\n if (!peerConnection || !peerConnection.remoteDescription) {\n trace.info('Queueing iceCandidate', candidate);\n this._queueIceCandidate(candidate, peerId);\n return;\n }\n trace.info('Going to add iceCandidate', candidate);\n this._addIceCandidateToPeer(candidate, peerConnection).catch(function () { return undefined; });\n };\n TurnWebRtcSession.prototype._addIceCandidateToPeer = function (iceCandidate, peerConnection) {\n return peerConnection\n .addIceCandidate(iceCandidate)\n .then(function () {\n trace.info('ICE Candidate add to peer connection');\n })\n .catch(function (e) {\n trace.warn('Error adding ICE Candidate to peer connection', e);\n throw e;\n });\n };\n TurnWebRtcSession.prototype._processQueuedIceCandidates = function (peerId) {\n var _this = this;\n this._withPeerConnection(peerId, function (peerConnection) {\n var pendingIces = _this._pendingPeersIce[peerId];\n if (pendingIces) {\n pendingIces.forEach(function (pendingIce) {\n trace.info('Adding pending ICE to peer connections');\n _this._addIceCandidateToPeer(pendingIce, peerConnection).catch(function () { return undefined; });\n });\n }\n else {\n trace.info('No pending ICE found for peer', peerId);\n }\n });\n };\n TurnWebRtcSession.prototype._queueIceCandidate = function (iceCandidate, peerId) {\n if (!this._pendingPeersIce[peerId]) {\n this._pendingPeersIce[peerId] = [];\n }\n this._pendingPeersIce[peerId].push(iceCandidate);\n };\n TurnWebRtcSession.prototype._iceStateDisconnected = function (peerConnection) {\n trace.info('_iceStateDisconnected disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionInterrupted);\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionInterrupted).catch(function () { return undefined; });\n };\n //#endregion\n TurnWebRtcSession.prototype.sessionDisconnect = function () {\n if (this._socket) {\n this._socket.off();\n this._socket.disconnect();\n }\n };\n return TurnWebRtcSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.TurnWebRtcSession = TurnWebRtcSession;\n\n//# sourceMappingURL=SessionTurn.js.map\n"]}
1
+ {"version":3,"sources":["MediaSession/SessionTurn.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__createBinding","o","m","k","k2","undefined","defineProperty","enumerable","get","__setModuleDefault","v","value","__importStar","mod","__esModule","result","__importDefault","exports","TurnWebRtcSession","io","require","once_1","MediaConstants_1","TurnConstants_1","MediaTracer_1","MediaSessionBase_1","trace","getMediaTracer","_super","sessionParams","sessionHandlers","streamFactory","_this","_sessionHandlers","_socket","_pendingPeersIce","iceServers","credentials","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_joinResponseHandler","bind","_iceCandidateReceivedHandler","_sendOfferHandler","_sdpOfferHandler","_initiatorPeerReconnectHandler","_peerDisconnectedHandler","_onSocketDisconnectedHandler","_sessionParams","sessionId","configurable","connect","connectOnly","info","_connectSocket","then","emit","SOCKET_EVENTS","OUTGOING","JOIN_ROOM","clientType","error","disconnect","MediaSessionDisconnectReason","ForcedByConsumer","_disconnectInternal","Promise","resolve","reject","socket","forceNew","reconnectionDelay","SOCKET_RECONNECTION_DELAY","reconnectionDelayMax","SOCKET_RECONNECTION_DELAY_MAX","reconnectionAttempts","SOCKET_RECONNECTION_ATTEMPTS","path","SOCKET_PATH","done","err","once","on","INCOMING","ERROR","SEND_OFFER","JOIN_RESPONSE","PEER_DISCONNECTED","SDP_OFFER","PUBLISHER_RECONNECT","ICE_CANDIDATE","reason","SignalingChannelDisconnect","replaceStreamTracks","mediaStream","promises","_peerConnections","forEach","peerConnection","getTracks","track","sender","getSenders","find","s","kind","push","replaceTrack","id","all","window","mediaStreamAlreadyReplaced","sendOfferEventData","uid","peerId","_createPeerConnection","SessionClientType","GUEST","SessionClientRole","AGENT","offerParams","offerToReceiveAudio","offerToReceiveVideo","_sessionStreamsManager","getMediaStreamForRole","addTrack","createOffer","offerDesc","sdpOffer","sdp","setLocalDescription","_setPeerConnectionMonitor","latestUserMediaStream","e","warn","joinResponseData","sdpAnswer","_withPeerConnection","answer","RTCSessionDescription","type","setRemoteDescription","_processQueuedIceCandidates","peerDisconnectedEvent","_destroyPeerConnection","sdpOfferEvent","INITIATOR","USER","remoteDesc","createAnswer","SDP_ANSWER","InitiatorPeerReconnected","onMediaStreamDestroyed","clientRole","PublishedStreamDestroyed","onMediaStreamRenewed","getRemoteTrackStats","mediaTrack","peerConnectionOfTrack","getPeerConnectionByMediaTrack","getStats","Error","sessionDisconnect","setTimeout","onDisconnectedHandler","peerConnectionType","peerConnectionRole","RTCPeerConnection","peerType","remoteMediaTracks","peerRole","connectionTimoutPrt","onconnectionstatechange","oniceconnectionstatechange","state","currentTarget","iceConnectionState","cnState","clearTimeout","indexOf","_iceStateDisconnected","registerPeersRemoteTracks","onicecandidate","event","candidate","ontrack","trackEvent","addRemoteTrackToPeer","connectionState","set","_handlePeerConnectionTimeout","peerConnectivityTimeoutSeconds","PeerConnectionStateChangeTimeout","onicegatheringstatechange","unregisterPeersRemoteMediaTracks","close","callback","iceCandidateData","remoteDescription","_queueIceCandidate","_addIceCandidateToPeer","iceCandidate","addIceCandidate","pendingIces","pendingIce","PeerConnectionInterrupted","off","MediaSessionBase"],"mappings":"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","file":"SessionTurn.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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TurnWebRtcSession = void 0;\nvar io = __importStar(require(\"socket.io-client\"));\nvar once_1 = __importDefault(require(\"lodash/once\"));\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar TurnConstants_1 = require(\"./TurnConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar trace = MediaTracer_1.getMediaTracer('TurnWebRtcSession');\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nvar TurnWebRtcSession = /** @class */ (function (_super) {\n __extends(TurnWebRtcSession, _super);\n function TurnWebRtcSession(sessionParams, sessionHandlers, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this._sessionHandlers = sessionHandlers;\n _this._socket = null;\n _this._pendingPeersIce = {};\n var iceServers = sessionParams.credentials.ice.map(function (item) { return ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }); });\n _this._configuration = {\n iceServers: iceServers,\n iceTransportPolicy: 'relay'\n };\n _this._joinResponseHandler = _this._joinResponseHandler.bind(_this);\n _this._iceCandidateReceivedHandler = _this._iceCandidateReceivedHandler.bind(_this);\n _this._sendOfferHandler = _this._sendOfferHandler.bind(_this);\n _this._sdpOfferHandler = _this._sdpOfferHandler.bind(_this);\n _this._initiatorPeerReconnectHandler = _this._initiatorPeerReconnectHandler.bind(_this);\n _this._peerDisconnectedHandler = _this._peerDisconnectedHandler.bind(_this);\n _this._onSocketDisconnectedHandler = _this._onSocketDisconnectedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(TurnWebRtcSession.prototype, \"id\", {\n get: function () {\n return this._sessionParams.sessionId;\n },\n enumerable: false,\n configurable: true\n });\n //#region Socket Connectivity\n TurnWebRtcSession.prototype.connect = function (connectOnly) {\n var _this = this;\n if (connectOnly === void 0) { connectOnly = false; }\n trace.info('Connect to session');\n return this._connectSocket(this._sessionParams.credentials.url, connectOnly)\n .then(function () {\n trace.info('Joining SessionId: ' + _this._sessionParams.sessionId);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {\n clientType: _this._sessionParams.clientType,\n sessionId: _this._sessionParams.sessionId\n });\n })\n .catch(function (error) {\n throw error;\n });\n };\n TurnWebRtcSession.prototype.disconnect = function () {\n trace.info('disconnect - call disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.ForcedByConsumer);\n return this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.ForcedByConsumer);\n };\n TurnWebRtcSession.prototype._connectSocket = function (url, connectOnly) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var socket = (_this._socket = io.connect(url, {\n forceNew: true,\n reconnectionDelay: TurnConstants_1.SOCKET_RECONNECTION_DELAY,\n reconnectionDelayMax: TurnConstants_1.SOCKET_RECONNECTION_DELAY_MAX,\n reconnectionAttempts: TurnConstants_1.SOCKET_RECONNECTION_ATTEMPTS,\n path: TurnConstants_1.SOCKET_PATH\n }));\n var done = once_1.default(function (err) {\n err ? reject(err) : resolve();\n });\n socket.once('connect', function () { return done(); });\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.ERROR, done);\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n socket.on('disconnect', _this._onSocketDisconnectedHandler);\n if (!connectOnly) {\n trace.info('Subscribing socket events');\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.SEND_OFFER, _this._sendOfferHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, _this._joinResponseHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED, _this._peerDisconnectedHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.SDP_OFFER, _this._sdpOfferHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT, _this._initiatorPeerReconnectHandler);\n socket.on(TurnConstants_1.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, _this._iceCandidateReceivedHandler);\n }\n });\n };\n TurnWebRtcSession.prototype._onSocketDisconnectedHandler = function (reason) {\n if (this._socket) {\n // The initial example of differentiating between \"forced\" disconnect and \"network\" disconnect is taken from:\n // https://socket.io/docs/client-api/#Event-%E2%80%98disconnect%E2%80%99\n if (reason !== 'io server disconnect' && reason !== 'io client disconnect') {\n trace.info('_onSocketDisconnectedHandler disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.SignalingChannelDisconnect);\n // the disconnection was initiated by the server or by client, you need to call (connect) manually\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.SignalingChannelDisconnect).catch(function () { return undefined; });\n }\n }\n };\n TurnWebRtcSession.prototype.replaceStreamTracks = function (mediaStream) {\n var promises = [];\n if (mediaStream && this._peerConnections) {\n trace.info('replaceStreamTracks - Replace local tracks to peer connection');\n this._peerConnections.forEach(function (peerConnection) {\n mediaStream.getTracks().forEach(function (track) {\n var sender = peerConnection.getSenders().find(function (s) { return s.track.kind === track.kind; });\n if (sender) {\n promises.push(sender\n .replaceTrack(track)\n .then(function () {\n return trace.info(\"replaceStreamTracks - Local \" + track.kind + \" \" + track.id + \" track replace to peer connection\");\n }));\n }\n });\n });\n }\n return Promise.all(promises).then(function () {\n window.mediaStreamAlreadyReplaced = true;\n trace.info('replaceStreamTracks: replace stream tracks - Success');\n });\n };\n //#endregion\n //#region WebRTC Initiator - session Initiator (User on mobile device)\n // Received by Initiator, causing him to emit SDP_OFFER\n TurnWebRtcSession.prototype._sendOfferHandler = function (sendOfferEventData) {\n var _this = this;\n var uid = sendOfferEventData.uid, peerId = sendOfferEventData.peerId;\n trace.info('_sendOfferHandler');\n //Currently we not support of passing role through signaling, so we assume every connection is \"AGENT\" like\n var peerConnection = this._createPeerConnection(peerId, MediaConstants_1.SessionClientType.GUEST, MediaConstants_1.SessionClientRole.AGENT);\n var offerParams = { offerToReceiveAudio: true, offerToReceiveVideo: true };\n //TODO - Alex: Currently we not sending \"role\" through signaling, and by default we assume that the one who asks fot offer, is agent.\n //On later stages we can send or the client \"role\" or the list of \"streams\" that peer is interested in.\n this._sessionStreamsManager\n .getMediaStreamForRole(MediaConstants_1.SessionClientRole.AGENT)\n .then(function (mediaStream) {\n trace.info('_sendOfferHandler stream and peer created');\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection for sending offer');\n mediaStream.getTracks().forEach(function (track) {\n peerConnection.addTrack(track, mediaStream);\n trace.info(\"Local \" + track.kind + \" \" + track.id + \" track added to peer connection\");\n });\n }\n else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(function () { return peerConnection.createOffer(offerParams); })\n .then(function (offerDesc) {\n trace.info('Initiator has created sdp offer', { offerDesc: offerDesc });\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.SDP_OFFER, {\n uid: uid,\n peerId: peerId,\n sessionId: _this._sessionParams.sessionId,\n sdpOffer: offerDesc.sdp\n });\n return peerConnection.setLocalDescription(offerDesc).then(function () {\n trace.info('Local description was set on peerConnection', peerConnection);\n _this._setPeerConnectionMonitor(peerConnection);\n // make sure using the tracks of the last stream that used\n if (window.latestUserMediaStream && window.mediaStreamAlreadyReplaced) {\n _this.replaceStreamTracks(window.latestUserMediaStream.mediaStream).catch(function (e) {\n return trace.warn('_sendOfferHandler - Failed to replaceStreamTrace', e);\n });\n }\n });\n })\n .catch(function (e) {\n trace.warn('Error', e);\n });\n };\n // Received by the Initiator: Indicates that publish should be started\n TurnWebRtcSession.prototype._joinResponseHandler = function (joinResponseData) {\n var _this = this;\n var sdpAnswer = joinResponseData.sdpAnswer, uid = joinResponseData.uid, peerId = joinResponseData.peerId;\n trace.info('joinResponse Received', { sdpAnswer: sdpAnswer });\n this._withPeerConnection(peerId, function (peerConnection) {\n var answer = new RTCSessionDescription({\n type: 'answer',\n sdp: sdpAnswer\n });\n peerConnection\n .setRemoteDescription(answer)\n .then(function () {\n trace.info('Remote description was set', answer);\n _this._processQueuedIceCandidates(peerId);\n })\n .catch(function (e) {\n trace.warn('Error', e);\n });\n });\n };\n // Received by Initiator after a guests socket has been disconnected\n TurnWebRtcSession.prototype._peerDisconnectedHandler = function (peerDisconnectedEvent) {\n var _this = this;\n var peerId = peerDisconnectedEvent.peerId;\n trace.info('_peerDisconnectedHandler');\n this._withPeerConnection(peerId, function (peerConnection) {\n _this._destroyPeerConnection(peerConnection);\n //this._disconnectInternal(MediaSessionDisconnectReason.PeerDisconnected).catch(() => undefined);\n });\n };\n //#endregion WebRTC Initiator - session Initiator (User on mobile device)\n //#region WebRTC Guest - session Guest (Agent on dashboard platform)\n // Received by Guest, causing him to emit SDP_ANSWER\n TurnWebRtcSession.prototype._sdpOfferHandler = function (sdpOfferEvent) {\n var _this = this;\n var sdpOffer = sdpOfferEvent.sdpOffer, peerId = sdpOfferEvent.peerId, uid = sdpOfferEvent.uid;\n trace.info('sdpOffer Received', { sdpOffer: sdpOffer });\n var peerConnection = this._createPeerConnection(peerId, MediaConstants_1.SessionClientType.INITIATOR, MediaConstants_1.SessionClientRole.USER);\n this._sessionStreamsManager\n .getMediaStreamForRole(MediaConstants_1.SessionClientRole.USER)\n .then(function (mediaStream) {\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection offer handler');\n mediaStream.getTracks().forEach(function (track) {\n peerConnection.addTrack(track, mediaStream);\n trace.info(\"Local \" + track.kind + \" track added to peer connection\");\n });\n }\n else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(function () {\n var remoteDesc = new RTCSessionDescription({ type: 'offer', sdp: sdpOffer });\n return peerConnection.setRemoteDescription(remoteDesc).then(function () {\n trace.info('Remote description was set', remoteDesc);\n return peerConnection.createAnswer().then(function (sdpAnswer) {\n trace.info('_sdpOfferHandler answer created', sdpAnswer);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {\n uid: uid,\n peerId: peerId,\n sessionId: _this._sessionParams.sessionId,\n sdpAnswer: sdpAnswer.sdp\n });\n return peerConnection.setLocalDescription(sdpAnswer).then(function () {\n trace.info('_sdpOfferHandler local desc was set');\n _this._processQueuedIceCandidates(peerId);\n _this._setPeerConnectionMonitor(peerConnection);\n });\n });\n });\n })\n .catch(function (e) {\n trace.error('Error in _sdpOfferHandler', e);\n throw e;\n });\n };\n // Received by Guest after an Initiator reconnects to room\n TurnWebRtcSession.prototype._initiatorPeerReconnectHandler = function () {\n trace.info('_initiatorPeerReconnectHandler disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.InitiatorPeerReconnected);\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.InitiatorPeerReconnected).catch(function (error) {\n trace.warn('Error while disconnecting during userPeerReconnectHandler.', error);\n });\n };\n //#endregion WebRTC Guest - session Guest (Agent on dashboard platform)\n //#region Peer Connection\n //#region Streams Handling\n TurnWebRtcSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n trace.info('onMediaStreamDestroyed disconnect all peer connections from session', MediaConstants_1.MediaSessionDisconnectReason.PublishedStreamDestroyed);\n this._peerConnections.forEach(function (peerConnection) {\n _this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PublishedStreamDestroyed).catch(function () { return undefined; });\n });\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n var peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n if (peerConnectionOfTrack !== null) {\n return peerConnectionOfTrack.getStats(mediaTrack);\n }\n return Promise.reject(new Error('Provided track is not remote track'));\n };\n //#endregion\n TurnWebRtcSession.prototype._disconnectInternal = function (reason) {\n var _this = this;\n this._peerConnections.forEach(function (peerConnection) {\n _this._destroyPeerConnection(peerConnection);\n });\n if (this._socket) {\n trace.info('Disconnecting from session', reason);\n this.sessionDisconnect();\n this._socket = null;\n setTimeout(function () { return _this._sessionHandlers.onDisconnectedHandler(reason); });\n }\n return Promise.resolve();\n };\n TurnWebRtcSession.prototype._createPeerConnection = function (peerId, peerConnectionType, peerConnectionRole) {\n var _this = this;\n if (this._peerConnections.get(peerId)) {\n throw new Error(this._sessionParams.clientType + \" peer connection for \" + peerId + \" already exists\");\n }\n var peerConnection = new RTCPeerConnection(this._configuration);\n peerConnection.peerId = peerId;\n peerConnection.peerType = peerConnectionType;\n peerConnection.remoteMediaTracks = [];\n peerConnection.peerRole = peerConnectionRole;\n peerConnection.connectionTimoutPrt = null;\n peerConnection.onconnectionstatechange = function () {\n trace.info('onconnectionstatechange', peerConnection);\n };\n peerConnection.oniceconnectionstatechange = function (state) {\n trace.info(\"ICE Connection state for peer \" + peerId + \" was changed to: \" + state.currentTarget.iceConnectionState, state);\n var cnState = state.currentTarget.iceConnectionState;\n clearTimeout(peerConnection.connectionTimoutPrt);\n if (['closed', 'disconnected', 'failed'].indexOf(cnState) > -1) {\n _this._iceStateDisconnected(peerConnection);\n }\n else if (cnState === 'connected') {\n _this.registerPeersRemoteTracks(peerConnection);\n }\n };\n peerConnection.onicecandidate = function (event) {\n if (event.candidate) {\n trace.info(_this._sessionParams.clientType + \" peerConn.onicecandidate\", event.candidate);\n _this._socket.emit(TurnConstants_1.SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId: _this._sessionParams.sessionId,\n peerId: peerId,\n candidate: event.candidate,\n clientType: _this._sessionParams.clientType\n });\n }\n else {\n trace.info('ICE Candidate is null in peerConnection', event);\n }\n };\n peerConnection.ontrack = function (trackEvent) {\n var track = trackEvent.track;\n trace.info(\"MediaStreamTrack arrived from peerConnection: \" + track.kind, track);\n _this.addRemoteTrackToPeer(peerConnection, track);\n if (peerConnection.connectionState === 'connected') {\n _this.registerPeersRemoteTracks(peerConnection);\n }\n };\n this._peerConnections.set(peerId, peerConnection);\n trace.info(peerConnectionType + \" peerConnection created\");\n return peerConnection;\n };\n TurnWebRtcSession.prototype._setPeerConnectionMonitor = function (peerConnection) {\n var _this = this;\n clearTimeout(peerConnection.connectionTimoutPrt);\n peerConnection.connectionTimoutPrt = setTimeout(function () {\n trace.info('PeerConnection ICE state timeout', peerConnection);\n _this._handlePeerConnectionTimeout(peerConnection);\n }, this._sessionParams.peerConnectivityTimeoutSeconds * 1000);\n };\n TurnWebRtcSession.prototype._handlePeerConnectionTimeout = function (peerConnection) {\n trace.info('_handlePeerConnectionTimeout disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout);\n if (peerConnection.peerRole === MediaConstants_1.SessionClientRole.USER) {\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout).catch(function () { return undefined; });\n }\n };\n TurnWebRtcSession.prototype._destroyPeerConnection = function (peerConnection) {\n trace.info('Destroying PeerConnection', peerConnection.peerType);\n peerConnection.ontrack = null;\n peerConnection.onicecandidate = null;\n peerConnection.onconnectionstatechange = null;\n peerConnection.oniceconnectionstatechange = null;\n peerConnection.onicegatheringstatechange = null;\n clearTimeout(peerConnection.connectionTimoutPrt);\n this.unregisterPeersRemoteMediaTracks(peerConnection).catch(function () { return undefined; });\n this._peerConnections.delete(peerConnection.peerId);\n peerConnection.close();\n };\n TurnWebRtcSession.prototype._withPeerConnection = function (peerId, callback) {\n if (this._peerConnections.get(peerId)) {\n return callback(this._peerConnections.get(peerId));\n }\n return undefined;\n };\n //#endregion\n //#region ICE Candidates\n TurnWebRtcSession.prototype._iceCandidateReceivedHandler = function (iceCandidateData) {\n var candidate = iceCandidateData.candidate, peerId = iceCandidateData.peerId;\n trace.info('_iceCandidateReceivedHandler', candidate);\n if (!candidate) {\n trace.info('Unexpected case, iceCandidate message arrived without candidate');\n return;\n }\n var peerConnection = this._peerConnections.get(peerId);\n if (!peerConnection || !peerConnection.remoteDescription) {\n trace.info('Queueing iceCandidate', candidate);\n this._queueIceCandidate(candidate, peerId);\n return;\n }\n trace.info('Going to add iceCandidate', candidate);\n this._addIceCandidateToPeer(candidate, peerConnection).catch(function () { return undefined; });\n };\n TurnWebRtcSession.prototype._addIceCandidateToPeer = function (iceCandidate, peerConnection) {\n return peerConnection\n .addIceCandidate(iceCandidate)\n .then(function () {\n trace.info('ICE Candidate add to peer connection');\n })\n .catch(function (e) {\n trace.warn('Error adding ICE Candidate to peer connection', e);\n throw e;\n });\n };\n TurnWebRtcSession.prototype._processQueuedIceCandidates = function (peerId) {\n var _this = this;\n this._withPeerConnection(peerId, function (peerConnection) {\n var pendingIces = _this._pendingPeersIce[peerId];\n if (pendingIces) {\n pendingIces.forEach(function (pendingIce) {\n trace.info('Adding pending ICE to peer connections');\n _this._addIceCandidateToPeer(pendingIce, peerConnection).catch(function () { return undefined; });\n });\n }\n else {\n trace.info('No pending ICE found for peer', peerId);\n }\n });\n };\n TurnWebRtcSession.prototype._queueIceCandidate = function (iceCandidate, peerId) {\n if (!this._pendingPeersIce[peerId]) {\n this._pendingPeersIce[peerId] = [];\n }\n this._pendingPeersIce[peerId].push(iceCandidate);\n };\n TurnWebRtcSession.prototype._iceStateDisconnected = function (peerConnection) {\n trace.info('_iceStateDisconnected disconnect from session', MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionInterrupted);\n this._disconnectInternal(MediaConstants_1.MediaSessionDisconnectReason.PeerConnectionInterrupted).catch(function () { return undefined; });\n };\n //#endregion\n TurnWebRtcSession.prototype.sessionDisconnect = function () {\n if (this._socket) {\n this._socket.off();\n this._socket.disconnect();\n }\n };\n return TurnWebRtcSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.TurnWebRtcSession = TurnWebRtcSession;\n\n//# sourceMappingURL=SessionTurn.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSession/TurnConstants.js"],"names":["Object","defineProperty","exports","value","SOCKET_PATH","SOCKET_RECONNECTION_ATTEMPTS","SOCKET_RECONNECTION_DELAY_MAX","SOCKET_RECONNECTION_DELAY","SOCKET_EVENTS","OUTGOING","ICE_CANDIDATE","JOIN_ROOM","SDP_OFFER","SDP_ANSWER","INCOMING","JOIN_RESPONSE","ERROR","SEND_OFFER","PUBLISHER_RECONNECT","PEER_DISCONNECTED"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,WAAR,GAAsBF,OAAO,CAACG,4BAAR,GAAuCH,OAAO,CAACI,6BAAR,GAAwCJ,OAAO,CAACK,yBAAR,GAAoCL,OAAO,CAACM,aAAR,GAAwB,KAAK,CAAtK;AACAN,OAAO,CAACM,aAAR,GAAwB;AACpBC,EAAAA,QAAQ,EAAE;AACN;AACAC,IAAAA,aAAa,EAAE,gBAFT;AAGN;AACAC,IAAAA,SAAS,EAAE,UAJL;AAKN;AACAC,IAAAA,SAAS,EAAE,cANL;AAON;AACAC,IAAAA,UAAU,EAAE;AARN,GADU;AAWpBC,EAAAA,QAAQ,EAAE;AACN;AACA;AACAC,IAAAA,aAAa,EAAE,cAHT;AAIN;AACAL,IAAAA,aAAa,EAAE,cALT;AAMN;AACAM,IAAAA,KAAK,EAAE,cAPD;AAQN;AACAC,IAAAA,UAAU,EAAE,WATN;AAUN;AACAL,IAAAA,SAAS,EAAE,cAXL;AAYN;AACAM,IAAAA,mBAAmB,EAAE,oBAbf;AAcN;AACAC,IAAAA,iBAAiB,EAAE;AAfb;AAXU,CAAxB;AA6BAjB,OAAO,CAACK,yBAAR,GAAoC,IAApC,EAA0CL,OAAO,CAACI,6BAAR,GAAwC,IAAlF,EAAwFJ,OAAO,CAACG,4BAAR,GAAuC,GAA/H,EAAoIH,OAAO,CAACE,WAAR,GAAsB,aAA1J","file":"TurnConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SOCKET_PATH = exports.SOCKET_RECONNECTION_ATTEMPTS = exports.SOCKET_RECONNECTION_DELAY_MAX = exports.SOCKET_RECONNECTION_DELAY = exports.SOCKET_EVENTS = void 0;\nexports.SOCKET_EVENTS = {\n OUTGOING: {\n // Emitted to a peer, offering an ICE candidate\n ICE_CANDIDATE: 'onIceCandidate',\n // Initial event, sent by pub/sub as a request to create/join a room\n JOIN_ROOM: 'joinRoom',\n // Sent by publisher, as a response to an SDP offer request (SEND_OFFER)\n SDP_OFFER: 'sdpOfferSend',\n // An SDP response (emitted after receiving an SDP offer)\n SDP_ANSWER: 'sdpAnswerSend'\n },\n INCOMING: {\n // In TURN - Received by a publisher, as a response to an SDP_ANSWER sent by a subscriber\n // In KMS - Received after JOIN_PIPELINE is processed\n JOIN_RESPONSE: 'joinResponse',\n // An incoming ICE candidate sent by a peer\n ICE_CANDIDATE: 'iceCandidate',\n // An error occured in the signaling server\n ERROR: 'errorOccured',\n // Received by a publisher (sent by signaling server when a peer joining a room)\n SEND_OFFER: 'sendOffer',\n // Recieved by a subscriber when publisher sent an SDP offer\n SDP_OFFER: 'sdpOfferRecv',\n // Recieved by all subscribers, when the publisher has reconnected\n PUBLISHER_RECONNECT: 'publisherReconnect',\n // Recieved by the publisher, when a subscriber has disconnected\n PEER_DISCONNECTED: 'peerDisconnected'\n }\n};\nexports.SOCKET_RECONNECTION_DELAY = 3000, exports.SOCKET_RECONNECTION_DELAY_MAX = 6000, exports.SOCKET_RECONNECTION_ATTEMPTS = 100, exports.SOCKET_PATH = '/socket2.io';\n\n//# sourceMappingURL=TurnConstants.js.map\n"]}
1
+ {"version":3,"sources":["MediaSession/TurnConstants.js"],"names":["Object","defineProperty","exports","value","SOCKET_PATH","SOCKET_RECONNECTION_ATTEMPTS","SOCKET_RECONNECTION_DELAY_MAX","SOCKET_RECONNECTION_DELAY","SOCKET_EVENTS","OUTGOING","ICE_CANDIDATE","JOIN_ROOM","SDP_OFFER","SDP_ANSWER","INCOMING","JOIN_RESPONSE","ERROR","SEND_OFFER","PUBLISHER_RECONNECT","PEER_DISCONNECTED"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;EAAEC,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,WAAR,GAAsBF,OAAO,CAACG,4BAAR,GAAuCH,OAAO,CAACI,6BAAR,GAAwCJ,OAAO,CAACK,yBAAR,GAAoCL,OAAO,CAACM,aAAR,GAAwB,KAAK,CAAtK;AACAN,OAAO,CAACM,aAAR,GAAwB;EACpBC,QAAQ,EAAE;IACN;IACAC,aAAa,EAAE,gBAFT;IAGN;IACAC,SAAS,EAAE,UAJL;IAKN;IACAC,SAAS,EAAE,cANL;IAON;IACAC,UAAU,EAAE;EARN,CADU;EAWpBC,QAAQ,EAAE;IACN;IACA;IACAC,aAAa,EAAE,cAHT;IAIN;IACAL,aAAa,EAAE,cALT;IAMN;IACAM,KAAK,EAAE,cAPD;IAQN;IACAC,UAAU,EAAE,WATN;IAUN;IACAL,SAAS,EAAE,cAXL;IAYN;IACAM,mBAAmB,EAAE,oBAbf;IAcN;IACAC,iBAAiB,EAAE;EAfb;AAXU,CAAxB;AA6BAjB,OAAO,CAACK,yBAAR,GAAoC,IAApC,EAA0CL,OAAO,CAACI,6BAAR,GAAwC,IAAlF,EAAwFJ,OAAO,CAACG,4BAAR,GAAuC,GAA/H,EAAoIH,OAAO,CAACE,WAAR,GAAsB,aAA1J","file":"TurnConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SOCKET_PATH = exports.SOCKET_RECONNECTION_ATTEMPTS = exports.SOCKET_RECONNECTION_DELAY_MAX = exports.SOCKET_RECONNECTION_DELAY = exports.SOCKET_EVENTS = void 0;\nexports.SOCKET_EVENTS = {\n OUTGOING: {\n // Emitted to a peer, offering an ICE candidate\n ICE_CANDIDATE: 'onIceCandidate',\n // Initial event, sent by pub/sub as a request to create/join a room\n JOIN_ROOM: 'joinRoom',\n // Sent by publisher, as a response to an SDP offer request (SEND_OFFER)\n SDP_OFFER: 'sdpOfferSend',\n // An SDP response (emitted after receiving an SDP offer)\n SDP_ANSWER: 'sdpAnswerSend'\n },\n INCOMING: {\n // In TURN - Received by a publisher, as a response to an SDP_ANSWER sent by a subscriber\n // In KMS - Received after JOIN_PIPELINE is processed\n JOIN_RESPONSE: 'joinResponse',\n // An incoming ICE candidate sent by a peer\n ICE_CANDIDATE: 'iceCandidate',\n // An error occured in the signaling server\n ERROR: 'errorOccured',\n // Received by a publisher (sent by signaling server when a peer joining a room)\n SEND_OFFER: 'sendOffer',\n // Recieved by a subscriber when publisher sent an SDP offer\n SDP_OFFER: 'sdpOfferRecv',\n // Recieved by all subscribers, when the publisher has reconnected\n PUBLISHER_RECONNECT: 'publisherReconnect',\n // Recieved by the publisher, when a subscriber has disconnected\n PEER_DISCONNECTED: 'peerDisconnected'\n }\n};\nexports.SOCKET_RECONNECTION_DELAY = 3000, exports.SOCKET_RECONNECTION_DELAY_MAX = 6000, exports.SOCKET_RECONNECTION_ATTEMPTS = 100, exports.SOCKET_PATH = '/socket2.io';\n\n//# sourceMappingURL=TurnConstants.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","TechseeMediaSubscriber","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","Compatibility_1","trace","getMediaTracer","privateEvents","subscriberParams","_isDisposed","_isPlaying","_hasVideo","_hasAudio","_mediaElement","info","videoResizeHandler","bind","_emitter","EventEmitter","_subscriberParams","prototype","get","streamType","enumerable","configurable","container","muted","mediaElement","videoWidth","videoHeight","offsetWidth","offsetHeight","muteSound","isMuted","throwIfDisposed","emitEvent","STREAM_STATE_CHANGE","onStateChanged","callback","on","onDispose","SUBSCRIBER_DISPOSE","renderStream","stream","_this","stopRenderInternal","then","renderMediaStreamToVideoEl","mediaStream","videoEl","getAudioTracks","length","getVideoTracks","setPlayingState","streamKind","error","warn","stopRendering","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","disposeResizeHandler_1","resizeHandler","onMediaElementResize","resolution","resolutionFormat","calculateResolution","document","body","contains","removeVideoElementFromDom","Promise","resolve","event","eventArgs","setTimeout","emit","Error"],"mappings":"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","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TechseeMediaSubscriber = void 0;\nvar events_1 = require(\"events\");\nvar MediaDomUtils_1 = require(\"./MediaUtils/MediaDomUtils\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nvar Compatibility_1 = require(\"./MediaUtils/Compatibility\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSubscriber');\nvar privateEvents;\n(function (privateEvents) {\n privateEvents[\"STREAM_STATE_CHANGE\"] = \"STREAM_STATE_CHANGE\";\n privateEvents[\"SUBSCRIBER_DISPOSE\"] = \"SUBSCRIBER_DISPOSE\";\n})(privateEvents || (privateEvents = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._isDisposed = false;\n this._isPlaying = false;\n this._hasVideo = false;\n this._hasAudio = false;\n this._mediaElement = null;\n trace.info('Subscriber created');\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n this._emitter = new events_1.EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"streamType\", {\n //#region IMediaSubscriber\n get: function () {\n return this._subscriberParams.streamType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isSoundMuted\", {\n get: function () {\n if (!this._mediaElement) {\n return true;\n }\n return this._mediaElement.muted;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: false,\n configurable: true\n });\n TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n };\n TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n };\n TechseeMediaSubscriber.prototype.onDispose = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n };\n //#endregion\n //#region Non Interface Methods\n TechseeMediaSubscriber.prototype.renderStream = function (stream) {\n var _this = this;\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(function () { return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream, stream.streamType); })\n .then(function (videoEl) {\n _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n _this.setPlayingState(videoEl, stream.streamKind);\n if (_this._hasAudio) {\n _this.muteSound(false);\n }\n })\n .catch(function (error) {\n trace.warn('Error while rendering stream on video element', error);\n });\n };\n TechseeMediaSubscriber.prototype.stopRendering = function () {\n var _this = this;\n return this.stopRenderInternal().then(function () { return _this.setPlayingState(); });\n };\n TechseeMediaSubscriber.prototype.dispose = function () {\n if (this._isDisposed) {\n return;\n }\n this.stopRendering().catch(function () { return undefined; });\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n };\n //#endregion\n TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {\n var _this = this;\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n var finalize = function () {\n _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(\"Video element \" + (streamKind || '') + \" \" + (_this.isPlaying ? 'play' : 'stop') + \" success\");\n };\n if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n var disposeResizeHandler_1 = null;\n var resizeHandler = function () {\n disposeResizeHandler_1 && disposeResizeHandler_1();\n Compatibility_1.onMediaElementResize(_this._mediaElement, _this.videoResizeHandler);\n finalize();\n };\n disposeResizeHandler_1 = Compatibility_1.onMediaElementResize(this._mediaElement, resizeHandler);\n }\n else {\n Compatibility_1.onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n }\n else {\n finalize();\n }\n };\n TechseeMediaSubscriber.prototype.videoResizeHandler = function () {\n trace.info(\"Video resize, new size = w: \" + this.videoWidth + \" h:\" + this.videoHeight);\n var resolution = { videoWidth: this.videoWidth, videoHeight: this.videoHeight };\n var resolutionFormat = MediaDomUtils_1.calculateResolution(resolution);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, { resolutionFormat: resolutionFormat });\n };\n TechseeMediaSubscriber.prototype.stopRenderInternal = function () {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement);\n }\n return Promise.resolve();\n };\n TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n TechseeMediaSubscriber.prototype.throwIfDisposed = function () {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n","import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {calculateResolution, removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\nimport {onMediaElementResize} from './MediaUtils/Compatibility';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed = false;\n private _isPlaying = false;\n private _hasVideo = false;\n private _hasAudio = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(() => renderMediaStreamToVideoEl(this.container, stream.mediaStream, stream.streamType))\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n\n if (this._hasAudio) {\n this.muteSound(false);\n }\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n return this.stopRenderInternal().then(() => this.setPlayingState());\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n let disposeResizeHandler: any = null;\n const resizeHandler = (): void => {\n disposeResizeHandler && disposeResizeHandler();\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n };\n\n disposeResizeHandler = onMediaElementResize(this._mediaElement, resizeHandler);\n } else {\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n const resolution = {videoWidth: this.videoWidth, videoHeight: this.videoHeight};\n const resolutionFormat = calculateResolution(resolution);\n\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, {resolutionFormat});\n }\n\n private stopRenderInternal() {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement);\n }\n\n return Promise.resolve();\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["MediaSubscriber.js","../src/MediaSubscriber.ts"],"names":["Object","defineProperty","exports","value","TechseeMediaSubscriber","events_1","require","MediaDomUtils_1","MediaConstants_1","MediaTracer_1","Compatibility_1","trace","getMediaTracer","privateEvents","subscriberParams","_isDisposed","_isPlaying","_hasVideo","_hasAudio","_mediaElement","info","videoResizeHandler","bind","_emitter","EventEmitter","_subscriberParams","prototype","get","streamType","enumerable","configurable","container","muted","mediaElement","videoWidth","videoHeight","offsetWidth","offsetHeight","muteSound","isMuted","throwIfDisposed","emitEvent","STREAM_STATE_CHANGE","onStateChanged","callback","on","onDispose","SUBSCRIBER_DISPOSE","renderStream","stream","_this","stopRenderInternal","then","renderMediaStreamToVideoEl","mediaStream","videoEl","getAudioTracks","length","getVideoTracks","setPlayingState","streamKind","error","warn","stopRendering","dispose","undefined","removeAllListeners","finalize","isPlaying","KnownMediaStreamKind","Video","disposeResizeHandler_1","resizeHandler","onMediaElementResize","resolution","resolutionFormat","calculateResolution","document","body","contains","removeVideoElementFromDom","Promise","resolve","event","eventArgs","setTimeout","emit","Error"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;EAAEC,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,sBAAR,GAAiC,KAAK,CAAtC;;ACFA,IAAAC,QAAA,GAAAC,OAAA,CAAA,QAAA,CAAA;;AAIA,IAAAC,eAAA,GAAAD,OAAA,CAAA,4BAAA,CAAA;;AACA,IAAAE,gBAAA,GAAAF,OAAA,CAAA,kBAAA,CAAA;;AAEA,IAAAG,aAAA,GAAAH,OAAA,CAAA,0BAAA,CAAA;;AACA,IAAAI,eAAA,GAAAJ,OAAA,CAAA,4BAAA,CAAA;;AAEA,IAAMK,KAAK,GAAGF,aAAA,CAAAG,cAAA,CAAe,iBAAf,CAAd;AAEA,IAAKC,aAAL;;AAAA,CAAA,UAAKA,aAAL,EAAkB;EACdA,aAAA,CAAA,qBAAA,CAAA,GAAA,qBAAA;EACAA,aAAA,CAAA,oBAAA,CAAA,GAAA,oBAAA;AACH,CAHD,EAAKA,aAAa,KAAbA,aAAa,GAAA,EAAA,CAAlB;;AAKA,IAAAT,sBAAA;AAAA;AAAA,YAAA;EASI,SAAAA,sBAAA,CAAYU,gBAAZ,EAAmD;IAP3C,KAAAC,WAAA,GAAc,KAAd;IACA,KAAAC,UAAA,GAAa,KAAb;IACA,KAAAC,SAAA,GAAY,KAAZ;IACA,KAAAC,SAAA,GAAY,KAAZ;IACA,KAAAC,aAAA,GAA4C,IAA5C;IAIJR,KAAK,CAACS,IAAN,CAAW,oBAAX;IAEA,KAAKC,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBC,IAAxB,CAA6B,IAA7B,CAA1B;IAEA,KAAKC,QAAL,GAAgB,IAAIlB,QAAA,CAAAmB,YAAJ,EAAhB;IACA,KAAKC,iBAAL,GAAyBX,gBAAzB;EACH;;EAIDd,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,YAAJ,EAAc;IAFd;IDPIC,GAAG,ECSP,eAAA;MACI,OAAO,KAAKF,iBAAL,CAAuBG,UAA9B;IACH,CAFa;IDNVC,UAAU,EAAE,KCMF;IDLVC,YAAY,EAAE;ECKJ,CAAd;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,WAAJ,EAAa;IDNTC,GAAG,ECMP,eAAA;MACI,OAAO,KAAKF,iBAAL,CAAuBM,SAA9B;IACH,CAFY;IDHTF,UAAU,EAAE,KCGH;IDFTC,YAAY,EAAE;ECEL,CAAb;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,WAAJ,EAAa;IDHTC,GAAG,ECGP,eAAA;MACI,OAAO,KAAKX,UAAZ;IACH,CAFY;IDATa,UAAU,EAAE,KCAH;IDCTC,YAAY,EAAE;ECDL,CAAb;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,cAAJ,EAAgB;IDAZC,GAAG,ECAP,eAAA;MACI,IAAI,CAAC,KAAKR,aAAV,EAAyB;QACrB,OAAO,IAAP;MACH;;MAED,OAAO,KAAKA,aAAL,CAAmBa,KAA1B;IACH,CANe;IDMZH,UAAU,EAAE,KCNA;IDOZC,YAAY,EAAE;ECPF,CAAhB;EAQA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,UAAJ,EAAY;IDERC,GAAG,ECFP,eAAA;MACI,OAAO,KAAKT,SAAZ;IACH,CAFW;IDKRW,UAAU,EAAE,KCLJ;IDMRC,YAAY,EAAE;ECNN,CAAZ;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,UAAJ,EAAY;IDKRC,GAAG,ECLP,eAAA;MACI,OAAO,KAAKV,SAAZ;IACH,CAFW;IDQRY,UAAU,EAAE,KCRJ;IDSRC,YAAY,EAAE;ECTN,CAAZ;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,cAAJ,EAAgB;IDQZC,GAAG,ECRP,eAAA;MACI,OAAO,KAAKR,aAAZ;IACH,CAFe;IDWZU,UAAU,EAAE,KCXA;IDYZC,YAAY,EAAE;ECZF,CAAhB;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,YAAJ,EAAc;IDWVC,GAAG,ECXP,eAAA;MACI,OAAO,KAAKM,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,UAAtC,GAAmD,CAA1D;IACH,CAFa;IDcVL,UAAU,EAAE,KCdF;IDeVC,YAAY,EAAE;ECfJ,CAAd;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,aAAJ,EAAe;IDcXC,GAAG,ECdP,eAAA;MACI,OAAO,KAAKM,YAAL,GAAoB,KAAKA,YAAL,CAAkBE,WAAtC,GAAoD,CAA3D;IACH,CAFc;IDiBXN,UAAU,EAAE,KCjBD;IDkBXC,YAAY,EAAE;EClBH,CAAf;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,aAAJ,EAAe;IDiBXC,GAAG,ECjBP,eAAA;MACI,OAAO,KAAKI,SAAL,CAAeK,WAAtB;IACH,CAFc;IDoBXP,UAAU,EAAE,KCpBD;IDqBXC,YAAY,EAAE;ECrBH,CAAf;EAIA9B,MAAA,CAAAC,cAAA,CAAIG,sBAAA,CAAAsB,SAAJ,EAAI,cAAJ,EAAgB;IDoBZC,GAAG,ECpBP,eAAA;MACI,OAAO,KAAKI,SAAL,CAAeM,YAAtB;IACH,CAFe;IDuBZR,UAAU,EAAE,KCvBA;IDwBZC,YAAY,EAAE;ECxBF,CAAhB;;EAIA1B,sBAAA,CAAAsB,SAAA,CAAAY,SAAA,GAAA,UAAUC,OAAV,EAA0B;IACtB,KAAKC,eAAL;IACA7B,KAAK,CAACS,IAAN,CAAW,oCAAX,EAAiDmB,OAAjD;;IACA,IAAI,KAAKpB,aAAL,IAAsB,KAAKA,aAAL,CAAmBa,KAAnB,KAA6BO,OAAvD,EAAgE;MAC5D,KAAKpB,aAAL,CAAmBa,KAAnB,GAA2BO,OAA3B;MACA,KAAKE,SAAL,CAAe5B,aAAa,CAAC6B,mBAA7B;IACH;EACJ,CAPD;;EASAtC,sBAAA,CAAAsB,SAAA,CAAAiB,cAAA,GAAA,UAAeC,QAAf,EAAmC;IAC/B,KAAKJ,eAAL;;IACA,KAAKjB,QAAL,CAAcsB,EAAd,CAAiBhC,aAAa,CAAC6B,mBAA/B,EAAoDE,QAApD;EACH,CAHD;;EAKAxC,sBAAA,CAAAsB,SAAA,CAAAoB,SAAA,GAAA,UAAUF,QAAV,EAA8B;IAC1B,KAAKJ,eAAL;;IACA,KAAKjB,QAAL,CAAcsB,EAAd,CAAiBhC,aAAa,CAACkC,kBAA/B,EAAmDH,QAAnD;EACH,CAHD,CAlFJ,CAuFI;EAEA;;;EAEAxC,sBAAA,CAAAsB,SAAA,CAAAsB,YAAA,GAAA,UAAaC,MAAb,EAAuC;IAAvC,IAAAC,KAAA,GAAA,IAAA;;IACI,KAAKV,eAAL;IACA,KAAKW,kBAAL,GACKC,IADL,CACU,YAAA;MAAM,OAAA7C,eAAA,CAAA8C,0BAAA,CAA2BH,KAAI,CAACnB,SAAhC,EAA2CkB,MAAM,CAACK,WAAlD,EAA+DL,MAAM,CAACrB,UAAtE,CAAA;IAAiF,CADjG,EAEKwB,IAFL,CAEU,UAACG,OAAD,EAAQ;MACVL,KAAI,CAAChC,SAAL,GAAiB+B,MAAM,CAACK,WAAP,CAAmBE,cAAnB,GAAoCC,MAApC,GAA6C,CAA9D;MACAP,KAAI,CAACjC,SAAL,GAAiBgC,MAAM,CAACK,WAAP,CAAmBI,cAAnB,GAAoCD,MAApC,GAA6C,CAA9D;;MAEAP,KAAI,CAACS,eAAL,CAAqBJ,OAArB,EAA8BN,MAAM,CAACW,UAArC;;MAEA,IAAIV,KAAI,CAAChC,SAAT,EAAoB;QAChBgC,KAAI,CAACZ,SAAL,CAAe,KAAf;MACH;IACJ,CAXL,WAYW,UAACuB,KAAD,EAAM;MACTlD,KAAK,CAACmD,IAAN,CAAW,+CAAX,EAA4DD,KAA5D;IACH,CAdL;EAeH,CAjBD;;EAmBAzD,sBAAA,CAAAsB,SAAA,CAAAqC,aAAA,GAAA,YAAA;IAAA,IAAAb,KAAA,GAAA,IAAA;;IACI,OAAO,KAAKC,kBAAL,GAA0BC,IAA1B,CAA+B,YAAA;MAAM,OAAAF,KAAI,CAACS,eAAL,EAAA;IAAsB,CAA3D,CAAP;EACH,CAFD;;EAIAvD,sBAAA,CAAAsB,SAAA,CAAAsC,OAAA,GAAA,YAAA;IACI,IAAI,KAAKjD,WAAT,EAAsB;MAClB;IACH;;IAED,KAAKgD,aAAL,YAA2B,YAAA;MAAM,OAAAE,SAAA;IAAS,CAA1C;IAEA,KAAKlD,WAAL,GAAmB,IAAnB;;IACA,KAAKQ,QAAL,CAAc2C,kBAAd;;IACAvD,KAAK,CAACS,IAAN,CAAW,qBAAX;IACA,KAAKqB,SAAL,CAAe5B,aAAa,CAACkC,kBAA7B;EACH,CAXD,CAlHJ,CA+HI;;;EAEQ3C,sBAAA,CAAAsB,SAAA,CAAAiC,eAAA,GAAR,UAAwB1B,YAAxB,EAAyD2B,UAAzD,EAA0F;IAA1F,IAAAV,KAAA,GAAA,IAAA;;IACI,KAAKlC,UAAL,GAAkB,CAAC,CAACiB,YAApB;IACA,KAAKd,aAAL,GAAqBc,YAAY,IAAI,IAArC;;IAEA,IAAMkC,QAAQ,GAAG,SAAXA,QAAW,GAAA;MACbjB,KAAI,CAACT,SAAL,CAAe5B,aAAa,CAAC6B,mBAA7B;;MACA/B,KAAK,CAACS,IAAN,CAAW,oBAAiBwC,UAAU,IAAI,EAA/B,IAAiC,GAAjC,IAAqCV,KAAI,CAACkB,SAAL,GAAiB,MAAjB,GAA0B,MAA/D,IAAqE,UAAhF;IACH,CAHD;;IAKA,IAAI,KAAKjD,aAAL,IAAsByC,UAAU,KAAKpD,gBAAA,CAAA6D,oBAAA,CAAqBC,KAA9D,EAAqE;MACjE,IAAI,KAAKnD,aAAL,CAAmBgB,WAAnB,KAAmC,CAAvC,EAA0C;QACtC,IAAIoC,sBAAoB,GAAQ,IAAhC;;QACA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAA;UAClBD,sBAAoB,IAAIA,sBAAoB,EAA5C;UACA7D,eAAA,CAAA+D,oBAAA,CAAqBvB,KAAI,CAAC/B,aAA1B,EAAyC+B,KAAI,CAAC7B,kBAA9C;UACA8C,QAAQ;QACX,CAJD;;QAMAI,sBAAoB,GAAG7D,eAAA,CAAA+D,oBAAA,CAAqB,KAAKtD,aAA1B,EAAyCqD,aAAzC,CAAvB;MACH,CATD,MASO;QACH9D,eAAA,CAAA+D,oBAAA,CAAqB,KAAKtD,aAA1B,EAAyC,KAAKE,kBAA9C;QACA8C,QAAQ;MACX;IACJ,CAdD,MAcO;MACHA,QAAQ;IACX;EACJ,CA1BO;;EA4BA/D,sBAAA,CAAAsB,SAAA,CAAAL,kBAAA,GAAR,YAAA;IACIV,KAAK,CAACS,IAAN,CAAW,iCAA+B,KAAKc,UAApC,GAA8C,KAA9C,GAAoD,KAAKC,WAApE;IACA,IAAMuC,UAAU,GAAG;MAACxC,UAAU,EAAE,KAAKA,UAAlB;MAA8BC,WAAW,EAAE,KAAKA;IAAhD,CAAnB;IACA,IAAMwC,gBAAgB,GAAGpE,eAAA,CAAAqE,mBAAA,CAAoBF,UAApB,CAAzB;IAEA,KAAKjC,SAAL,CAAe5B,aAAa,CAAC6B,mBAA7B,EAAkD;MAACiC,gBAAgB,EAAAA;IAAjB,CAAlD;EACH,CANO;;EAQAvE,sBAAA,CAAAsB,SAAA,CAAAyB,kBAAA,GAAR,YAAA;IACI,IAAI,KAAKhC,aAAL,IAAsB0D,QAAQ,CAACC,IAAT,CAAcC,QAAd,CAAuB,KAAK5D,aAA5B,CAA1B,EAAsE;MAClE,OAAOZ,eAAA,CAAAyE,yBAAA,CAA0B,KAAK7D,aAA/B,CAAP;IACH;;IAED,OAAO8D,OAAO,CAACC,OAAR,EAAP;EACH,CANO;;EAQA9E,sBAAA,CAAAsB,SAAA,CAAAe,SAAA,GAAR,UAAkB0C,KAAlB,EAAiCC,SAAjC,EAAgD;IAAhD,IAAAlC,KAAA,GAAA,IAAA;;IACImC,UAAU,CAAC,YAAA;MACPnC,KAAI,CAAC3B,QAAL,CAAc+D,IAAd,CAAmBH,KAAnB,EAA0BC,SAA1B;IACH,CAFS,CAAV;EAGH,CAJO;;EAMAhF,sBAAA,CAAAsB,SAAA,CAAAc,eAAA,GAAR,YAAA;IACI,IAAI,KAAKzB,WAAT,EAAsB;MAClB,MAAM,IAAIwE,KAAJ,CAAU,gCAAV,CAAN;IACH;EACJ,CAJO;;EAKZ,OAAAnF,sBAAA;AAxLA,CAAA,EAAA;;AAAaF,OAAA,CAAAE,sBAAA,GAAAA,sBAAA","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TechseeMediaSubscriber = void 0;\nvar events_1 = require(\"events\");\nvar MediaDomUtils_1 = require(\"./MediaUtils/MediaDomUtils\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nvar Compatibility_1 = require(\"./MediaUtils/Compatibility\");\nvar trace = MediaTracer_1.getMediaTracer('MediaSubscriber');\nvar privateEvents;\n(function (privateEvents) {\n privateEvents[\"STREAM_STATE_CHANGE\"] = \"STREAM_STATE_CHANGE\";\n privateEvents[\"SUBSCRIBER_DISPOSE\"] = \"SUBSCRIBER_DISPOSE\";\n})(privateEvents || (privateEvents = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._isDisposed = false;\n this._isPlaying = false;\n this._hasVideo = false;\n this._hasAudio = false;\n this._mediaElement = null;\n trace.info('Subscriber created');\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n this._emitter = new events_1.EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"streamType\", {\n //#region IMediaSubscriber\n get: function () {\n return this._subscriberParams.streamType;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"container\", {\n get: function () {\n return this._subscriberParams.container;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isPlaying\", {\n get: function () {\n return this._isPlaying;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"isSoundMuted\", {\n get: function () {\n if (!this._mediaElement) {\n return true;\n }\n return this._mediaElement.muted;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasAudio\", {\n get: function () {\n return this._hasAudio;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"hasVideo\", {\n get: function () {\n return this._hasVideo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"mediaElement\", {\n get: function () {\n return this._mediaElement;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoWidth\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"videoHeight\", {\n get: function () {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderWidth\", {\n get: function () {\n return this.container.offsetWidth;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TechseeMediaSubscriber.prototype, \"renderHeight\", {\n get: function () {\n return this.container.offsetHeight;\n },\n enumerable: false,\n configurable: true\n });\n TechseeMediaSubscriber.prototype.muteSound = function (isMuted) {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n };\n TechseeMediaSubscriber.prototype.onStateChanged = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n };\n TechseeMediaSubscriber.prototype.onDispose = function (callback) {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n };\n //#endregion\n //#region Non Interface Methods\n TechseeMediaSubscriber.prototype.renderStream = function (stream) {\n var _this = this;\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(function () { return MediaDomUtils_1.renderMediaStreamToVideoEl(_this.container, stream.mediaStream, stream.streamType); })\n .then(function (videoEl) {\n _this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n _this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n _this.setPlayingState(videoEl, stream.streamKind);\n if (_this._hasAudio) {\n _this.muteSound(false);\n }\n })\n .catch(function (error) {\n trace.warn('Error while rendering stream on video element', error);\n });\n };\n TechseeMediaSubscriber.prototype.stopRendering = function () {\n var _this = this;\n return this.stopRenderInternal().then(function () { return _this.setPlayingState(); });\n };\n TechseeMediaSubscriber.prototype.dispose = function () {\n if (this._isDisposed) {\n return;\n }\n this.stopRendering().catch(function () { return undefined; });\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n };\n //#endregion\n TechseeMediaSubscriber.prototype.setPlayingState = function (mediaElement, streamKind) {\n var _this = this;\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n var finalize = function () {\n _this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(\"Video element \" + (streamKind || '') + \" \" + (_this.isPlaying ? 'play' : 'stop') + \" success\");\n };\n if (this._mediaElement && streamKind === MediaConstants_1.KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n var disposeResizeHandler_1 = null;\n var resizeHandler = function () {\n disposeResizeHandler_1 && disposeResizeHandler_1();\n Compatibility_1.onMediaElementResize(_this._mediaElement, _this.videoResizeHandler);\n finalize();\n };\n disposeResizeHandler_1 = Compatibility_1.onMediaElementResize(this._mediaElement, resizeHandler);\n }\n else {\n Compatibility_1.onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n }\n else {\n finalize();\n }\n };\n TechseeMediaSubscriber.prototype.videoResizeHandler = function () {\n trace.info(\"Video resize, new size = w: \" + this.videoWidth + \" h:\" + this.videoHeight);\n var resolution = { videoWidth: this.videoWidth, videoHeight: this.videoHeight };\n var resolutionFormat = MediaDomUtils_1.calculateResolution(resolution);\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, { resolutionFormat: resolutionFormat });\n };\n TechseeMediaSubscriber.prototype.stopRenderInternal = function () {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return MediaDomUtils_1.removeVideoElementFromDom(this._mediaElement);\n }\n return Promise.resolve();\n };\n TechseeMediaSubscriber.prototype.emitEvent = function (event, eventArgs) {\n var _this = this;\n setTimeout(function () {\n _this._emitter.emit(event, eventArgs);\n });\n };\n TechseeMediaSubscriber.prototype.throwIfDisposed = function () {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n","import {EventEmitter} from 'events';\nimport {Nullable} from '@techsee/techsee-common';\nimport {IMediaSubscriber, MediaSubscriberParams} from './MediaContracts';\nimport {TechseeMediaStream} from './TechseeMediaStream';\nimport {calculateResolution, removeVideoElementFromDom, renderMediaStreamToVideoEl} from './MediaUtils/MediaDomUtils';\nimport {KnownMediaStream, KnownMediaStreamKind} from './MediaConstants';\n\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\nimport {onMediaElementResize} from './MediaUtils/Compatibility';\n\nconst trace = getMediaTracer('MediaSubscriber');\n\nenum privateEvents {\n STREAM_STATE_CHANGE = 'STREAM_STATE_CHANGE',\n SUBSCRIBER_DISPOSE = 'SUBSCRIBER_DISPOSE'\n}\n\nexport class TechseeMediaSubscriber implements IMediaSubscriber {\n private _emitter: EventEmitter;\n private _isDisposed = false;\n private _isPlaying = false;\n private _hasVideo = false;\n private _hasAudio = false;\n private _mediaElement: Nullable<HTMLVideoElement> = null;\n private readonly _subscriberParams: MediaSubscriberParams;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n trace.info('Subscriber created');\n\n this.videoResizeHandler = this.videoResizeHandler.bind(this);\n\n this._emitter = new EventEmitter();\n this._subscriberParams = subscriberParams;\n }\n\n //#region IMediaSubscriber\n\n get streamType(): KnownMediaStream {\n return this._subscriberParams.streamType;\n }\n\n get container(): HTMLDivElement {\n return this._subscriberParams.container;\n }\n\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n get isSoundMuted(): boolean {\n if (!this._mediaElement) {\n return true;\n }\n\n return this._mediaElement.muted;\n }\n\n get hasAudio(): boolean {\n return this._hasAudio;\n }\n\n get hasVideo(): boolean {\n return this._hasVideo;\n }\n\n get mediaElement(): Nullable<HTMLVideoElement> {\n return this._mediaElement;\n }\n\n get videoWidth(): number {\n return this.mediaElement ? this.mediaElement.videoWidth : 0;\n }\n\n get videoHeight(): number {\n return this.mediaElement ? this.mediaElement.videoHeight : 0;\n }\n\n get renderWidth(): number {\n return this.container.offsetWidth;\n }\n\n get renderHeight(): number {\n return this.container.offsetHeight;\n }\n\n muteSound(isMuted: boolean): void {\n this.throwIfDisposed();\n trace.info('Subscriber mute change - isMuted =', isMuted);\n if (this._mediaElement && this._mediaElement.muted !== isMuted) {\n this._mediaElement.muted = isMuted;\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n }\n }\n\n onStateChanged(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.STREAM_STATE_CHANGE, callback);\n }\n\n onDispose(callback: () => void): void {\n this.throwIfDisposed();\n this._emitter.on(privateEvents.SUBSCRIBER_DISPOSE, callback);\n }\n\n //#endregion\n\n //#region Non Interface Methods\n\n renderStream(stream: TechseeMediaStream): void {\n this.throwIfDisposed();\n this.stopRenderInternal()\n .then(() => renderMediaStreamToVideoEl(this.container, stream.mediaStream, stream.streamType))\n .then((videoEl) => {\n this._hasAudio = stream.mediaStream.getAudioTracks().length > 0;\n this._hasVideo = stream.mediaStream.getVideoTracks().length > 0;\n\n this.setPlayingState(videoEl, stream.streamKind);\n\n if (this._hasAudio) {\n this.muteSound(false);\n }\n })\n .catch((error) => {\n trace.warn('Error while rendering stream on video element', error);\n });\n }\n\n stopRendering(): Promise<void> {\n return this.stopRenderInternal().then(() => this.setPlayingState());\n }\n\n dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this.stopRendering().catch(() => undefined);\n\n this._isDisposed = true;\n this._emitter.removeAllListeners();\n trace.info('Subscriber disposed');\n this.emitEvent(privateEvents.SUBSCRIBER_DISPOSE);\n }\n\n //#endregion\n\n private setPlayingState(mediaElement?: HTMLVideoElement, streamKind?: KnownMediaStreamKind): void {\n this._isPlaying = !!mediaElement;\n this._mediaElement = mediaElement || null;\n\n const finalize = (): void => {\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE);\n trace.info(`Video element ${streamKind || ''} ${this.isPlaying ? 'play' : 'stop'} success`);\n };\n\n if (this._mediaElement && streamKind === KnownMediaStreamKind.Video) {\n if (this._mediaElement.videoHeight === 0) {\n let disposeResizeHandler: any = null;\n const resizeHandler = (): void => {\n disposeResizeHandler && disposeResizeHandler();\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n };\n\n disposeResizeHandler = onMediaElementResize(this._mediaElement, resizeHandler);\n } else {\n onMediaElementResize(this._mediaElement, this.videoResizeHandler);\n finalize();\n }\n } else {\n finalize();\n }\n }\n\n private videoResizeHandler(): void {\n trace.info(`Video resize, new size = w: ${this.videoWidth} h:${this.videoHeight}`);\n const resolution = {videoWidth: this.videoWidth, videoHeight: this.videoHeight};\n const resolutionFormat = calculateResolution(resolution);\n\n this.emitEvent(privateEvents.STREAM_STATE_CHANGE, {resolutionFormat});\n }\n\n private stopRenderInternal() {\n if (this._mediaElement && document.body.contains(this._mediaElement)) {\n return removeVideoElementFromDom(this._mediaElement);\n }\n\n return Promise.resolve();\n }\n\n private emitEvent(event: string, eventArgs?: any): void {\n setTimeout(() => {\n this._emitter.emit(event, eventArgs);\n });\n }\n\n private throwIfDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Subscriber is already disposed');\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","waitAfterClearingFilter","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","MediaConstants_1","require","isEqual_1","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","_isOTDefined","window","OT","isDefined","reduce","Array","delay","Error","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","mediaServiceType","isOpenTokService","MediaServiceType","OPENTOK","isMediaServer","MEDIASERVER","OTPlugin","isInstalled","WebRTCAdapter","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","removeEventListener","isChrome","majorVersion","warn","_a"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\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 __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.waitAfterClearingFilter = exports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = exports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT = exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\n// switching camera while blur effect may cause video freeze for some devices (beta version)\n// this tiemout prevents event loop to stuck\nexports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT = 0;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise\n .reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (typeof window.OT !== 'undefined' && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(mediaServiceType) {\n var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;\n var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && environmentDetect.majorVersion() < 49)) {\n require('webrtc-adapter/dist/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\nfunction waitAfterClearingFilter() {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.delay(exports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT)];\n });\n });\n}\nexports.waitAfterClearingFilter = waitAfterClearingFilter;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","waitAfterClearingFilter","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","MediaConstants_1","require","isEqual_1","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","_isOTDefined","window","OT","isDefined","reduce","Array","delay","Error","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","mediaServiceType","isOpenTokService","MediaServiceType","OPENTOK","isMediaServer","MEDIASERVER","OTPlugin","isInstalled","WebRTCAdapter","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","removeEventListener","isChrome","majorVersion","warn","_a"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\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 __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.waitAfterClearingFilter = exports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = exports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT = exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\n// switching camera while blur effect may cause video freeze for some devices (beta version)\n// this tiemout prevents event loop to stuck\nexports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT = 0;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise\n .reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (typeof window.OT !== 'undefined' && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(mediaServiceType) {\n var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;\n var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && environmentDetect.majorVersion() < 49)) {\n require('webrtc-adapter/dist/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\nfunction waitAfterClearingFilter() {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.delay(exports.WAIT_FOR_OPENTOK_SWITCH_CAMERA_WITH_BLUR_EFFECT)];\n });\n });\n}\nexports.waitAfterClearingFilter = waitAfterClearingFilter;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}