@techsee/techsee-media-service 17.0.0 → 17.2.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 (41) 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.d.ts +1 -0
  21. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -1
  22. package/lib/MultiParty/MultiPartyService.js.map +1 -1
  23. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -1
  24. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -1
  25. package/lib/MultiParty/index.js.map +1 -1
  26. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +1 -0
  27. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -1
  28. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +7 -0
  29. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -1
  30. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -1
  31. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -1
  32. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +1 -1
  33. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -1
  34. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +1 -1
  35. package/lib/MultiParty/opentok/trace.js.map +1 -1
  36. package/lib/MultiParty/types.js.map +1 -1
  37. package/lib/MultiParty/utils.js.map +1 -1
  38. package/lib/TechseeMediaStream.js.map +1 -1
  39. package/lib/qos/raw-qos.js.map +1 -1
  40. package/lib/webrtc-ie-shim.js.map +1 -1
  41. package/package.json +3 -3
@@ -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":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","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","e","Promise","resolve","isDefined","reduce","Array","delay","then","reject","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"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = 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;\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;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","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","e","Promise","resolve","isDefined","reduce","Array","delay","then","reject","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"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = 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;\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;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/MediaDomUtils.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","getSnapshotFromMediaStream","removeVideoElementFromDom","renderMediaStreamToVideoEl","calculateResolution","isUndefined_1","require","ts_environment_detect_1","retry_with_timeout_1","MediaTracer_1","MediaConstants_1","trace","getMediaTracer","isIE11","TsEnvironmentDetect","_a","videoWidth","videoHeight","multiplyResolution","videoResolutionFormat","VideoResolutionFormat","NONE","VideoResolutionMultiplication","HD","SD","container","mediaStream","streamType","Promise","resolve","reject","document","body","contains","Error","doResolve","videoEl","info","createElement","muted","playsInline","window","WebRTCAdapter","appendChild","bindVideoElement","srcObject","addEventListener","KnownMediaStream","USER_AUDIO_STREAM","AGENT_AUDIO_STREAM","OBSERVER_AUDIO_STREAM","indexOf","play","setAttribute","playRes","then","error","handleComplete","parentElement","tagName","waitForObjectSettings","intervalInMs","timeoutInMs","repeatWithTimeout","isVideoPlaying","waitForVideoSettings","unBindVideoElement","parentNode","removeChild","warn","remove","defaultSnapshot","format","quality","sourceStream","snapshotOptions","x","y","w","h","crop","resize","tempContainer","style","cssText","doneFn","err","image","setTimeout","videoElement","getImgDataIE11","getImgData","imgData","length","canvas","ctx","getContext","width","height","drawImage","toDataURL","_drawAndRemove","base64","getFrame","Image","onload"],"mappings":"AAAA;;AACA,IAAIA,eAAe,GAAI,UAAQ,SAAKA,eAAd,IAAkC,UAAUC,GAAV,EAAe;AACnE,SAAQA,GAAG,IAAIA,GAAG,CAACC,UAAZ,GAA0BD,GAA1B,GAAgC;AAAE,eAAWA;AAAb,GAAvC;AACH,CAFD;;AAGAE,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,0BAAR,GAAqCF,OAAO,CAACG,yBAAR,GAAoCH,OAAO,CAACI,0BAAR,GAAqCJ,OAAO,CAACK,mBAAR,GAA8B,KAAK,CAAjJ;;AACA,IAAIC,aAAa,GAAGX,eAAe,CAACY,OAAO,CAAC,oBAAD,CAAR,CAAnC,C,CACA;AACA;;;AACA,IAAIC,uBAAuB,GAAGD,OAAO,CAAC,2DAAD,CAArC;;AACA,IAAIE,oBAAoB,GAAGF,OAAO,CAAC,qDAAD,CAAlC;;AACA,IAAIG,aAAa,GAAGH,OAAO,CAAC,eAAD,CAA3B;;AACA,IAAII,gBAAgB,GAAGJ,OAAO,CAAC,mBAAD,CAA9B;;AACA,IAAIK,KAAK,GAAGF,aAAa,CAACG,cAAd,CAA6B,UAA7B,CAAZ;AACA,IAAIC,MAAM,GAAG,IAAIN,uBAAuB,CAACO,mBAA5B,GAAkDD,MAAlD,EAAb;;AACA,SAAST,mBAAT,CAA6BW,EAA7B,EAAiC;AAC7B,MAAIC,UAAU,GAAGD,EAAE,CAACC,UAApB;AAAA,MAAgCC,WAAW,GAAGF,EAAE,CAACE,WAAjD;AACA,MAAIC,kBAAkB,GAAGF,UAAU,GAAGC,WAAtC;AACA,MAAIE,qBAAqB,GAAGT,gBAAgB,CAACU,qBAAjB,CAAuCC,IAAnE;;AACA,MAAIH,kBAAkB,IAAIR,gBAAgB,CAACY,6BAAjB,CAA+CC,EAAzE,EAA6E;AACzEJ,IAAAA,qBAAqB,GAAGT,gBAAgB,CAACU,qBAAjB,CAAuCG,EAA/D;AACH;;AACD,MAAIL,kBAAkB,IAAIR,gBAAgB,CAACY,6BAAjB,CAA+CE,EAArE,IACAN,kBAAkB,GAAGR,gBAAgB,CAACY,6BAAjB,CAA+CC,EADxE,EAC4E;AACxEJ,IAAAA,qBAAqB,GAAGT,gBAAgB,CAACU,qBAAjB,CAAuCI,EAA/D;AACH;;AACD,SAAOL,qBAAP;AACH;;AACDpB,OAAO,CAACK,mBAAR,GAA8BA,mBAA9B;;AACA,SAASD,0BAAT,CAAoCsB,SAApC,EAA+CC,WAA/C,EAA4DC,UAA5D,EAAwE;AACpE,SAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAC1C,QAAI,CAACC,QAAQ,CAACC,IAAT,CAAcC,QAAd,CAAuBR,SAAvB,CAAL,EAAwC;AACpCK,MAAAA,MAAM,CAAC,IAAII,KAAJ,CAAU,wDAAV,CAAD,CAAN;AACA;AACH;;AACD,QAAIC,SAAS,GAAG,SAAZA,SAAY,CAAUC,OAAV,EAAmB;AAC/BzB,MAAAA,KAAK,CAAC0B,IAAN,CAAW,oCAAX,EAAiD;AAAED,QAAAA,OAAO,EAAEA;AAAX,OAAjD;AACAP,MAAAA,OAAO,CAACO,OAAD,CAAP;AACH,KAHD;;AAIA,QAAIA,OAAO,GAAGL,QAAQ,CAACO,aAAT,CAAuB,OAAvB,CAAd;AACAF,IAAAA,OAAO,CAACG,KAAR,GAAgB,IAAhB;AACAH,IAAAA,OAAO,CAACI,WAAR,GAAsB,IAAtB;;AACA,QAAI3B,MAAM,IAAI4B,MAAM,CAACC,aAArB,EAAoC;AAChCjB,MAAAA,SAAS,CAACkB,WAAV,CAAsBP,OAAtB;AACAK,MAAAA,MAAM,CAACC,aAAP,CAAqBE,gBAArB,CAAsCR,OAAtC;AACH;;AACDA,IAAAA,OAAO,CAACS,SAAR,GAAoBnB,WAApB,CAhB0C,CAiB1C;;AACAU,IAAAA,OAAO,CAACU,gBAAR,CAAyB,OAAzB,EAAkC,YAAY;AAC1C,UAAI,CACApC,gBAAgB,CAACqC,gBAAjB,CAAkCC,iBADlC,EAEAtC,gBAAgB,CAACqC,gBAAjB,CAAkCE,kBAFlC,EAGAvC,gBAAgB,CAACqC,gBAAjB,CAAkCG,qBAHlC,EAIFC,OAJE,CAIMxB,UAJN,IAIoB,CAAC,CAJzB,EAI4B;AACxBhB,QAAAA,KAAK,CAAC0B,IAAN,CAAW,uDAAX;AACAD,QAAAA,OAAO,CAACgB,IAAR;AACH;AACJ,KATD;;AAUA,QAAI,CAACvC,MAAL,EAAa;AACT;AACAuB,MAAAA,OAAO,CAACiB,YAAR,CAAqB,OAArB,EAA8B,EAA9B;AACH;;AACD,QAAI;AACA,UAAIC,OAAO,GAAGlB,OAAO,CAACgB,IAAR,EAAd;;AACA,UAAIE,OAAO,IAAIA,OAAO,CAACC,IAAvB,EAA6B;AACzBD,QAAAA,OAAO,CAACC,IAAR,CAAa,YAAY;AACrB5C,UAAAA,KAAK,CAAC0B,IAAN,CAAW,4BAAX;;AACA,cAAI,CAACxB,MAAL,EAAa;AACTsB,YAAAA,SAAS,CAACC,OAAD,CAAT;AACH;AACJ,SALD;AAMH,OAPD,MAQK,IAAI,CAACvB,MAAL,EAAa;AACdsB,QAAAA,SAAS,CAACC,OAAD,CAAT;AACH;;AACD,UAAIkB,OAAO,IAAIA,OAAO,SAAtB,EAA8B;AAC1BA,QAAAA,OAAO,SAAP,CAAc,UAAUE,KAAV,EAAiB;AAC3B7C,UAAAA,KAAK,CAAC6C,KAAN,CAAY,qDAAZ,EAAmEA,KAAnE;AACA1B,UAAAA,MAAM,CAAC0B,KAAD,CAAN;AACH,SAHD;AAIH;AACJ,KAnBD,CAoBA,OAAOA,KAAP,EAAc;AACV1B,MAAAA,MAAM,CAAC0B,KAAD,CAAN;AACA7C,MAAAA,KAAK,CAAC6C,KAAN,CAAY,oDAAZ,EAAkEA,KAAlE;AACA;AACH;;AACD,QAAI3C,MAAJ,EAAY;AACR,UAAI4C,cAAc,GAAG,SAAjBA,cAAiB,GAAY;AAAE,eAAOrB,OAAO,CAACsB,aAAR,CAAsBC,OAAtB,KAAkC,QAAzC;AAAoD,OAAvF;;AACA,UAAIC,qBAAqB,GAAG;AAAEC,QAAAA,YAAY,EAAE,EAAhB;AAAoBC,QAAAA,WAAW,EAAE;AAAjC,OAA5B;AACAtD,MAAAA,oBAAoB,CAACuD,iBAArB,CAAuCN,cAAvC,EAAuDG,qBAAvD,EAA8EL,IAA9E,CAAmF,YAAY;AAC3F;AACA,YAAIS,cAAc,GAAG,SAAjBA,cAAiB,GAAY;AAAE,iBAAO5B,OAAO,CAACnB,WAAR,IAAuB,CAAvB,IAA4BmB,OAAO,CAACpB,UAAR,IAAsB,CAAzD;AAA6D,SAAhG;;AACA,YAAIiD,oBAAoB,GAAG;AAAEJ,UAAAA,YAAY,EAAE,EAAhB;AAAoBC,UAAAA,WAAW,EAAE;AAAjC,SAA3B;AACAtD,QAAAA,oBAAoB,CAACuD,iBAArB,CAAuCC,cAAvC,EAAuDC,oBAAvD,EACKV,IADL,CACU,YAAY;AAAE,iBAAOpB,SAAS,CAACC,OAAO,CAACsB,aAAT,CAAhB;AAA0C,SADlE,WAEW,YAAY;AAAE,iBAAO5B,MAAM,CAAC,IAAII,KAAJ,CAAU,yCAAV,CAAD,CAAb;AAAsE,SAF/F;AAGH,OAPD;AAQH,KAXD,MAYK;AACDT,MAAAA,SAAS,CAACkB,WAAV,CAAsBP,OAAtB,EADC,CAED;AACH;AACJ,GAzEM,CAAP;AA0EH;;AACDrC,OAAO,CAACI,0BAAR,GAAqCA,0BAArC;;AACA,SAASD,yBAAT,CAAmCkC,OAAnC,EAA4C;AACxC,SAAO,IAAIR,OAAJ,CAAY,UAAUC,OAAV,EAAmB;AAClC,QAAIhB,MAAM,IAAI4B,MAAM,CAACC,aAArB,EAAoC;AAChCD,MAAAA,MAAM,CAACC,aAAP,CAAqBwB,kBAArB,CAAwC9B,OAAxC;;AACA,UAAIA,OAAO,IAAIA,OAAO,CAAC+B,UAAnB,IAAiC/B,OAAO,CAAC+B,UAAR,CAAmBC,WAAxD,EAAqE;AACjEhC,QAAAA,OAAO,CAAC+B,UAAR,CAAmBC,WAAnB,CAA+BhC,OAA/B;AACAzB,QAAAA,KAAK,CAAC0B,IAAN,CAAW,oCAAX;AACH,OAHD,MAIK;AACD1B,QAAAA,KAAK,CAAC0D,IAAN,CAAW,2BAAX,EAAwCjC,OAAxC,EAAiDA,OAAO,CAAC+B,UAAzD;AACH;AACJ,KATD,MAUK;AACD/B,MAAAA,OAAO,CAACkC,MAAR;AACH;;AACDzC,IAAAA,OAAO;AACV,GAfM,CAAP;AAgBH;;AACD9B,OAAO,CAACG,yBAAR,GAAoCA,yBAApC;AACA,IAAIqE,eAAe,GAAG;AAClBC,EAAAA,MAAM,EAAE,WADU;AAElBC,EAAAA,OAAO,EAAE;AAFS,CAAtB;;AAIA,SAASxE,0BAAT,CAAoCyB,WAApC,EAAiDgD,YAAjD,EAA+DC,eAA/D,EAAgF;AAC5E,MAAIA,eAAe,KAAK,KAAK,CAA7B,EAAgC;AAAEA,IAAAA,eAAe,GAAGJ,eAAlB;AAAoC;;AACtE,MAAIC,MAAM,GAAGG,eAAe,CAACH,MAA7B;AAAA,MAAqCC,OAAO,GAAGE,eAAe,CAACF,OAA/D;AAAA,MAAwEG,CAAC,GAAGD,eAAe,CAACC,CAA5F;AAAA,MAA+FC,CAAC,GAAGF,eAAe,CAACE,CAAnH;AAAA,MAAsHC,CAAC,GAAGH,eAAe,CAACG,CAA1I;AAAA,MAA6IC,CAAC,GAAGJ,eAAe,CAACI,CAAjK;AACA,MAAIC,IAAI,GAAG,CAAC3E,aAAa,WAAb,CAAsBuE,CAAtB,CAAD,IAA6B,CAACvE,aAAa,WAAb,CAAsBwE,CAAtB,CAA9B,IAA0D,CAACxE,aAAa,WAAb,CAAsByE,CAAtB,CAA3D,IAAuF,CAACzE,aAAa,WAAb,CAAsB0E,CAAtB,CAAnG;AACA,MAAIE,MAAM,GAAG,CAACD,IAAD,KAAU,CAAC3E,aAAa,WAAb,CAAsByE,CAAtB,CAAD,IAA6B,CAACzE,aAAa,WAAb,CAAsB0E,CAAtB,CAAxC,CAAb;AACA,SAAO,IAAInD,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAC1C,QAAIoD,aAAa,GAAGnD,QAAQ,CAACO,aAAT,CAAuB,KAAvB,CAApB;AACA4C,IAAAA,aAAa,CAACC,KAAd,CAAoBC,OAApB,GAA8B,mCAA9B;AACArD,IAAAA,QAAQ,CAACC,IAAT,CAAcW,WAAd,CAA0BuC,aAA1B;;AACA,QAAIG,MAAM,GAAG,SAATA,MAAS,CAAUC,GAAV,EAAeC,KAAf,EAAsB;AAC/B,UAAID,GAAJ,EAAS;AACLxD,QAAAA,MAAM,CAACwD,GAAD,CAAN;AACA;AACH;;AACDE,MAAAA,UAAU,CAAC,YAAY;AACnBzD,QAAAA,QAAQ,CAACC,IAAT,CAAcoC,WAAd,CAA0Bc,aAA1B;;AACA,YAAI,CAACI,GAAL,EAAU;AACNzD,UAAAA,OAAO,CAAC0D,KAAD,CAAP;AACH;AACJ,OALS,EAKP,EALO,CAAV;AAMH,KAXD;;AAYApF,IAAAA,0BAA0B,CAAC+E,aAAD,EAAgBxD,WAAhB,EAA6BgD,YAA7B,CAA1B,CACKnB,IADL,CACU,UAAUkC,YAAV,EAAwB;AAC9B,aAAO7D,OAAO,CAACC,OAAR,CAAgBhB,MAAM,GAAG6E,cAAc,CAACD,YAAD,CAAjB,GAAkCE,UAAU,CAACF,YAAD,CAAlE,EAAkFlC,IAAlF,CAAuF,UAAUqC,OAAV,EAAmB;AAC7G,YAAI,CAACA,OAAD,IAAYA,OAAO,CAACC,MAAR,GAAiB,EAAjC,EAAqC;AACjC,gBAAM,IAAI3D,KAAJ,CAAU,wDAAV,CAAN;AACH;;AACDmD,QAAAA,MAAM,CAAC,IAAD,EAAOO,OAAP,CAAN;AACH,OALM,CAAP;AAMH,KARD,WASW,UAAUpC,KAAV,EAAiB;AACxB;AACA6B,MAAAA,MAAM,CAAC7B,KAAK,IAAI,IAAItB,KAAJ,CAAU,oEAAV,CAAV,CAAN;AACH,KAZD;AAaH,GA7BM,CAAP,CAL4E,CAmC5E;;AACA,WAASyD,UAAT,CAAoBF,YAApB,EAAkC;AAC9B,QAAIzE,UAAU,GAAGyE,YAAY,CAACzE,UAA9B;AAAA,QAA0CC,WAAW,GAAGwE,YAAY,CAACxE,WAArE;AACA,QAAI6E,MAAM,GAAG/D,QAAQ,CAACO,aAAT,CAAuB,QAAvB,CAAb;AACA,QAAIyD,GAAG,GAAGD,MAAM,CAACE,UAAP,CAAkB,IAAlB,CAAV;;AACA,QAAIhB,IAAJ,EAAU;AACNc,MAAAA,MAAM,CAACG,KAAP,GAAenB,CAAf;AACAgB,MAAAA,MAAM,CAACI,MAAP,GAAgBnB,CAAhB;AACAgB,MAAAA,GAAG,CAACI,SAAJ,CAAcV,YAAd,EAA4Bb,CAA5B,EAA+BC,CAA/B,EAAkCC,CAAlC,EAAqCC,CAArC,EAAwC,CAAxC,EAA2C,CAA3C,EAA8CD,CAA9C,EAAiDC,CAAjD;AACH,KAJD,MAKK,IAAIE,MAAJ,EAAY;AACba,MAAAA,MAAM,CAACG,KAAP,GAAenB,CAAf;AACAgB,MAAAA,MAAM,CAACI,MAAP,GAAgBnB,CAAhB;AACAgB,MAAAA,GAAG,CAACI,SAAJ,CAAcV,YAAd,EAA4B,CAA5B,EAA+B,CAA/B,EAAkCX,CAAlC,EAAqCC,CAArC;AACH,KAJI,MAKA;AACDe,MAAAA,MAAM,CAACI,MAAP,GAAgBjF,WAAhB;AACA6E,MAAAA,MAAM,CAACG,KAAP,GAAejF,UAAf;AACA+E,MAAAA,GAAG,CAACI,SAAJ,CAAcV,YAAd,EAA4B,CAA5B,EAA+B,CAA/B;AACH;;AACD,WAAOK,MAAM,CAACM,SAAP,CAAiB5B,MAAjB,EAAyBC,OAAzB,CAAP;AACH,GAxD2E,CAyD5E;;;AACA,WAASiB,cAAT,CAAwBD,YAAxB,EAAsC;AAClC,WAAO,IAAI7D,OAAJ,CAAY,UAAUC,OAAV,EAAmB;AAClC,UAAIb,UAAU,GAAGyE,YAAY,CAACzE,UAA9B;AAAA,UAA0CC,WAAW,GAAGwE,YAAY,CAACxE,WAArE;AACA,UAAI6E,MAAM,GAAG/D,QAAQ,CAACO,aAAT,CAAuB,QAAvB,CAAb;AACA,UAAIyD,GAAG,GAAGD,MAAM,CAACE,UAAP,CAAkB,IAAlB,CAAV;;AACA,UAAIhB,IAAI,IAAIC,MAAZ,EAAoB;AAChBa,QAAAA,MAAM,CAACG,KAAP,GAAenB,CAAf;AACAgB,QAAAA,MAAM,CAACI,MAAP,GAAgBnB,CAAhB;AACH,OAHD,MAIK;AACDe,QAAAA,MAAM,CAACI,MAAP,GAAgBjF,WAAhB;AACA6E,QAAAA,MAAM,CAACG,KAAP,GAAejF,UAAf;AACH;;AACD,eAASqF,cAAT,CAAwBd,KAAxB,EAA+B;AAC3B,YAAIP,IAAJ,EAAU;AACNe,UAAAA,GAAG,CAACI,SAAJ,CAAcZ,KAAd,EAAqBX,CAArB,EAAwBC,CAAxB,EAA2BC,CAA3B,EAA8BC,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuCD,CAAvC,EAA0CC,CAA1C;AACH,SAFD,MAGK,IAAIE,MAAJ,EAAY;AACbc,UAAAA,GAAG,CAACI,SAAJ,CAAcZ,KAAd,EAAqB,CAArB,EAAwB,CAAxB,EAA2BT,CAA3B,EAA8BC,CAA9B;AACH,SAFI,MAGA;AACDgB,UAAAA,GAAG,CAACI,SAAJ,CAAcZ,KAAd,EAAqB,CAArB,EAAwB,CAAxB,EAA2BvE,UAA3B,EAAuCC,WAAvC;AACH;;AACD,eAAO6E,MAAM,CAACM,SAAP,CAAiB5B,MAAjB,EAAyBC,OAAzB,CAAP;AACH;;AACD,UAAI6B,MAAM,GAAGb,YAAY,CAACc,QAAb,EAAb;AACA,UAAIhB,KAAK,GAAG,IAAIiB,KAAJ,EAAZ;;AACAjB,MAAAA,KAAK,CAACkB,MAAN,GAAe,YAAY;AAAE,eAAO5E,OAAO,CAACwE,cAAc,CAACd,KAAD,CAAf,CAAd;AAAwC,OAArE;;AACAA,MAAAA,KAAK,CAAClC,YAAN,CAAmB,KAAnB,EAA0B,2BAA2BiD,MAArD;AACH,KA5BM,CAAP;AA6BH;AACJ;;AACDvG,OAAO,CAACE,0BAAR,GAAqCA,0BAArC","file":"MediaDomUtils.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSnapshotFromMediaStream = exports.removeVideoElementFromDom = exports.renderMediaStreamToVideoEl = exports.calculateResolution = void 0;\nvar isUndefined_1 = __importDefault(require(\"lodash/isUndefined\"));\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 retry_with_timeout_1 = require(\"@techsee/techsee-common/lib/core/retry-with-timeout\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar trace = MediaTracer_1.getMediaTracer('DomUtils');\nvar isIE11 = new ts_environment_detect_1.TsEnvironmentDetect().isIE11();\nfunction calculateResolution(_a) {\n var videoWidth = _a.videoWidth, videoHeight = _a.videoHeight;\n var multiplyResolution = videoWidth * videoHeight;\n var videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.NONE;\n if (multiplyResolution >= MediaConstants_1.VideoResolutionMultiplication.HD) {\n videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.HD;\n }\n if (multiplyResolution >= MediaConstants_1.VideoResolutionMultiplication.SD &&\n multiplyResolution < MediaConstants_1.VideoResolutionMultiplication.HD) {\n videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.SD;\n }\n return videoResolutionFormat;\n}\nexports.calculateResolution = calculateResolution;\nfunction renderMediaStreamToVideoEl(container, mediaStream, streamType) {\n return new Promise(function (resolve, reject) {\n if (!document.body.contains(container)) {\n reject(new Error('Cannot render to container that is not attached to dom'));\n return;\n }\n var doResolve = function (videoEl) {\n trace.info('Video element created successfully', { videoEl: videoEl });\n resolve(videoEl);\n };\n var videoEl = document.createElement('video');\n videoEl.muted = true;\n videoEl.playsInline = true;\n if (isIE11 && window.WebRTCAdapter) {\n container.appendChild(videoEl);\n window.WebRTCAdapter.bindVideoElement(videoEl);\n }\n videoEl.srcObject = mediaStream;\n // When unplugged the headphones in ios the video element got paused.\n videoEl.addEventListener('pause', function () {\n if ([\n MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM,\n MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM,\n MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM\n ].indexOf(streamType) > -1) {\n trace.info('Video element got paused. IOS headphones disconnected');\n videoEl.play();\n }\n });\n if (!isIE11) {\n // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play\n videoEl.setAttribute('muted', '');\n }\n try {\n var playRes = videoEl.play();\n if (playRes && playRes.then) {\n playRes.then(function () {\n trace.info('Video element play success');\n if (!isIE11) {\n doResolve(videoEl);\n }\n });\n }\n else if (!isIE11) {\n doResolve(videoEl);\n }\n if (playRes && playRes.catch) {\n playRes.catch(function (error) {\n trace.error('Reject while executing play method on video element', error);\n reject(error);\n });\n }\n }\n catch (error) {\n reject(error);\n trace.error('Error while executing play method on video element', error);\n return;\n }\n if (isIE11) {\n var handleComplete = function () { return videoEl.parentElement.tagName !== 'OBJECT'; };\n var waitForObjectSettings = { intervalInMs: 30, timeoutInMs: 200 };\n retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings).then(function () {\n //We will wait, until video is played, then we resolve\n var isVideoPlaying = function () { return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0; };\n var waitForVideoSettings = { intervalInMs: 50, timeoutInMs: 10000 };\n retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings)\n .then(function () { return doResolve(videoEl.parentElement); })\n .catch(function () { return reject(new Error('Timeout while waiting for video to play')); });\n });\n }\n else {\n container.appendChild(videoEl);\n //doResolve(videoEl);\n }\n });\n}\nexports.renderMediaStreamToVideoEl = renderMediaStreamToVideoEl;\nfunction removeVideoElementFromDom(videoEl) {\n return new Promise(function (resolve) {\n if (isIE11 && window.WebRTCAdapter) {\n window.WebRTCAdapter.unBindVideoElement(videoEl);\n if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {\n videoEl.parentNode.removeChild(videoEl);\n trace.info('Video element removed successfully');\n }\n else {\n trace.warn('Video element not removed', videoEl, videoEl.parentNode);\n }\n }\n else {\n videoEl.remove();\n }\n resolve();\n });\n}\nexports.removeVideoElementFromDom = removeVideoElementFromDom;\nvar defaultSnapshot = {\n format: 'image/png',\n quality: 0.92\n};\nfunction getSnapshotFromMediaStream(mediaStream, sourceStream, snapshotOptions) {\n if (snapshotOptions === void 0) { snapshotOptions = defaultSnapshot; }\n var format = snapshotOptions.format, quality = snapshotOptions.quality, x = snapshotOptions.x, y = snapshotOptions.y, w = snapshotOptions.w, h = snapshotOptions.h;\n var crop = !isUndefined_1.default(x) && !isUndefined_1.default(y) && !isUndefined_1.default(w) && !isUndefined_1.default(h);\n var resize = !crop && (!isUndefined_1.default(w) || !isUndefined_1.default(h));\n return new Promise(function (resolve, reject) {\n var tempContainer = document.createElement('div');\n tempContainer.style.cssText = 'position:absolute;left: -10000px;';\n document.body.appendChild(tempContainer);\n var doneFn = function (err, image) {\n if (err) {\n reject(err);\n return;\n }\n setTimeout(function () {\n document.body.removeChild(tempContainer);\n if (!err) {\n resolve(image);\n }\n }, 50);\n };\n renderMediaStreamToVideoEl(tempContainer, mediaStream, sourceStream)\n .then(function (videoElement) {\n return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement)).then(function (imgData) {\n if (!imgData || imgData.length < 10) {\n throw new Error('Failed to create a snapshot - imgData is null or empty');\n }\n doneFn(null, imgData);\n });\n })\n .catch(function (error) {\n // eslint-disable-next-line prettier/prettier\n doneFn(error || new Error('Failed to create a snapshot - can\\'t render MediaStream To VideoEl'));\n });\n });\n //Gets image in all browsers except of IE\n function getImgData(videoElement) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, 0, 0, w, h);\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n ctx.drawImage(videoElement, 0, 0);\n }\n return canvas.toDataURL(format, quality);\n }\n //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.\n function getImgDataIE11(videoElement) {\n return new Promise(function (resolve) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop || resize) {\n canvas.width = w;\n canvas.height = h;\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n }\n function _drawAndRemove(image) {\n if (crop) {\n ctx.drawImage(image, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n ctx.drawImage(image, 0, 0, w, h);\n }\n else {\n ctx.drawImage(image, 0, 0, videoWidth, videoHeight);\n }\n return canvas.toDataURL(format, quality);\n }\n var base64 = videoElement.getFrame();\n var image = new Image();\n image.onload = function () { return resolve(_drawAndRemove(image)); };\n image.setAttribute('src', 'data:image/bmp;base64,' + base64);\n });\n }\n}\nexports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;\n\n//# sourceMappingURL=MediaDomUtils.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/MediaDomUtils.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","getSnapshotFromMediaStream","removeVideoElementFromDom","renderMediaStreamToVideoEl","calculateResolution","isUndefined_1","require","ts_environment_detect_1","retry_with_timeout_1","MediaTracer_1","MediaConstants_1","trace","getMediaTracer","isIE11","TsEnvironmentDetect","_a","videoWidth","videoHeight","multiplyResolution","videoResolutionFormat","VideoResolutionFormat","NONE","VideoResolutionMultiplication","HD","SD","container","mediaStream","streamType","Promise","resolve","reject","document","body","contains","Error","doResolve","videoEl","info","createElement","muted","playsInline","window","WebRTCAdapter","appendChild","bindVideoElement","srcObject","addEventListener","KnownMediaStream","USER_AUDIO_STREAM","AGENT_AUDIO_STREAM","OBSERVER_AUDIO_STREAM","indexOf","play","setAttribute","playRes","then","error","handleComplete","parentElement","tagName","waitForObjectSettings","intervalInMs","timeoutInMs","repeatWithTimeout","isVideoPlaying","waitForVideoSettings","unBindVideoElement","parentNode","removeChild","warn","remove","defaultSnapshot","format","quality","sourceStream","snapshotOptions","x","y","w","h","crop","resize","tempContainer","style","cssText","doneFn","err","image","setTimeout","videoElement","getImgDataIE11","getImgData","imgData","length","canvas","ctx","getContext","width","height","drawImage","toDataURL","_drawAndRemove","base64","getFrame","Image","onload"],"mappings":"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","file":"MediaDomUtils.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSnapshotFromMediaStream = exports.removeVideoElementFromDom = exports.renderMediaStreamToVideoEl = exports.calculateResolution = void 0;\nvar isUndefined_1 = __importDefault(require(\"lodash/isUndefined\"));\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 retry_with_timeout_1 = require(\"@techsee/techsee-common/lib/core/retry-with-timeout\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar trace = MediaTracer_1.getMediaTracer('DomUtils');\nvar isIE11 = new ts_environment_detect_1.TsEnvironmentDetect().isIE11();\nfunction calculateResolution(_a) {\n var videoWidth = _a.videoWidth, videoHeight = _a.videoHeight;\n var multiplyResolution = videoWidth * videoHeight;\n var videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.NONE;\n if (multiplyResolution >= MediaConstants_1.VideoResolutionMultiplication.HD) {\n videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.HD;\n }\n if (multiplyResolution >= MediaConstants_1.VideoResolutionMultiplication.SD &&\n multiplyResolution < MediaConstants_1.VideoResolutionMultiplication.HD) {\n videoResolutionFormat = MediaConstants_1.VideoResolutionFormat.SD;\n }\n return videoResolutionFormat;\n}\nexports.calculateResolution = calculateResolution;\nfunction renderMediaStreamToVideoEl(container, mediaStream, streamType) {\n return new Promise(function (resolve, reject) {\n if (!document.body.contains(container)) {\n reject(new Error('Cannot render to container that is not attached to dom'));\n return;\n }\n var doResolve = function (videoEl) {\n trace.info('Video element created successfully', { videoEl: videoEl });\n resolve(videoEl);\n };\n var videoEl = document.createElement('video');\n videoEl.muted = true;\n videoEl.playsInline = true;\n if (isIE11 && window.WebRTCAdapter) {\n container.appendChild(videoEl);\n window.WebRTCAdapter.bindVideoElement(videoEl);\n }\n videoEl.srcObject = mediaStream;\n // When unplugged the headphones in ios the video element got paused.\n videoEl.addEventListener('pause', function () {\n if ([\n MediaConstants_1.KnownMediaStream.USER_AUDIO_STREAM,\n MediaConstants_1.KnownMediaStream.AGENT_AUDIO_STREAM,\n MediaConstants_1.KnownMediaStream.OBSERVER_AUDIO_STREAM\n ].indexOf(streamType) > -1) {\n trace.info('Video element got paused. IOS headphones disconnected');\n videoEl.play();\n }\n });\n if (!isIE11) {\n // Hack to override behavior introduced by Chrome/FF that unmuted video elements can't auto play\n videoEl.setAttribute('muted', '');\n }\n try {\n var playRes = videoEl.play();\n if (playRes && playRes.then) {\n playRes.then(function () {\n trace.info('Video element play success');\n if (!isIE11) {\n doResolve(videoEl);\n }\n });\n }\n else if (!isIE11) {\n doResolve(videoEl);\n }\n if (playRes && playRes.catch) {\n playRes.catch(function (error) {\n trace.error('Reject while executing play method on video element', error);\n reject(error);\n });\n }\n }\n catch (error) {\n reject(error);\n trace.error('Error while executing play method on video element', error);\n return;\n }\n if (isIE11) {\n var handleComplete = function () { return videoEl.parentElement.tagName !== 'OBJECT'; };\n var waitForObjectSettings = { intervalInMs: 30, timeoutInMs: 200 };\n retry_with_timeout_1.repeatWithTimeout(handleComplete, waitForObjectSettings).then(function () {\n //We will wait, until video is played, then we resolve\n var isVideoPlaying = function () { return videoEl.videoHeight <= 0 || videoEl.videoWidth <= 0; };\n var waitForVideoSettings = { intervalInMs: 50, timeoutInMs: 10000 };\n retry_with_timeout_1.repeatWithTimeout(isVideoPlaying, waitForVideoSettings)\n .then(function () { return doResolve(videoEl.parentElement); })\n .catch(function () { return reject(new Error('Timeout while waiting for video to play')); });\n });\n }\n else {\n container.appendChild(videoEl);\n //doResolve(videoEl);\n }\n });\n}\nexports.renderMediaStreamToVideoEl = renderMediaStreamToVideoEl;\nfunction removeVideoElementFromDom(videoEl) {\n return new Promise(function (resolve) {\n if (isIE11 && window.WebRTCAdapter) {\n window.WebRTCAdapter.unBindVideoElement(videoEl);\n if (videoEl && videoEl.parentNode && videoEl.parentNode.removeChild) {\n videoEl.parentNode.removeChild(videoEl);\n trace.info('Video element removed successfully');\n }\n else {\n trace.warn('Video element not removed', videoEl, videoEl.parentNode);\n }\n }\n else {\n videoEl.remove();\n }\n resolve();\n });\n}\nexports.removeVideoElementFromDom = removeVideoElementFromDom;\nvar defaultSnapshot = {\n format: 'image/png',\n quality: 0.92\n};\nfunction getSnapshotFromMediaStream(mediaStream, sourceStream, snapshotOptions) {\n if (snapshotOptions === void 0) { snapshotOptions = defaultSnapshot; }\n var format = snapshotOptions.format, quality = snapshotOptions.quality, x = snapshotOptions.x, y = snapshotOptions.y, w = snapshotOptions.w, h = snapshotOptions.h;\n var crop = !isUndefined_1.default(x) && !isUndefined_1.default(y) && !isUndefined_1.default(w) && !isUndefined_1.default(h);\n var resize = !crop && (!isUndefined_1.default(w) || !isUndefined_1.default(h));\n return new Promise(function (resolve, reject) {\n var tempContainer = document.createElement('div');\n tempContainer.style.cssText = 'position:absolute;left: -10000px;';\n document.body.appendChild(tempContainer);\n var doneFn = function (err, image) {\n if (err) {\n reject(err);\n return;\n }\n setTimeout(function () {\n document.body.removeChild(tempContainer);\n if (!err) {\n resolve(image);\n }\n }, 50);\n };\n renderMediaStreamToVideoEl(tempContainer, mediaStream, sourceStream)\n .then(function (videoElement) {\n return Promise.resolve(isIE11 ? getImgDataIE11(videoElement) : getImgData(videoElement)).then(function (imgData) {\n if (!imgData || imgData.length < 10) {\n throw new Error('Failed to create a snapshot - imgData is null or empty');\n }\n doneFn(null, imgData);\n });\n })\n .catch(function (error) {\n // eslint-disable-next-line prettier/prettier\n doneFn(error || new Error('Failed to create a snapshot - can\\'t render MediaStream To VideoEl'));\n });\n });\n //Gets image in all browsers except of IE\n function getImgData(videoElement) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n canvas.width = w;\n canvas.height = h;\n ctx.drawImage(videoElement, 0, 0, w, h);\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n ctx.drawImage(videoElement, 0, 0);\n }\n return canvas.toDataURL(format, quality);\n }\n //Gets image in IE browser. There should be TechSee IE11 plugin or OpenTok plugin installed.\n function getImgDataIE11(videoElement) {\n return new Promise(function (resolve) {\n var videoWidth = videoElement.videoWidth, videoHeight = videoElement.videoHeight;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (crop || resize) {\n canvas.width = w;\n canvas.height = h;\n }\n else {\n canvas.height = videoHeight;\n canvas.width = videoWidth;\n }\n function _drawAndRemove(image) {\n if (crop) {\n ctx.drawImage(image, x, y, w, h, 0, 0, w, h);\n }\n else if (resize) {\n ctx.drawImage(image, 0, 0, w, h);\n }\n else {\n ctx.drawImage(image, 0, 0, videoWidth, videoHeight);\n }\n return canvas.toDataURL(format, quality);\n }\n var base64 = videoElement.getFrame();\n var image = new Image();\n image.onload = function () { return resolve(_drawAndRemove(image)); };\n image.setAttribute('src', 'data:image/bmp;base64,' + base64);\n });\n }\n}\nexports.getSnapshotFromMediaStream = getSnapshotFromMediaStream;\n\n//# sourceMappingURL=MediaDomUtils.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/MediaTracer.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","TECHSEE_MEDIA_TRACER","Tracer_1","require","postfixName","getTracer"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyBF,OAAO,CAACG,oBAAR,GAA+B,KAAK,CAA7D;;AACA,IAAIC,QAAQ,GAAGC,OAAO,CAAC,yCAAD,CAAtB;;AACAL,OAAO,CAACG,oBAAR,GAA+B,aAA/B;;AACA,SAASD,cAAT,CAAwBI,WAAxB,EAAqC;AACjC,SAAOF,QAAQ,CAACG,SAAT,CAAmBP,OAAO,CAACG,oBAA3B,EAAiDG,WAAjD,CAAP;AACH;;AACDN,OAAO,CAACE,cAAR,GAAyBA,cAAzB","file":"MediaTracer.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = exports.TECHSEE_MEDIA_TRACER = void 0;\nvar Tracer_1 = require(\"@techsee/techsee-common/lib/core/Tracer\");\nexports.TECHSEE_MEDIA_TRACER = 'MediaTracer';\nfunction getMediaTracer(postfixName) {\n return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);\n}\nexports.getMediaTracer = getMediaTracer;\n\n//# sourceMappingURL=MediaTracer.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/MediaTracer.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","TECHSEE_MEDIA_TRACER","Tracer_1","require","postfixName","getTracer"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;EAAEC,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyBF,OAAO,CAACG,oBAAR,GAA+B,KAAK,CAA7D;;AACA,IAAIC,QAAQ,GAAGC,OAAO,CAAC,yCAAD,CAAtB;;AACAL,OAAO,CAACG,oBAAR,GAA+B,aAA/B;;AACA,SAASD,cAAT,CAAwBI,WAAxB,EAAqC;EACjC,OAAOF,QAAQ,CAACG,SAAT,CAAmBP,OAAO,CAACG,oBAA3B,EAAiDG,WAAjD,CAAP;AACH;;AACDN,OAAO,CAACE,cAAR,GAAyBA,cAAzB","file":"MediaTracer.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = exports.TECHSEE_MEDIA_TRACER = void 0;\nvar Tracer_1 = require(\"@techsee/techsee-common/lib/core/Tracer\");\nexports.TECHSEE_MEDIA_TRACER = 'MediaTracer';\nfunction getMediaTracer(postfixName) {\n return Tracer_1.getTracer(exports.TECHSEE_MEDIA_TRACER, postfixName);\n}\nexports.getMediaTracer = getMediaTracer;\n\n//# sourceMappingURL=MediaTracer.js.map\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaUtils/index.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","MediaTracer_1","require","enumerable","get"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;AAAEC,EAAAA,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyB,KAAK,CAA9B;;AACA,IAAIC,aAAa,GAAGC,OAAO,CAAC,eAAD,CAA3B;;AACAN,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,gBAA/B,EAAiD;AAAEK,EAAAA,UAAU,EAAE,IAAd;AAAoBC,EAAAA,GAAG,EAAE,eAAY;AAAE,WAAOH,aAAa,CAACD,cAArB;AAAsC;AAA7E,CAAjD","file":"index.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = void 0;\nvar MediaTracer_1 = require(\"./MediaTracer\");\nObject.defineProperty(exports, \"getMediaTracer\", { enumerable: true, get: function () { return MediaTracer_1.getMediaTracer; } });\n\n//# sourceMappingURL=index.js.map\n"]}
1
+ {"version":3,"sources":["MediaUtils/index.js"],"names":["Object","defineProperty","exports","value","getMediaTracer","MediaTracer_1","require","enumerable","get"],"mappings":"AAAA;;AACAA,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C;EAAEC,KAAK,EAAE;AAAT,CAA7C;AACAD,OAAO,CAACE,cAAR,GAAyB,KAAK,CAA9B;;AACA,IAAIC,aAAa,GAAGC,OAAO,CAAC,eAAD,CAA3B;;AACAN,MAAM,CAACC,cAAP,CAAsBC,OAAtB,EAA+B,gBAA/B,EAAiD;EAAEK,UAAU,EAAE,IAAd;EAAoBC,GAAG,EAAE,eAAY;IAAE,OAAOH,aAAa,CAACD,cAArB;EAAsC;AAA7E,CAAjD","file":"index.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMediaTracer = void 0;\nvar MediaTracer_1 = require(\"./MediaTracer\");\nObject.defineProperty(exports, \"getMediaTracer\", { enumerable: true, get: function () { return MediaTracer_1.getMediaTracer; } });\n\n//# sourceMappingURL=index.js.map\n"]}