@techsee/techsee-media-service 999.0.2-switch → 999.0.3-alpha2

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 (150) hide show
  1. package/lib/LocalStreamManager.d.ts +12 -0
  2. package/lib/LocalStreamManager.d.ts.map +1 -1
  3. package/lib/LocalStreamManager.js +440 -283
  4. package/lib/LocalStreamManager.js.map +1 -1
  5. package/lib/MediaConstants.d.ts +14 -4
  6. package/lib/MediaConstants.d.ts.map +1 -1
  7. package/lib/MediaConstants.js +83 -38
  8. package/lib/MediaConstants.js.map +1 -1
  9. package/lib/MediaContracts.d.ts +17 -14
  10. package/lib/MediaContracts.d.ts.map +1 -1
  11. package/lib/MediaContracts.js +3 -3
  12. package/lib/MediaContracts.js.map +1 -1
  13. package/lib/MediaPublisher.d.ts +3 -3
  14. package/lib/MediaPublisher.d.ts.map +1 -1
  15. package/lib/MediaPublisher.js +46 -35
  16. package/lib/MediaPublisher.js.map +1 -1
  17. package/lib/MediaServiceBase.d.ts +21 -7
  18. package/lib/MediaServiceBase.d.ts.map +1 -1
  19. package/lib/MediaServiceBase.js +924 -586
  20. package/lib/MediaServiceBase.js.map +1 -1
  21. package/lib/MediaSession/MediaServer.d.ts +45 -0
  22. package/lib/MediaSession/MediaServer.d.ts.map +1 -0
  23. package/lib/MediaSession/MediaServer.js +538 -0
  24. package/lib/MediaSession/MediaServer.js.map +1 -0
  25. package/lib/MediaSession/MediaSessionBase.d.ts +10 -1
  26. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  27. package/lib/MediaSession/MediaSessionBase.js +128 -66
  28. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  29. package/lib/MediaSession/SessionOpentok.d.ts +11 -9
  30. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  31. package/lib/MediaSession/SessionOpentok.js +500 -352
  32. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  33. package/lib/MediaSession/SessionTurn.d.ts +4 -1
  34. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  35. package/lib/MediaSession/SessionTurn.js +611 -422
  36. package/lib/MediaSession/SessionTurn.js.map +1 -1
  37. package/lib/MediaSession/TurnConstants.js +31 -30
  38. package/lib/MediaSession/TurnConstants.js.map +1 -1
  39. package/lib/MediaSubscriber.d.ts +11 -11
  40. package/lib/MediaSubscriber.d.ts.map +1 -1
  41. package/lib/MediaSubscriber.js +236 -192
  42. package/lib/MediaSubscriber.js.map +1 -1
  43. package/lib/MediaUtils/Compatibility.d.ts +2 -1
  44. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  45. package/lib/MediaUtils/Compatibility.js +130 -85
  46. package/lib/MediaUtils/Compatibility.js.map +1 -1
  47. package/lib/MediaUtils/MediaDomUtils.d.ts +3 -2
  48. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  49. package/lib/MediaUtils/MediaDomUtils.js +235 -174
  50. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  51. package/lib/MediaUtils/MediaTracer.js +9 -4
  52. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  53. package/lib/MediaUtils/index.d.ts +1 -0
  54. package/lib/MediaUtils/index.d.ts.map +1 -0
  55. package/lib/MediaUtils/index.js +16 -0
  56. package/lib/MediaUtils/index.js.map +1 -0
  57. package/lib/MultiParty/Contracts.d.ts +16 -0
  58. package/lib/MultiParty/Contracts.d.ts.map +1 -0
  59. package/lib/MultiParty/Contracts.js +6 -0
  60. package/lib/MultiParty/Contracts.js.map +1 -0
  61. package/lib/MultiParty/DetectWebRtcService.d.ts +16 -0
  62. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -0
  63. package/lib/MultiParty/DetectWebRtcService.js +79 -0
  64. package/lib/MultiParty/DetectWebRtcService.js.map +1 -0
  65. package/lib/MultiParty/MediaCapabilitiesService.d.ts +23 -0
  66. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -0
  67. package/lib/MultiParty/MediaCapabilitiesService.js +369 -0
  68. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -0
  69. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +5 -0
  70. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -0
  71. package/lib/MultiParty/MediaCapabilitiesUtils.js +305 -0
  72. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -0
  73. package/lib/MultiParty/MultiPartyService.d.ts +40 -0
  74. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -0
  75. package/lib/MultiParty/MultiPartyService.js +70 -0
  76. package/lib/MultiParty/MultiPartyService.js.map +1 -0
  77. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +3 -0
  78. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -0
  79. package/lib/MultiParty/MultiPartyServiceFactory.js +21 -0
  80. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -0
  81. package/lib/MultiParty/OpentokMultiPartyService.d.ts +29 -0
  82. package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -0
  83. package/lib/MultiParty/OpentokMultiPartyService.js +888 -0
  84. package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -0
  85. package/lib/MultiParty/VideoLayoutType.d.ts +4 -0
  86. package/lib/MultiParty/VideoLayoutType.d.ts.map +1 -0
  87. package/lib/MultiParty/VideoLayoutType.js +13 -0
  88. package/lib/MultiParty/VideoLayoutType.js.map +1 -0
  89. package/lib/MultiParty/index.d.ts +4 -0
  90. package/lib/MultiParty/index.d.ts.map +1 -0
  91. package/lib/MultiParty/index.js +61 -0
  92. package/lib/MultiParty/index.js.map +1 -0
  93. package/lib/MultiParty/opentok.d.ts +503 -0
  94. package/lib/TechseeMediaStream.d.ts +6 -6
  95. package/lib/TechseeMediaStream.d.ts.map +1 -1
  96. package/lib/TechseeMediaStream.js +59 -53
  97. package/lib/TechseeMediaStream.js.map +1 -1
  98. package/lib/oldCode/constants.js +20 -15
  99. package/lib/oldCode/constants.js.map +1 -1
  100. package/lib/oldCode/event-emitter.js +45 -22
  101. package/lib/oldCode/event-emitter.js.map +1 -1
  102. package/lib/oldCode/index.js +48 -52
  103. package/lib/oldCode/index.js.map +1 -1
  104. package/lib/oldCode/opentok/session.js +261 -236
  105. package/lib/oldCode/opentok/session.js.map +1 -1
  106. package/lib/oldCode/opentok/stream.js +283 -269
  107. package/lib/oldCode/opentok/stream.js.map +1 -1
  108. package/lib/oldCode/publisher.js +96 -71
  109. package/lib/oldCode/publisher.js.map +1 -1
  110. package/lib/oldCode/service.js +294 -272
  111. package/lib/oldCode/service.js.map +1 -1
  112. package/lib/oldCode/session.js +82 -60
  113. package/lib/oldCode/session.js.map +1 -1
  114. package/lib/oldCode/stream.js +153 -125
  115. package/lib/oldCode/stream.js.map +1 -1
  116. package/lib/oldCode/subscriber.js +60 -35
  117. package/lib/oldCode/subscriber.js.map +1 -1
  118. package/lib/oldCode/tracer.d.ts +3 -2
  119. package/lib/oldCode/tracer.d.ts.map +1 -1
  120. package/lib/oldCode/tracer.js +181 -130
  121. package/lib/oldCode/tracer.js.map +1 -1
  122. package/lib/oldCode/utils/ImageFixer.js +67 -44
  123. package/lib/oldCode/utils/ImageFixer.js.map +1 -1
  124. package/lib/oldCode/webrtc/constants.js +102 -110
  125. package/lib/oldCode/webrtc/constants.js.map +1 -1
  126. package/lib/oldCode/webrtc/helper.js +176 -124
  127. package/lib/oldCode/webrtc/helper.js.map +1 -1
  128. package/lib/oldCode/webrtc/session-kms.js +408 -393
  129. package/lib/oldCode/webrtc/session-kms.js.map +1 -1
  130. package/lib/oldCode/webrtc/session-loopback.js +245 -227
  131. package/lib/oldCode/webrtc/session-loopback.js.map +1 -1
  132. package/lib/oldCode/webrtc/session-turn.js +705 -658
  133. package/lib/oldCode/webrtc/session-turn.js.map +1 -1
  134. package/lib/oldCode/webrtc/session-turn.v2.js +480 -471
  135. package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -1
  136. package/lib/oldCode/webrtc/session.js +12 -6
  137. package/lib/oldCode/webrtc/session.js.map +1 -1
  138. package/lib/oldCode/webrtc/stream.js +526 -504
  139. package/lib/oldCode/webrtc/stream.js.map +1 -1
  140. package/lib/oldCode/webrtc/temasys/adapter-loader.js +5 -6
  141. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -1
  142. package/lib/oldCode/webrtc/temasys/adapter.js +5264 -5192
  143. package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -1
  144. package/lib/oldCode/webrtc/webrtc-ie-shim.js +3357 -2927
  145. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -1
  146. package/lib/qos/raw-qos.js +348 -273
  147. package/lib/qos/raw-qos.js.map +1 -1
  148. package/lib/webrtc-ie-shim.js +3386 -2985
  149. package/lib/webrtc-ie-shim.js.map +1 -1
  150. package/package.json +54 -42
@@ -1 +1 @@
1
- {"version":3,"sources":["LocalStreamManager.js","../src/LocalStreamManager.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","__importDefault","mod","__esModule","defineProperty","exports","value","assign_1","require","get_1","last_1","first_1","bluebird_1","MediaConstants_1","MediaTracer_1","window","latestUserMediaStream","userMediaPromise","latestDesktopMediaStream","desktopMediaPromise","trace","getMediaTracer","LocalStreamManager","environment","_groupedDevices","video","audio","parseMediaErrorThenThrow","bind","clearAllStreams","getUserMediaStream","constraints","_this","info","videoTrack","mediaStream","getVideoTracks","readyState","Promise","resolve","isNew","destroyUserMediaStream","reject","catchHandler","err","error","getHighestResolutionStream","then","streamResult","catch","getDesktopMediaStream","track","destroyDesktopMediaStream","mediaCatchHandler","getTracks","forEach","stop","all","undefined","isDesktopMedia","constraintsCandidates","getParsedConstraints","Error","lastSuccessfulResult","lastFailedResult","isStreamRequestFulfilled","reduce","total","candidate","constraintType","default","getStreamPromiseByParsedConstraints","stream","constraint","failResult","errorCode","MediaRequestErrorCode","PermissionDenied","GeneralError","message","getUserMediaStreamMediaDevice","streamPromise","navigator","mediaDevices","getUserMedia","getDisplayMedia","name","newConstraints","facingMode","e","setGroupedDevices","groupedDevices","back","front","streamConstraints","constraintCandidates","baseConstraints","cameraType","videoSourceType","LocalVideoSourceType","CAMERA_FORNT","frameRate","ideal","max","deviceId","assignConstraint","videoResolution","_a","resolution","split","width","height","constraintCandidate","_constraintByType","push","Array","defaultResolution","DEFAULT_VIDEO_RESOLUTION","DEFAULT_VIDEO_CONSTRAINT_TYPE","errorName","permissionErrorNames","constraintsErrors","isErrorOfType","errorsArr","filter","Overconstrained","type","ConstraintType","MIN","min"],"mappings":"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","file":"LocalStreamManager.js","sourcesContent":["\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar assign_1 = __importDefault(require(\"lodash/assign\"));\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar last_1 = __importDefault(require(\"lodash/last\"));\nvar first_1 = __importDefault(require(\"lodash/first\"));\nvar bluebird_1 = require(\"bluebird\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nwindow.latestUserMediaStream = null;\nvar userMediaPromise = null;\nwindow.latestDesktopMediaStream = null;\nvar desktopMediaPromise = null;\nvar trace = MediaTracer_1.getMediaTracer('LocalStreamManager');\nvar LocalStreamManager = /** @class */ (function () {\n function LocalStreamManager(environment) {\n this._groupedDevices = { video: null, audio: null };\n this.environment = environment;\n this.parseMediaErrorThenThrow = this.parseMediaErrorThenThrow.bind(this);\n this.clearAllStreams = this.clearAllStreams.bind(this);\n }\n LocalStreamManager.prototype.getUserMediaStream = function (constraints) {\n var _this = this;\n trace.info('getUserMediaStream', constraints);\n if (userMediaPromise) {\n return userMediaPromise;\n }\n if (window.latestUserMediaStream) {\n var videoTrack = window.latestUserMediaStream.mediaStream.getVideoTracks();\n if (videoTrack.length > 0 && videoTrack[0].readyState === 'live') {\n return bluebird_1.Promise.resolve(__assign({}, window.latestUserMediaStream, { isNew: false }));\n }\n this.destroyUserMediaStream();\n }\n userMediaPromise = new bluebird_1.Promise(function (resolve, reject) {\n var catchHandler = function (err) {\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n trace.error('getUserMedia error', err);\n reject(err);\n };\n try {\n _this.getHighestResolutionStream(false, constraints)\n .then(function (streamResult) {\n userMediaPromise = null;\n window.latestUserMediaStream = streamResult;\n resolve(__assign({}, window.latestUserMediaStream, { isNew: true }));\n })\n .catch(catchHandler);\n }\n catch (err) {\n catchHandler(err);\n }\n });\n return userMediaPromise;\n };\n LocalStreamManager.prototype.getDesktopMediaStream = function (constraints) {\n var _this = this;\n if (desktopMediaPromise) {\n return desktopMediaPromise;\n }\n trace.info('getDesktopMediaStream', constraints);\n if (window.latestDesktopMediaStream) {\n var track = window.latestDesktopMediaStream.mediaStream.getVideoTracks();\n if (track.length > 0 && track[0].readyState === 'live') {\n //return Promise.resolve();\n return bluebird_1.Promise.resolve(__assign({}, window.latestDesktopMediaStream, { isNew: false }));\n }\n this.destroyDesktopMediaStream().catch(function (error) {\n trace.error('Error destroying desktop media stream', error);\n });\n }\n desktopMediaPromise = new bluebird_1.Promise(function (resolve, reject) {\n var mediaCatchHandler = function (err) {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = null;\n trace.error('getDisplayMedia error', err);\n reject(err);\n };\n try {\n _this.getHighestResolutionStream(true, { video: constraints, audio: false })\n .then(function (streamResult) {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = streamResult;\n resolve(__assign({}, window.latestDesktopMediaStream, { isNew: true }));\n }).catch(mediaCatchHandler);\n }\n catch (err) {\n mediaCatchHandler(err);\n }\n });\n return desktopMediaPromise;\n };\n LocalStreamManager.prototype.destroyUserMediaStream = function () {\n var streamResult = window.latestUserMediaStream;\n window.latestUserMediaStream = null;\n userMediaPromise = null;\n if (streamResult && streamResult.mediaStream) {\n streamResult.mediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n return bluebird_1.Promise.resolve();\n };\n LocalStreamManager.prototype.destroyDesktopMediaStream = function () {\n var streamResult = window.latestDesktopMediaStream;\n window.latestDesktopMediaStream = null;\n desktopMediaPromise = null;\n if (streamResult && streamResult.mediaStream) {\n streamResult.mediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n return bluebird_1.Promise.resolve();\n };\n LocalStreamManager.prototype.clearAllStreams = function () {\n trace.info('LocalStreamManager Clearing all streams');\n return bluebird_1.Promise.all([\n this.destroyDesktopMediaStream(),\n this.destroyUserMediaStream()\n ]).then(function () { return undefined; });\n };\n LocalStreamManager.prototype.getHighestResolutionStream = function (isDesktopMedia, constraints) {\n var _this = this;\n var constraintsCandidates = this.getParsedConstraints(isDesktopMedia, constraints);\n trace.info('getHighestResolutionStream - constraintsCandidates:', constraintsCandidates);\n if (constraintsCandidates.length === 0) {\n return bluebird_1.Promise.reject(new Error('No constraints to retrieve the stream'));\n }\n return new bluebird_1.Promise(function (resolve, reject) {\n var lastSuccessfulResult = null;\n var lastFailedResult = null;\n var isStreamRequestFulfilled = false;\n bluebird_1.Promise.reduce(constraintsCandidates, function (total, candidate) {\n if (isStreamRequestFulfilled) {\n return;\n }\n var constraintType = get_1.default(constraints, 'video.videoResolution.constraintType') || get_1.default(constraints, 'video.videoResolution[0].constraintType');\n return _this.getStreamPromiseByParsedConstraints(candidate, isDesktopMedia)\n .then(function (stream) {\n lastSuccessfulResult = {\n mediaStream: stream,\n constraint: candidate,\n constraintType: constraintType,\n isNew: true\n };\n trace.info('getHighestResolutionStream Success', lastSuccessfulResult);\n isStreamRequestFulfilled = true;\n resolve(lastSuccessfulResult);\n })\n .catch(function (failResult) {\n lastFailedResult = failResult;\n if (lastFailedResult.errorCode === MediaConstants_1.MediaRequestErrorCode.PermissionDenied) {\n isStreamRequestFulfilled = true;\n reject(lastFailedResult);\n }\n });\n }, 0)\n .then(function () {\n if (!isStreamRequestFulfilled) {\n if (!lastFailedResult) {\n lastFailedResult = {\n errorCode: MediaConstants_1.MediaRequestErrorCode.GeneralError,\n message: 'Suitable stream cannot be created'\n };\n }\n reject(lastFailedResult);\n }\n });\n });\n };\n LocalStreamManager.prototype.getUserMediaStreamMediaDevice = function (constraints, isDesktopMedia) {\n var streamPromise = null;\n if (!isDesktopMedia) {\n streamPromise = navigator.mediaDevices.getUserMedia(constraints);\n }\n else {\n //@ts-ignore\n streamPromise = navigator.mediaDevices.getDisplayMedia\n //@ts-ignore\n ? navigator.mediaDevices.getDisplayMedia(constraints)\n : navigator.getDisplayMedia(constraints);\n }\n return streamPromise;\n };\n //@ts-ignore\n LocalStreamManager.prototype.getStreamPromiseByParsedConstraints = function (constraints, isDesktopMedia) {\n var _this = this;\n trace.info('getStreamPromiseByParsedConstraints', constraints);\n try {\n return this.getUserMediaStreamMediaDevice(constraints, isDesktopMedia).catch(function (err) {\n var streamPromise = null;\n trace.info('getStreamPromiseByParsedConstraints - get user stream error', err.name);\n // Android (Galaxy esp.) have a bug that when using facingMode it might cause NotReadableError. So\n // we should try again but without facingMode. The exception to the rule is when we don't have specific\n // device to use (like in IOS13 bug, as can be seen in MediaServiceBase.ts), in that case, we might end\n // up using the front camera, which is a privacy concern and the preference is to fallback from video\n if (err && (err.name === 'NotReadableError') && get_1.default(constraints, 'video.facingMode') &&\n get_1.default(constraints, 'video.deviceId')) {\n var newConstraints = constraints;\n trace.info('getStreamPromiseByParsedConstraints - NotReadableError - Failed to get video user media stream with facingMode=environment', err.name);\n // @ts-ignore\n delete newConstraints.video.facingMode;\n streamPromise = _this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n }\n else if (err && err.name && constraints.audio && !constraints.video) {\n trace.info('getStreamPromiseByParsedConstraints - audioStreamFailed - Failed to get audio user media stream', err.name);\n return _this.parseMediaErrorThenThrow({ name: 'audioStreamFailed' });\n }\n else if (err && err.name && constraints.audio) {\n var newConstraints = constraints;\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video and audio user media stream, try to get video media stream only', err.name);\n newConstraints.audio = false;\n streamPromise = _this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n }\n else if (err && !streamPromise) {\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video user media stream', err && err.name);\n streamPromise = bluebird_1.Promise.reject(err);\n }\n return streamPromise && streamPromise.catch(_this.parseMediaErrorThenThrow);\n });\n }\n catch (e) {\n this.parseMediaErrorThenThrow(e);\n }\n };\n LocalStreamManager.prototype.setGroupedDevices = function (groupedDevices) {\n trace.info('setGroupedDevices', groupedDevices);\n this._groupedDevices = { video: groupedDevices.video\n ? { back: last_1.default(groupedDevices.video), front: first_1.default(groupedDevices.video) }\n : null,\n audio: last_1.default(groupedDevices.audio) || null };\n };\n LocalStreamManager.prototype.getParsedConstraints = function (isDesktopMedia, streamConstraints) {\n var constraintCandidates = [];\n //TODO - Alex: need to understand which constraints not compatible with screen share\n if (isDesktopMedia) {\n return [{ video: true }];\n }\n if (!streamConstraints) {\n return constraintCandidates;\n }\n var baseConstraints = {};\n baseConstraints.audio = typeof streamConstraints.audio === 'boolean' ? streamConstraints.audio : undefined;\n if (!streamConstraints.video) {\n return [baseConstraints];\n }\n var cameraType = (streamConstraints.video !== 'boolean') &&\n streamConstraints.video.videoSourceType;\n baseConstraints.video = {\n facingMode: cameraType && cameraType === MediaConstants_1.LocalVideoSourceType.CAMERA_FORNT\n ? 'user'\n : 'environment',\n frameRate: { ideal: 15, max: 30 }\n };\n var deviceId = get_1.default(this._groupedDevices, \"video.\" + (cameraType === MediaConstants_1.LocalVideoSourceType.CAMERA_FORNT ? 'front' : 'back') + \".deviceId\");\n if (deviceId) {\n baseConstraints.video.deviceId = deviceId;\n }\n var assignConstraint = function (videoResolution) {\n var _a = videoResolution.resolution.split('x'), width = _a[0], height = _a[1];\n var constraintCandidate = assign_1.default({}, baseConstraints);\n constraintCandidate.video = assign_1.default({}, baseConstraints.video, {\n width: _constraintByType(width, videoResolution.constraintType),\n height: _constraintByType(height, videoResolution.constraintType)\n });\n constraintCandidates.push(constraintCandidate);\n };\n if ((baseConstraints.video && typeof streamConstraints.video === 'boolean') ||\n !(streamConstraints.video.videoResolution instanceof Array)) {\n var defaultResolution = {\n resolution: MediaConstants_1.DEFAULT_VIDEO_RESOLUTION,\n constraintType: MediaConstants_1.DEFAULT_VIDEO_CONSTRAINT_TYPE\n };\n assignConstraint(defaultResolution);\n return constraintCandidates;\n }\n streamConstraints.video.videoResolution.forEach(assignConstraint);\n return constraintCandidates;\n };\n LocalStreamManager.prototype.parseMediaErrorThenThrow = function (error) {\n if (error && error.errorCode) {\n throw error;\n }\n trace.error('Get media stream error.', error);\n var errorName = error && error.name ? error.name : '';\n var permissionErrorNames = [\n 'NotAllowedError',\n 'PermissionDismissedError',\n 'PermissionDeniedError'\n ];\n // const generalError = [\n // 'NotFoundError',\n // 'DevicesNotFoundError',\n // 'NotReadableError',\n // 'TrackStartError'\n // ];\n var constraintsErrors = [\n 'OverconstrainedError',\n 'ConstraintNotSatisfiedError'\n ];\n var isErrorOfType = function (errorsArr) { return errorsArr.filter(function (err) { return err === errorName; }).length > 0; };\n if (isErrorOfType(permissionErrorNames)) {\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.PermissionDenied, message: errorName };\n }\n if (isErrorOfType(constraintsErrors)) {\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.Overconstrained, message: errorName };\n }\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.GeneralError, message: errorName };\n };\n return LocalStreamManager;\n}());\nexports.LocalStreamManager = LocalStreamManager;\nfunction _constraintByType(value, type) {\n switch (type) {\n case MediaConstants_1.ConstraintType.MIN:\n return { min: value };\n default:\n return { ideal: value };\n }\n}\n\n//# sourceMappingURL=LocalStreamManager.js.map\n","import assign from 'lodash/assign';\nimport get from 'lodash/get';\nimport last from 'lodash/last';\nimport first from 'lodash/first';\nimport {Promise} from 'bluebird';\n\nimport {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaEnvironment,\n LocalMediaConstraints,\n LocalVideoStreamConstraints,\n MediaRequestFailResult,\n MediaRequestSuccessResult,\n VideoStreamResolution\n} from './MediaContracts';\n\nimport {\n ConstraintType,\n DEFAULT_VIDEO_CONSTRAINT_TYPE,\n DEFAULT_VIDEO_RESOLUTION,\n LocalVideoSourceType,\n MediaRequestErrorCode\n} from './MediaConstants';\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\ndeclare global {\n interface Window {\n latestUserMediaStream: Nullable<MediaRequestSuccessResult>;\n latestDesktopMediaStream: Nullable<MediaRequestSuccessResult>;\n }\n}\n\ndeclare const window: Window;\n\nwindow.latestUserMediaStream = null;\nlet userMediaPromise: Nullable<Promise<MediaRequestSuccessResult>> = null;\n\nwindow.latestDesktopMediaStream = null;\nlet desktopMediaPromise: Nullable<Promise<MediaRequestSuccessResult>> = null;\n\nconst trace = getMediaTracer('LocalStreamManager');\n\nexport class LocalStreamManager {\n private environment: IMediaEnvironment;\n private _groupedDevices: {video: Nullable<{back?: MediaDeviceInfo; front?: MediaDeviceInfo}>;\n audio: Nullable<MediaDeviceInfo>;} = {video: null, audio: null};\n\n constructor(environment: IMediaEnvironment) {\n this.environment = environment;\n\n this.parseMediaErrorThenThrow = this.parseMediaErrorThenThrow.bind(this);\n this.clearAllStreams = this.clearAllStreams.bind(this);\n }\n\n getUserMediaStream(constraints: LocalMediaConstraints): Promise<MediaRequestSuccessResult> {\n trace.info('getUserMediaStream', constraints);\n if (userMediaPromise) {\n return userMediaPromise;\n }\n\n if (window.latestUserMediaStream) {\n const videoTrack = window.latestUserMediaStream.mediaStream.getVideoTracks();\n\n if (videoTrack.length > 0 && videoTrack[0].readyState === 'live') {\n return Promise.resolve({...window.latestUserMediaStream, isNew: false});\n }\n\n this.destroyUserMediaStream();\n }\n\n userMediaPromise = new Promise((resolve, reject) => {\n const catchHandler = (err: any): void => {\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n trace.error('getUserMedia error', err);\n reject(err);\n };\n\n try {\n this.getHighestResolutionStream(false, constraints)\n .then((streamResult: MediaRequestSuccessResult) => {\n userMediaPromise = null;\n window.latestUserMediaStream = streamResult;\n resolve({...window.latestUserMediaStream, isNew: true});\n })\n .catch(catchHandler);\n } catch (err) {\n catchHandler(err);\n }\n });\n\n return userMediaPromise;\n }\n\n getDesktopMediaStream(constraints: LocalVideoStreamConstraints): Promise<MediaRequestSuccessResult> {\n if (desktopMediaPromise) {\n return desktopMediaPromise;\n }\n\n trace.info('getDesktopMediaStream', constraints);\n\n if (window.latestDesktopMediaStream) {\n const track = window.latestDesktopMediaStream.mediaStream.getVideoTracks();\n\n if (track.length > 0 && track[0].readyState === 'live') {\n //return Promise.resolve();\n return Promise.resolve({...window.latestDesktopMediaStream, isNew: false});\n }\n this.destroyDesktopMediaStream().catch((error: any) => {\n trace.error('Error destroying desktop media stream', error);\n });\n\n }\n\n desktopMediaPromise = new Promise((resolve, reject) => {\n const mediaCatchHandler = (err: any): void => {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = null;\n trace.error('getDisplayMedia error', err);\n reject(err);\n };\n\n try {\n this.getHighestResolutionStream(true, {video: constraints, audio: false})\n .then((streamResult: MediaRequestSuccessResult) => {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = streamResult;\n\n resolve({...window.latestDesktopMediaStream, isNew: true});\n }).catch(mediaCatchHandler);\n } catch (err) {\n mediaCatchHandler(err);\n }\n });\n\n return desktopMediaPromise;\n }\n\n destroyUserMediaStream(): Promise<void> {\n const streamResult = window.latestUserMediaStream;\n\n window.latestUserMediaStream = null;\n userMediaPromise = null;\n\n if (streamResult && streamResult.mediaStream) {\n streamResult.mediaStream.getTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n }\n\n return Promise.resolve();\n }\n\n destroyDesktopMediaStream(): Promise<void> {\n const streamResult = window.latestDesktopMediaStream;\n\n window.latestDesktopMediaStream = null;\n desktopMediaPromise = null;\n\n if (streamResult && streamResult.mediaStream) {\n streamResult.mediaStream.getTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n }\n\n return Promise.resolve();\n }\n\n clearAllStreams(): Promise<void> {\n trace.info('LocalStreamManager Clearing all streams');\n\n return Promise.all([\n this.destroyDesktopMediaStream(),\n this.destroyUserMediaStream()\n ]).then(() => undefined);\n }\n\n private getHighestResolutionStream(isDesktopMedia: boolean, constraints?: LocalMediaConstraints): Promise<MediaRequestSuccessResult> {\n const constraintsCandidates = this.getParsedConstraints(isDesktopMedia, constraints);\n\n trace.info('getHighestResolutionStream - constraintsCandidates:', constraintsCandidates);\n\n if (constraintsCandidates.length === 0) {\n return Promise.reject(new Error('No constraints to retrieve the stream'));\n }\n\n return new Promise((resolve, reject) => {\n let lastSuccessfulResult: Nullable<MediaRequestSuccessResult> = null;\n let lastFailedResult: Nullable<MediaRequestFailResult> = null;\n let isStreamRequestFulfilled = false;\n\n (Promise as any).reduce(constraintsCandidates, (total: any, candidate: MediaStreamConstraints) => {\n if (isStreamRequestFulfilled) {\n return;\n }\n\n const constraintType = get(constraints, 'video.videoResolution.constraintType') || get(constraints, 'video.videoResolution[0].constraintType');\n\n return this.getStreamPromiseByParsedConstraints(candidate, isDesktopMedia)\n .then((stream: MediaStream) => {\n lastSuccessfulResult = {\n mediaStream: stream,\n constraint: candidate,\n constraintType,\n isNew: true\n };\n trace.info('getHighestResolutionStream Success', lastSuccessfulResult);\n isStreamRequestFulfilled = true;\n resolve(lastSuccessfulResult);\n })\n .catch((failResult: MediaRequestFailResult) => {\n lastFailedResult = failResult;\n\n if (lastFailedResult.errorCode === MediaRequestErrorCode.PermissionDenied) {\n isStreamRequestFulfilled = true;\n reject(lastFailedResult);\n }\n });\n }, 0)\n .then(() => {\n if (!isStreamRequestFulfilled) {\n if (!lastFailedResult) {\n lastFailedResult = {\n errorCode: MediaRequestErrorCode.GeneralError,\n message: 'Suitable stream cannot be created'\n };\n }\n reject(lastFailedResult);\n }\n });\n });\n }\n\n private getUserMediaStreamMediaDevice(constraints: MediaStreamConstraints, isDesktopMedia: boolean) {\n let streamPromise = null;\n\n if (!isDesktopMedia) {\n streamPromise = navigator.mediaDevices.getUserMedia(constraints);\n } else {\n //@ts-ignore\n streamPromise = navigator.mediaDevices.getDisplayMedia\n //@ts-ignore\n ? navigator.mediaDevices.getDisplayMedia(constraints)\n : navigator.getDisplayMedia(constraints);\n }\n\n return streamPromise;\n }\n\n //@ts-ignore\n private getStreamPromiseByParsedConstraints(constraints: MediaStreamConstraints, isDesktopMedia: boolean): Promise<MediaStream> {\n trace.info('getStreamPromiseByParsedConstraints', constraints);\n\n try {\n return this.getUserMediaStreamMediaDevice(constraints, isDesktopMedia).catch((err: any) => {\n let streamPromise = null;\n\n trace.info('getStreamPromiseByParsedConstraints - get user stream error', err.name);\n\n // Android (Galaxy esp.) have a bug that when using facingMode it might cause NotReadableError. So\n // we should try again but without facingMode. The exception to the rule is when we don't have specific\n // device to use (like in IOS13 bug, as can be seen in MediaServiceBase.ts), in that case, we might end\n // up using the front camera, which is a privacy concern and the preference is to fallback from video\n if (err && (err.name === 'NotReadableError') && get(constraints, 'video.facingMode') &&\n get(constraints, 'video.deviceId')) {\n\n const newConstraints = constraints;\n\n trace.info('getStreamPromiseByParsedConstraints - NotReadableError - Failed to get video user media stream with facingMode=environment', err.name);\n\n // @ts-ignore\n delete newConstraints.video.facingMode;\n\n streamPromise = this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n } else if (err && err.name && constraints.audio && !constraints.video) {\n trace.info('getStreamPromiseByParsedConstraints - audioStreamFailed - Failed to get audio user media stream', err.name);\n\n return this.parseMediaErrorThenThrow({name: 'audioStreamFailed'});\n } else if (err && err.name && constraints.audio) {\n const newConstraints = constraints;\n\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video and audio user media stream, try to get video media stream only', err.name);\n\n newConstraints.audio = false;\n streamPromise = this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n } else if (err && !streamPromise) {\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video user media stream', err && err.name);\n\n streamPromise = Promise.reject(err);\n }\n\n return streamPromise && streamPromise.catch(this.parseMediaErrorThenThrow);\n });\n } catch (e) {\n this.parseMediaErrorThenThrow(e);\n }\n }\n\n setGroupedDevices(groupedDevices: {video: MediaDeviceInfo[]; audio: MediaDeviceInfo[]}) {\n trace.info('setGroupedDevices', groupedDevices);\n this._groupedDevices = {video: groupedDevices.video\n ? {back: last(groupedDevices.video), front: first(groupedDevices.video)}\n : null,\n audio: last(groupedDevices.audio) || null};\n }\n\n private getParsedConstraints(isDesktopMedia: boolean, streamConstraints?: LocalMediaConstraints): MediaStreamConstraints[] {\n const constraintCandidates: MediaStreamConstraints[] = [];\n\n //TODO - Alex: need to understand which constraints not compatible with screen share\n if (isDesktopMedia) {\n return [{video: true}];\n }\n\n if (!streamConstraints) {\n return constraintCandidates;\n }\n\n const baseConstraints: MediaStreamConstraints = {};\n\n baseConstraints.audio = typeof streamConstraints.audio === 'boolean' ? streamConstraints.audio : undefined;\n\n if (!streamConstraints.video) {\n return [baseConstraints];\n }\n\n const cameraType = (streamConstraints.video !== 'boolean') &&\n (streamConstraints.video as LocalVideoStreamConstraints).videoSourceType;\n\n baseConstraints.video = {\n facingMode: cameraType && cameraType === LocalVideoSourceType.CAMERA_FORNT\n ? 'user'\n : 'environment',\n frameRate: {ideal: 15, max: 30}\n };\n\n const deviceId = get(this._groupedDevices, `video.${cameraType === LocalVideoSourceType.CAMERA_FORNT ? 'front' : 'back'}.deviceId`);\n\n if (deviceId) {\n baseConstraints.video.deviceId = deviceId;\n }\n\n const assignConstraint = (videoResolution: VideoStreamResolution): void => {\n const [width, height] = videoResolution.resolution.split('x');\n const constraintCandidate = assign({}, baseConstraints);\n\n constraintCandidate.video = assign({}, baseConstraints.video, {\n width: _constraintByType(width, videoResolution.constraintType),\n height: _constraintByType(height, videoResolution.constraintType)\n });\n constraintCandidates.push(constraintCandidate);\n };\n\n if ((baseConstraints.video && typeof streamConstraints.video === 'boolean') ||\n !((streamConstraints.video as LocalVideoStreamConstraints).videoResolution instanceof Array)) {\n\n const defaultResolution: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n };\n\n assignConstraint(defaultResolution);\n\n return constraintCandidates;\n }\n\n (streamConstraints.video as any).videoResolution.forEach(assignConstraint);\n\n return constraintCandidates;\n }\n\n private parseMediaErrorThenThrow(error: any): MediaRequestFailResult {\n if (error && error.errorCode) {\n throw error;\n }\n\n trace.error('Get media stream error.', error);\n const errorName = error && error.name ? error.name : '';\n\n const permissionErrorNames = [\n 'NotAllowedError',\n 'PermissionDismissedError',\n 'PermissionDeniedError'\n\n ];\n\n // const generalError = [\n // 'NotFoundError',\n // 'DevicesNotFoundError',\n // 'NotReadableError',\n // 'TrackStartError'\n // ];\n\n const constraintsErrors = [\n 'OverconstrainedError',\n 'ConstraintNotSatisfiedError'\n\n ];\n\n const isErrorOfType = (errorsArr: string[]) => errorsArr.filter((err: string) => err === errorName).length > 0;\n\n if (isErrorOfType(permissionErrorNames)) {\n throw {errorCode: MediaRequestErrorCode.PermissionDenied, message: errorName};\n }\n\n if (isErrorOfType(constraintsErrors)) {\n throw {errorCode: MediaRequestErrorCode.Overconstrained, message: errorName};\n }\n\n throw {errorCode: MediaRequestErrorCode.GeneralError, message: errorName};\n }\n}\n\nfunction _constraintByType(value: any, type: ConstraintType): any {\n switch (type) {\n case ConstraintType.MIN:\n return {min: value};\n default:\n return {ideal: value};\n }\n}\n"]}
1
+ {"version":3,"sources":["LocalStreamManager.js","../src/LocalStreamManager.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","__importDefault","mod","__esModule","defineProperty","exports","value","LocalStreamManager","assign_1","require","get_1","last_1","first_1","cloneDeep_1","bluebird_1","MediaConstants_1","MediaTracer_1","window","latestUserMediaStream","userMediaPromise","latestDesktopMediaStream","desktopMediaPromise","mediaStreamAlreadyReplaced","latestLocalMediaConstraints","trace","getMediaTracer","environment","_groupedDevices","video","audio","camerasCount","parseMediaErrorThenThrow","bind","clearAllStreams","get","enumerable","configurable","getUserMediaStream","constraints","_this","info","videoTrack","mediaStream","getVideoTracks","readyState","Promise","resolve","isNew","destroyUserMediaStream","reject","catchHandler","err","error","getHighestResolutionStream","then","streamResult","constraint","getDesktopMediaStream","track","destroyDesktopMediaStream","mediaCatchHandler","getTracks","forEach","stop","e","all","undefined","isDesktopMedia","constraintsCandidates","getParsedConstraints","Error","lastSuccessfulResult","lastFailedResult","isStreamRequestFulfilled","reduce","total","candidate","constraintType","getStreamPromiseByParsedConstraints","stream","failResult","errorCode","MediaRequestErrorCode","PermissionDenied","GeneralError","message","getUserMediaStreamMediaDevice","streamPromise","navigator","mediaDevices","getUserMedia","getDisplayMedia","name","newConstraints","facingMode","deviceId","exact","setGroupedDevices","groupedDevices","_a","CameraTypes","BACK","FRONT","streamConstraints","constraintCandidates","baseConstraints","cameraType","videoSourceType","LocalVideoSourceType","CAMERA_FRONT","frameRate","ideal","max","assignConstraint","videoResolution","resolution","split","width","height","constraintCandidate","_constraintByType","push","Array","defaultResolution","DEFAULT_VIDEO_RESOLUTION","DEFAULT_VIDEO_CONSTRAINT_TYPE","errorName","permissionErrorNames","constraintsErrors","isErrorOfType","errorsArr","filter","Overconstrained","type","ConstraintType","MIN","min"],"mappings":"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","file":"LocalStreamManager.js","sourcesContent":["\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalStreamManager = void 0;\nvar assign_1 = __importDefault(require(\"lodash/assign\"));\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar last_1 = __importDefault(require(\"lodash/last\"));\nvar first_1 = __importDefault(require(\"lodash/first\"));\nvar cloneDeep_1 = __importDefault(require(\"lodash/cloneDeep\"));\nvar bluebird_1 = require(\"bluebird\");\nvar MediaConstants_1 = require(\"./MediaConstants\");\nvar MediaTracer_1 = require(\"./MediaUtils/MediaTracer\");\nwindow.latestUserMediaStream = null;\nvar userMediaPromise = null;\nwindow.latestDesktopMediaStream = null;\nvar desktopMediaPromise = null;\nwindow.mediaStreamAlreadyReplaced = false;\nwindow.latestLocalMediaConstraints = null;\nvar trace = MediaTracer_1.getMediaTracer('LocalStreamManager');\nvar LocalStreamManager = /** @class */ (function () {\n function LocalStreamManager(environment) {\n this._groupedDevices = { video: null, audio: null, camerasCount: 0 };\n this.environment = environment;\n this.parseMediaErrorThenThrow = this.parseMediaErrorThenThrow.bind(this);\n this.clearAllStreams = this.clearAllStreams.bind(this);\n }\n Object.defineProperty(LocalStreamManager.prototype, \"groupedDevices\", {\n get: function () {\n return this._groupedDevices;\n },\n enumerable: false,\n configurable: true\n });\n LocalStreamManager.prototype.getUserMediaStream = function (constraints) {\n var _this = this;\n trace.info('getUserMediaStream', constraints);\n if (userMediaPromise) {\n return userMediaPromise;\n }\n if (window.latestUserMediaStream) {\n var videoTrack = window.latestUserMediaStream.mediaStream.getVideoTracks();\n if (videoTrack.length > 0 && videoTrack[0].readyState === 'live') {\n return bluebird_1.Promise.resolve(__assign(__assign({}, window.latestUserMediaStream), { isNew: false }));\n }\n this.destroyUserMediaStream();\n }\n userMediaPromise = new bluebird_1.Promise(function (resolve, reject) {\n var catchHandler = function (err) {\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n trace.error('getUserMedia error', err);\n reject(err);\n };\n try {\n _this.getHighestResolutionStream(false, constraints)\n .then(function (streamResult) {\n userMediaPromise = null;\n window.latestUserMediaStream = streamResult;\n window.latestLocalMediaConstraints = cloneDeep_1.default(constraints);\n window.latestLocalMediaConstraints.audio = (streamResult.constraint && streamResult.constraint.audio);\n resolve(__assign(__assign({}, window.latestUserMediaStream), { isNew: true }));\n })\n .catch(catchHandler);\n }\n catch (err) {\n catchHandler(err);\n }\n });\n return userMediaPromise;\n };\n LocalStreamManager.prototype.getDesktopMediaStream = function (constraints) {\n var _this = this;\n if (desktopMediaPromise) {\n return desktopMediaPromise;\n }\n trace.info('getDesktopMediaStream', constraints);\n if (window.latestDesktopMediaStream) {\n var track = window.latestDesktopMediaStream.mediaStream.getVideoTracks();\n if (track.length > 0 && track[0].readyState === 'live') {\n //return Promise.resolve();\n return bluebird_1.Promise.resolve(__assign(__assign({}, window.latestDesktopMediaStream), { isNew: false }));\n }\n this.destroyDesktopMediaStream().catch(function (error) {\n trace.error('Error destroying desktop media stream', error);\n });\n }\n desktopMediaPromise = new bluebird_1.Promise(function (resolve, reject) {\n var mediaCatchHandler = function (err) {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = null;\n trace.error('getDisplayMedia error', err);\n reject(err);\n };\n try {\n _this.getHighestResolutionStream(true, { video: constraints, audio: false })\n .then(function (streamResult) {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = streamResult;\n resolve(__assign(__assign({}, window.latestDesktopMediaStream), { isNew: true }));\n }).catch(mediaCatchHandler);\n }\n catch (err) {\n mediaCatchHandler(err);\n }\n });\n return desktopMediaPromise;\n };\n LocalStreamManager.prototype.destroyUserMediaStream = function () {\n var streamResult = window.latestUserMediaStream;\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n window.latestLocalMediaConstraints = null;\n window.mediaStreamAlreadyReplaced = false;\n if (streamResult && streamResult.mediaStream) {\n try {\n streamResult.mediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n trace.info('destroyUserMediaStream - stop all tracks');\n }\n catch (e) {\n trace.info('destroyUserMediaStream - Failed to stop all tracks', e);\n }\n }\n return bluebird_1.Promise.resolve();\n };\n LocalStreamManager.prototype.destroyDesktopMediaStream = function () {\n var streamResult = window.latestDesktopMediaStream;\n window.latestDesktopMediaStream = null;\n desktopMediaPromise = null;\n if (streamResult && streamResult.mediaStream) {\n try {\n streamResult.mediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n trace.info('destroyDesktopMediaStream - stop all tracks');\n }\n catch (e) {\n trace.info('destroyDesktopMediaStream - Failed to stop all tracks', e);\n }\n }\n return bluebird_1.Promise.resolve();\n };\n LocalStreamManager.prototype.clearAllStreams = function () {\n trace.info('LocalStreamManager Clearing all streams');\n return bluebird_1.Promise.all([\n this.destroyDesktopMediaStream(),\n this.destroyUserMediaStream()\n ]).then(function () { return undefined; });\n };\n LocalStreamManager.prototype.getHighestResolutionStream = function (isDesktopMedia, constraints) {\n var _this = this;\n var constraintsCandidates = this.getParsedConstraints(isDesktopMedia, constraints);\n trace.info('getHighestResolutionStream - constraintsCandidates:', constraintsCandidates);\n if (constraintsCandidates.length === 0) {\n return bluebird_1.Promise.reject(new Error('No constraints to retrieve the stream'));\n }\n return new bluebird_1.Promise(function (resolve, reject) {\n var lastSuccessfulResult = null;\n var lastFailedResult = null;\n var isStreamRequestFulfilled = false;\n bluebird_1.Promise.reduce(constraintsCandidates, function (total, candidate) {\n if (isStreamRequestFulfilled) {\n return;\n }\n var constraintType = get_1.default(constraints, 'video.videoResolution.constraintType') || get_1.default(constraints, 'video.videoResolution[0].constraintType');\n return _this.getStreamPromiseByParsedConstraints(candidate, isDesktopMedia)\n .then(function (stream) {\n lastSuccessfulResult = {\n mediaStream: stream,\n constraint: candidate,\n constraintType: constraintType,\n isNew: true\n };\n trace.info('getHighestResolutionStream Success', lastSuccessfulResult);\n isStreamRequestFulfilled = true;\n resolve(lastSuccessfulResult);\n })\n .catch(function (failResult) {\n lastFailedResult = failResult;\n if (lastFailedResult.errorCode === MediaConstants_1.MediaRequestErrorCode.PermissionDenied) {\n isStreamRequestFulfilled = true;\n reject(lastFailedResult);\n }\n });\n }, 0)\n .then(function () {\n if (!isStreamRequestFulfilled) {\n if (!lastFailedResult) {\n lastFailedResult = {\n errorCode: MediaConstants_1.MediaRequestErrorCode.GeneralError,\n message: 'Suitable stream cannot be created'\n };\n }\n reject(lastFailedResult);\n }\n });\n });\n };\n LocalStreamManager.prototype.getUserMediaStreamMediaDevice = function (constraints, isDesktopMedia) {\n var streamPromise = null;\n if (!isDesktopMedia) {\n streamPromise = navigator.mediaDevices.getUserMedia(constraints);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n streamPromise = navigator.mediaDevices.getDisplayMedia\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n ? navigator.mediaDevices.getDisplayMedia(constraints)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n : navigator.getDisplayMedia(constraints);\n }\n return streamPromise;\n };\n // eslint-disable-next-line consistent-return,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n LocalStreamManager.prototype.getStreamPromiseByParsedConstraints = function (constraints, isDesktopMedia) {\n var _this = this;\n trace.info('getStreamPromiseByParsedConstraints', constraints);\n try {\n return this.getUserMediaStreamMediaDevice(constraints, isDesktopMedia).catch(function (err) {\n var streamPromise = null;\n trace.info('getStreamPromiseByParsedConstraints - get user stream error', err.name);\n // Android (Galaxy esp.) have a bug that when using facingMode it might cause NotReadableError. So\n // we should try again but without facingMode. The exception to the rule is when we don't have specific\n // device to use (like in IOS13 bug, as can be seen in MediaServiceBase.ts), in that case, we might end\n // up using the front camera, which is a privacy concern and the preference is to fallback from video\n if (err && (err.name === 'NotReadableError') && get_1.default(constraints, 'video.facingMode') &&\n get_1.default(constraints, 'video.deviceId')) {\n var newConstraints = constraints;\n trace.info(\"getStreamPromiseByParsedConstraints - NotReadableError - Failed to get video user media stream with facingMode=\" + get_1.default(constraints, 'video.facingMode'), err.name);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete newConstraints.video.facingMode;\n newConstraints.video.deviceId = {\n exact: constraints.video.deviceId\n };\n streamPromise = _this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n }\n else if (err && err.name && constraints.audio && !constraints.video) {\n trace.info('getStreamPromiseByParsedConstraints - audioStreamFailed - Failed to get audio user media stream', err.name);\n return _this.parseMediaErrorThenThrow({ name: 'audioStreamFailed' });\n }\n else if (err && err.name && constraints.audio) {\n var newConstraints = constraints;\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video and audio user media stream, try to get video media stream only', err.name);\n newConstraints.audio = false;\n streamPromise = _this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n }\n else if (err && !streamPromise) {\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video user media stream', err && err.name);\n streamPromise = bluebird_1.Promise.reject(err);\n }\n return streamPromise && streamPromise.catch(_this.parseMediaErrorThenThrow);\n });\n }\n catch (e) {\n this.parseMediaErrorThenThrow(e);\n }\n };\n LocalStreamManager.prototype.setGroupedDevices = function (groupedDevices) {\n var _a;\n trace.info('setGroupedDevices', groupedDevices);\n this._groupedDevices = { video: groupedDevices.video\n ? (_a = {}, _a[MediaConstants_1.CameraTypes.BACK] = last_1.default(groupedDevices.video), _a[MediaConstants_1.CameraTypes.FRONT] = first_1.default(groupedDevices.video), _a) : null, audio: last_1.default(groupedDevices.audio) || null,\n camerasCount: groupedDevices.video.length };\n };\n LocalStreamManager.prototype.getParsedConstraints = function (isDesktopMedia, streamConstraints) {\n var constraintCandidates = [];\n //TODO - Alex: need to understand which constraints not compatible with screen share\n if (isDesktopMedia) {\n return [{ video: true }];\n }\n if (!streamConstraints) {\n return constraintCandidates;\n }\n var baseConstraints = {};\n baseConstraints.audio = typeof streamConstraints.audio === 'boolean' ? streamConstraints.audio : undefined;\n if (!streamConstraints.video) {\n return [baseConstraints];\n }\n var cameraType = (streamConstraints.video !== 'boolean') &&\n streamConstraints.video.videoSourceType;\n baseConstraints.video = {\n facingMode: cameraType && cameraType === MediaConstants_1.LocalVideoSourceType.CAMERA_FRONT\n ? 'user'\n : 'environment',\n frameRate: { ideal: 15, max: 30 }\n };\n var deviceId = get_1.default(this._groupedDevices, \"video.\" + (cameraType === MediaConstants_1.LocalVideoSourceType.CAMERA_FRONT\n ? MediaConstants_1.CameraTypes.FRONT\n : MediaConstants_1.CameraTypes.BACK) + \".deviceId\");\n if (deviceId) {\n baseConstraints.video.deviceId = deviceId;\n if (this._groupedDevices.camerasCount > 1) {\n baseConstraints.video.facingMode = { exact: baseConstraints.video.facingMode };\n }\n }\n var assignConstraint = function (videoResolution) {\n var _a = videoResolution.resolution.split('x'), width = _a[0], height = _a[1];\n var constraintCandidate = assign_1.default({}, baseConstraints);\n constraintCandidate.video = assign_1.default({}, baseConstraints.video, {\n width: _constraintByType(width, videoResolution.constraintType),\n height: _constraintByType(height, videoResolution.constraintType)\n });\n constraintCandidates.push(constraintCandidate);\n };\n if ((baseConstraints.video && typeof streamConstraints.video === 'boolean') ||\n !(streamConstraints.video.videoResolution instanceof Array)) {\n var defaultResolution = {\n resolution: MediaConstants_1.DEFAULT_VIDEO_RESOLUTION,\n constraintType: MediaConstants_1.DEFAULT_VIDEO_CONSTRAINT_TYPE\n };\n assignConstraint(defaultResolution);\n return constraintCandidates;\n }\n streamConstraints.video.videoResolution.forEach(assignConstraint);\n return constraintCandidates;\n };\n LocalStreamManager.prototype.parseMediaErrorThenThrow = function (error) {\n if (error && error.errorCode) {\n throw error;\n }\n trace.error('Get media stream error.', error);\n var errorName = error && error.name ? error.name : '';\n var permissionErrorNames = [\n 'NotAllowedError',\n 'PermissionDismissedError',\n 'PermissionDeniedError'\n ];\n // const generalError = [\n // 'NotFoundError',\n // 'DevicesNotFoundError',\n // 'NotReadableError',\n // 'TrackStartError'\n // ];\n var constraintsErrors = [\n 'OverconstrainedError',\n 'ConstraintNotSatisfiedError'\n ];\n var isErrorOfType = function (errorsArr) { return errorsArr.filter(function (err) { return err === errorName; }).length > 0; };\n if (isErrorOfType(permissionErrorNames)) {\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.PermissionDenied, message: errorName };\n }\n if (isErrorOfType(constraintsErrors)) {\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.Overconstrained, message: errorName };\n }\n throw { errorCode: MediaConstants_1.MediaRequestErrorCode.GeneralError, message: errorName };\n };\n return LocalStreamManager;\n}());\nexports.LocalStreamManager = LocalStreamManager;\nfunction _constraintByType(value, type) {\n switch (type) {\n case MediaConstants_1.ConstraintType.MIN:\n return { min: value };\n default:\n return { ideal: value };\n }\n}\n\n//# sourceMappingURL=LocalStreamManager.js.map\n","import assign from 'lodash/assign';\nimport get from 'lodash/get';\nimport last from 'lodash/last';\nimport first from 'lodash/first';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {Promise} from 'bluebird';\n\nimport {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaEnvironment,\n LocalMediaConstraints,\n LocalVideoStreamConstraints,\n MediaRequestFailResult,\n MediaRequestSuccessResult,\n VideoStreamResolution\n} from './MediaContracts';\n\nimport {\n CameraTypes,\n ConstraintType,\n DEFAULT_VIDEO_CONSTRAINT_TYPE,\n DEFAULT_VIDEO_RESOLUTION,\n LocalVideoSourceType,\n MediaRequestErrorCode\n} from './MediaConstants';\nimport {getMediaTracer} from './MediaUtils/MediaTracer';\n\ndeclare global {\n interface Window {\n latestUserMediaStream: Nullable<MediaRequestSuccessResult>;\n latestDesktopMediaStream: Nullable<MediaRequestSuccessResult>;\n latestLocalMediaConstraints: Nullable<LocalMediaConstraints>;\n mediaStreamAlreadyReplaced: boolean;\n }\n}\n\ndeclare const window: Window;\n\nwindow.latestUserMediaStream = null;\nlet userMediaPromise: Nullable<Promise<MediaRequestSuccessResult>> = null;\n\nwindow.latestDesktopMediaStream = null;\nlet desktopMediaPromise: Nullable<Promise<MediaRequestSuccessResult>> = null;\n\nwindow.mediaStreamAlreadyReplaced = false;\nwindow.latestLocalMediaConstraints = null;\n\nconst trace = getMediaTracer('LocalStreamManager');\n\ninterface IGroupedDevices {\n video: Nullable<{ back?: MediaDeviceInfo; front?: MediaDeviceInfo }>;\n audio: Nullable<MediaDeviceInfo>;\n camerasCount: number;\n}\n\nexport class LocalStreamManager {\n private environment: IMediaEnvironment;\n private _groupedDevices: IGroupedDevices = {video: null, audio: null, camerasCount: 0};\n\n constructor(environment: IMediaEnvironment) {\n this.environment = environment;\n\n this.parseMediaErrorThenThrow = this.parseMediaErrorThenThrow.bind(this);\n this.clearAllStreams = this.clearAllStreams.bind(this);\n }\n\n get groupedDevices() {\n return this._groupedDevices;\n }\n\n getUserMediaStream(constraints: LocalMediaConstraints): Promise<MediaRequestSuccessResult> {\n trace.info('getUserMediaStream', constraints);\n if (userMediaPromise) {\n return userMediaPromise;\n }\n\n if (window.latestUserMediaStream) {\n const videoTrack = window.latestUserMediaStream.mediaStream.getVideoTracks();\n\n if (videoTrack.length > 0 && videoTrack[0].readyState === 'live') {\n return Promise.resolve({...window.latestUserMediaStream, isNew: false});\n }\n\n this.destroyUserMediaStream();\n }\n\n userMediaPromise = new Promise((resolve, reject) => {\n const catchHandler = (err: any): void => {\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n trace.error('getUserMedia error', err);\n reject(err);\n };\n\n try {\n this.getHighestResolutionStream(false, constraints)\n .then((streamResult: MediaRequestSuccessResult) => {\n userMediaPromise = null;\n window.latestUserMediaStream = streamResult;\n window.latestLocalMediaConstraints = cloneDeep(constraints);\n window.latestLocalMediaConstraints.audio = (streamResult.constraint && streamResult.constraint.audio) as boolean;\n\n resolve({...window.latestUserMediaStream, isNew: true});\n })\n .catch(catchHandler);\n } catch (err) {\n catchHandler(err);\n }\n });\n\n return userMediaPromise;\n }\n\n getDesktopMediaStream(constraints: LocalVideoStreamConstraints): Promise<MediaRequestSuccessResult> {\n if (desktopMediaPromise) {\n return desktopMediaPromise;\n }\n\n trace.info('getDesktopMediaStream', constraints);\n\n if (window.latestDesktopMediaStream) {\n const track = window.latestDesktopMediaStream.mediaStream.getVideoTracks();\n\n if (track.length > 0 && track[0].readyState === 'live') {\n //return Promise.resolve();\n return Promise.resolve({...window.latestDesktopMediaStream, isNew: false});\n }\n this.destroyDesktopMediaStream().catch((error: any) => {\n trace.error('Error destroying desktop media stream', error);\n });\n\n }\n\n desktopMediaPromise = new Promise((resolve, reject) => {\n const mediaCatchHandler = (err: any): void => {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = null;\n trace.error('getDisplayMedia error', err);\n reject(err);\n };\n\n try {\n this.getHighestResolutionStream(true, {video: constraints, audio: false})\n .then((streamResult: MediaRequestSuccessResult) => {\n desktopMediaPromise = null;\n window.latestDesktopMediaStream = streamResult;\n\n resolve({...window.latestDesktopMediaStream, isNew: true});\n }).catch(mediaCatchHandler);\n } catch (err) {\n mediaCatchHandler(err);\n }\n });\n\n return desktopMediaPromise;\n }\n\n destroyUserMediaStream(): Promise<void> {\n const streamResult = window.latestUserMediaStream;\n\n userMediaPromise = null;\n window.latestUserMediaStream = null;\n window.latestLocalMediaConstraints = null;\n window.mediaStreamAlreadyReplaced = false;\n\n if (streamResult && streamResult.mediaStream) {\n try {\n streamResult.mediaStream.getTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n\n trace.info('destroyUserMediaStream - stop all tracks');\n } catch (e) {\n trace.info('destroyUserMediaStream - Failed to stop all tracks', e);\n }\n }\n\n return Promise.resolve();\n }\n\n destroyDesktopMediaStream(): Promise<void> {\n const streamResult = window.latestDesktopMediaStream;\n\n window.latestDesktopMediaStream = null;\n desktopMediaPromise = null;\n\n if (streamResult && streamResult.mediaStream) {\n try {\n streamResult.mediaStream.getTracks().forEach((track: MediaStreamTrack) => {\n track.stop();\n });\n\n trace.info('destroyDesktopMediaStream - stop all tracks');\n } catch (e) {\n trace.info('destroyDesktopMediaStream - Failed to stop all tracks', e);\n }\n }\n\n return Promise.resolve();\n }\n\n clearAllStreams(): Promise<void> {\n trace.info('LocalStreamManager Clearing all streams');\n\n return Promise.all([\n this.destroyDesktopMediaStream(),\n this.destroyUserMediaStream()\n ]).then(() => undefined);\n }\n\n private getHighestResolutionStream(isDesktopMedia: boolean, constraints?: LocalMediaConstraints): Promise<MediaRequestSuccessResult> {\n const constraintsCandidates = this.getParsedConstraints(isDesktopMedia, constraints);\n\n trace.info('getHighestResolutionStream - constraintsCandidates:', constraintsCandidates);\n\n if (constraintsCandidates.length === 0) {\n return Promise.reject(new Error('No constraints to retrieve the stream'));\n }\n\n return new Promise((resolve, reject) => {\n let lastSuccessfulResult: Nullable<MediaRequestSuccessResult> = null;\n let lastFailedResult: Nullable<MediaRequestFailResult> = null;\n let isStreamRequestFulfilled = false;\n\n (Promise as any).reduce(constraintsCandidates, (total: any, candidate: MediaStreamConstraints) => {\n if (isStreamRequestFulfilled) {\n return;\n }\n\n const constraintType = get(constraints, 'video.videoResolution.constraintType') || get(constraints, 'video.videoResolution[0].constraintType');\n\n return this.getStreamPromiseByParsedConstraints(candidate, isDesktopMedia)\n .then((stream: MediaStream) => {\n lastSuccessfulResult = {\n mediaStream: stream,\n constraint: candidate,\n constraintType,\n isNew: true\n };\n trace.info('getHighestResolutionStream Success', lastSuccessfulResult);\n isStreamRequestFulfilled = true;\n resolve(lastSuccessfulResult);\n })\n .catch((failResult: MediaRequestFailResult) => {\n lastFailedResult = failResult;\n\n if (lastFailedResult.errorCode === MediaRequestErrorCode.PermissionDenied) {\n isStreamRequestFulfilled = true;\n reject(lastFailedResult);\n }\n });\n }, 0)\n .then(() => {\n if (!isStreamRequestFulfilled) {\n if (!lastFailedResult) {\n lastFailedResult = {\n errorCode: MediaRequestErrorCode.GeneralError,\n message: 'Suitable stream cannot be created'\n };\n }\n reject(lastFailedResult);\n }\n });\n });\n }\n\n private getUserMediaStreamMediaDevice(constraints: MediaStreamConstraints, isDesktopMedia: boolean) {\n let streamPromise = null;\n\n if (!isDesktopMedia) {\n streamPromise = navigator.mediaDevices.getUserMedia(constraints);\n } else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n streamPromise = navigator.mediaDevices.getDisplayMedia\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n ? navigator.mediaDevices.getDisplayMedia(constraints)\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n : navigator.getDisplayMedia(constraints);\n }\n\n return streamPromise;\n }\n\n // eslint-disable-next-line consistent-return,@typescript-eslint/ban-ts-comment\n // @ts-ignore\n private getStreamPromiseByParsedConstraints(constraints: MediaStreamConstraints, isDesktopMedia: boolean): Promise<MediaStream> {\n trace.info('getStreamPromiseByParsedConstraints', constraints);\n\n try {\n return this.getUserMediaStreamMediaDevice(constraints, isDesktopMedia).catch((err: any) => {\n let streamPromise = null;\n\n trace.info('getStreamPromiseByParsedConstraints - get user stream error', err.name);\n\n // Android (Galaxy esp.) have a bug that when using facingMode it might cause NotReadableError. So\n // we should try again but without facingMode. The exception to the rule is when we don't have specific\n // device to use (like in IOS13 bug, as can be seen in MediaServiceBase.ts), in that case, we might end\n // up using the front camera, which is a privacy concern and the preference is to fallback from video\n if (err && (err.name === 'NotReadableError') && get(constraints, 'video.facingMode') &&\n get(constraints, 'video.deviceId')) {\n\n const newConstraints = constraints;\n\n trace.info(`getStreamPromiseByParsedConstraints - NotReadableError - Failed to get video user media stream with facingMode=${get(constraints, 'video.facingMode')}`, err.name);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete newConstraints.video.facingMode;\n ((newConstraints.video as MediaTrackConstraints).deviceId as ConstrainDOMStringParameters) = {\n exact: (constraints.video as MediaTrackConstraints).deviceId\n } as any as ConstrainDOMStringParameters;\n\n streamPromise = this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n } else if (err && err.name && constraints.audio && !constraints.video) {\n trace.info('getStreamPromiseByParsedConstraints - audioStreamFailed - Failed to get audio user media stream', err.name);\n\n return this.parseMediaErrorThenThrow({name: 'audioStreamFailed'});\n } else if (err && err.name && constraints.audio) {\n const newConstraints = constraints;\n\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video and audio user media stream, try to get video media stream only', err.name);\n\n newConstraints.audio = false;\n streamPromise = this.getStreamPromiseByParsedConstraints(newConstraints, isDesktopMedia);\n } else if (err && !streamPromise) {\n trace.info('getStreamPromiseByParsedConstraints - Failed to get video user media stream', err && err.name);\n\n streamPromise = Promise.reject(err);\n }\n\n return streamPromise && streamPromise.catch(this.parseMediaErrorThenThrow);\n });\n } catch (e) {\n this.parseMediaErrorThenThrow(e);\n }\n }\n\n setGroupedDevices(groupedDevices: {video: MediaDeviceInfo[]; audio: MediaDeviceInfo[]}) {\n trace.info('setGroupedDevices', groupedDevices);\n this._groupedDevices = {video: groupedDevices.video\n ? {[CameraTypes.BACK]: last(groupedDevices.video), [CameraTypes.FRONT]: first(groupedDevices.video)}\n : null,\n audio: last(groupedDevices.audio) || null,\n camerasCount: groupedDevices.video.length};\n }\n\n private getParsedConstraints(isDesktopMedia: boolean, streamConstraints?: LocalMediaConstraints): MediaStreamConstraints[] {\n const constraintCandidates: MediaStreamConstraints[] = [];\n\n //TODO - Alex: need to understand which constraints not compatible with screen share\n if (isDesktopMedia) {\n return [{video: true}];\n }\n\n if (!streamConstraints) {\n return constraintCandidates;\n }\n\n const baseConstraints: MediaStreamConstraints = {};\n\n baseConstraints.audio = typeof streamConstraints.audio === 'boolean' ? streamConstraints.audio : undefined;\n\n if (!streamConstraints.video) {\n return [baseConstraints];\n }\n\n const cameraType = (streamConstraints.video !== 'boolean') &&\n (streamConstraints.video as LocalVideoStreamConstraints).videoSourceType;\n\n baseConstraints.video = {\n facingMode: cameraType && cameraType === LocalVideoSourceType.CAMERA_FRONT\n ? 'user'\n : 'environment',\n frameRate: {ideal: 15, max: 30}\n };\n\n const deviceId = get(this._groupedDevices, `video.${cameraType === LocalVideoSourceType.CAMERA_FRONT\n ? CameraTypes.FRONT\n : CameraTypes.BACK}.deviceId`);\n\n if (deviceId) {\n baseConstraints.video.deviceId = deviceId;\n\n if (this._groupedDevices.camerasCount > 1) {\n baseConstraints.video.facingMode = {exact: baseConstraints.video.facingMode} as any as ConstrainDOMStringParameters;\n }\n }\n\n const assignConstraint = (videoResolution: VideoStreamResolution): void => {\n const [width, height] = videoResolution.resolution.split('x');\n const constraintCandidate = assign({}, baseConstraints);\n\n constraintCandidate.video = assign({}, baseConstraints.video, {\n width: _constraintByType(width, videoResolution.constraintType),\n height: _constraintByType(height, videoResolution.constraintType)\n });\n constraintCandidates.push(constraintCandidate);\n };\n\n if ((baseConstraints.video && typeof streamConstraints.video === 'boolean') ||\n !((streamConstraints.video as LocalVideoStreamConstraints).videoResolution instanceof Array)) {\n\n const defaultResolution: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n };\n\n assignConstraint(defaultResolution);\n\n return constraintCandidates;\n }\n\n (streamConstraints.video as any).videoResolution.forEach(assignConstraint);\n\n return constraintCandidates;\n }\n\n private parseMediaErrorThenThrow(error: any): MediaRequestFailResult {\n if (error && error.errorCode) {\n throw error;\n }\n\n trace.error('Get media stream error.', error);\n const errorName = error && error.name ? error.name : '';\n\n const permissionErrorNames = [\n 'NotAllowedError',\n 'PermissionDismissedError',\n 'PermissionDeniedError'\n\n ];\n\n // const generalError = [\n // 'NotFoundError',\n // 'DevicesNotFoundError',\n // 'NotReadableError',\n // 'TrackStartError'\n // ];\n\n const constraintsErrors = [\n 'OverconstrainedError',\n 'ConstraintNotSatisfiedError'\n\n ];\n\n const isErrorOfType = (errorsArr: string[]) => errorsArr.filter((err: string) => err === errorName).length > 0;\n\n if (isErrorOfType(permissionErrorNames)) {\n throw {errorCode: MediaRequestErrorCode.PermissionDenied, message: errorName};\n }\n\n if (isErrorOfType(constraintsErrors)) {\n throw {errorCode: MediaRequestErrorCode.Overconstrained, message: errorName};\n }\n\n throw {errorCode: MediaRequestErrorCode.GeneralError, message: errorName};\n }\n}\n\nfunction _constraintByType(value: any, type: ConstraintType): any {\n switch (type) {\n case ConstraintType.MIN:\n return {min: value};\n default:\n return {ideal: value};\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
+ import { VideoStreamResolution } from './MediaContracts';
1
2
  export declare enum LocalVideoSourceType {
2
3
  CAMERA = "CAMERA",
3
- CAMERA_FORNT = "CAMERA_FRONT",
4
+ CAMERA_FRONT = "CAMERA_FRONT",
4
5
  DESKTOP_SHARE = "DESKTOP_SHARE"
5
6
  }
6
7
  export declare enum ConstraintType {
@@ -8,12 +9,18 @@ export declare enum ConstraintType {
8
9
  IDEAL = "ideal"
9
10
  }
10
11
  export declare enum CameraTypes {
11
- CUSTOMER_FRONT = "customerFront",
12
- CUSTOMER_BACK = "customerBack"
12
+ FRONT = "front",
13
+ BACK = "back",
14
+ NONE = "none"
15
+ }
16
+ export declare enum MultiPartyCameraTypes {
17
+ FRONT = "front",
18
+ BACK = "back"
13
19
  }
14
20
  export declare enum MediaServiceType {
15
21
  OPENTOK = "OPENTOK",
16
- TURNSERVER = "TURN_SERVER"
22
+ TURNSERVER = "TURN_SERVER",
23
+ MEDIASERVER = "MEDIA_SERVER"
17
24
  }
18
25
  export declare enum SessionClientRole {
19
26
  AGENT = "AGENT",
@@ -35,6 +42,7 @@ export declare enum KnownMediaStreamKind {
35
42
  }
36
43
  export declare enum KnownMediaStream {
37
44
  AGENT_AUDIO_STREAM = "DASHBOARD_AUDIO_STREAM",
45
+ OBSERVER_AUDIO_STREAM = "OBSERVER_AUDIO_STREAM",
38
46
  USER_AUDIO_STREAM = "MOBILE_CLIENT_AUDIO_STREAM",
39
47
  USER_VIDEO_STREAM = "MOBILE_CLIENT_VIDEO_STREAM",
40
48
  USER_SCREEN_SHARE_STREAM = "USER_SCREEN_SHARE_STREAM"
@@ -58,3 +66,5 @@ export declare const DEFAULT_VIDEO_RESOLUTION = "640x480";
58
66
  export declare const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;
59
67
  export declare const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;
60
68
  export declare const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;
69
+ export declare const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution;
70
+ export declare const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MediaConstants.ts"],"names":[],"mappings":"AAAA,oBAAY,oBAAoB;IAC5B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAClC;AAED,oBAAY,cAAc;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,WAAW;IACnB,cAAc,kBAAkB;IAChC,aAAa,iBAAiB;CACjC;AAED,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,UAAU,gBAAgB;CAC7B;AAED,oBAAY,iBAAiB;IACzB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED,oBAAY,iBAAiB;IACzB,SAAS,cAAc;IACvB,KAAK,eAAe;CACvB;AAED,oBAAY,qBAAqB;IAC7B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;CAChC;AAED,oBAAY,oBAAoB;IAC5B,KAAK,UAAU;IACf,KAAK,UAAU;CAClB;AAED,oBAAY,gBAAgB;IACxB,kBAAkB,2BAA2B;IAC7C,iBAAiB,+BAA+B;IAChD,iBAAiB,+BAA+B;IAChD,wBAAwB,6BAA6B;CACxD;AAED,oBAAY,4BAA4B;IAEpC,gBAAgB,qBAAqB;IACrC,yBAAyB,8BAA8B;IACvD,gCAAgC,qCAAqC;IACrE,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,gBAAgB,qBAAqB;IACrC,0BAA0B,+BAA+B;CAC5D;AAED,oBAAY,2BAA2B;IACnC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CACpC;AAED,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,yCAAyC,KAAK,CAAC;AAC5D,eAAO,MAAM,kCAAkC,KAAK,CAAC","file":"MediaConstants.d.ts","sourcesContent":["export enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FORNT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n CUSTOMER_FRONT = 'customerFront',\n CUSTOMER_BACK = 'customerBack'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n"]}
1
+ {"version":3,"sources":["../src/MediaConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAEvD,oBAAY,oBAAoB;IAC5B,MAAM,WAAW;IACjB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAClC;AAED,oBAAY,cAAc;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;CAClB;AAED,oBAAY,WAAW;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;CAChB;AAED,oBAAY,qBAAqB;IAC7B,KAAK,UAAoB;IACzB,IAAI,SAAmB;CAC1B;AAED,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;CAC/B;AAED,oBAAY,iBAAiB;IACzB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;CAChB;AAED,oBAAY,iBAAiB;IACzB,SAAS,cAAc;IACvB,KAAK,eAAe;CACvB;AAED,oBAAY,qBAAqB;IAC7B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;CAChC;AAED,oBAAY,oBAAoB;IAC5B,KAAK,UAAU;IACf,KAAK,UAAU;CAClB;AAED,oBAAY,gBAAgB;IACxB,kBAAkB,2BAA2B;IAC7C,qBAAqB,0BAA0B;IAC/C,iBAAiB,+BAA+B;IAChD,iBAAiB,+BAA+B;IAChD,wBAAwB,6BAA6B;CACxD;AAED,oBAAY,4BAA4B;IAEpC,gBAAgB,qBAAqB;IACrC,yBAAyB,8BAA8B;IACvD,gCAAgC,qCAAqC;IACrE,wBAAwB,6BAA6B;IACrD,wBAAwB,6BAA6B;IACrD,gBAAgB,qBAAqB;IACrC,0BAA0B,+BAA+B;CAC5D;AAED,oBAAY,2BAA2B;IACnC,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;CACpC;AAED,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAClE,eAAO,MAAM,yCAAyC,KAAK,CAAC;AAC5D,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAErD,eAAO,MAAM,yBAAyB,EAAE,qBAGvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,qBAAqB,EAIhE,CAAC","file":"MediaConstants.d.ts","sourcesContent":["import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back',\n NONE = 'none'\n}\n\nexport enum MultiPartyCameraTypes {\n FRONT = CameraTypes.FRONT,\n BACK = CameraTypes.BACK\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n OBSERVER_AUDIO_STREAM = 'OBSERVER_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}
@@ -1,78 +1,123 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", { value: true });
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.POSSIBLE_LOOPBACK_RESOLUTIONS = exports.DEFAULT_VIDEO_CONSTRAINTS = exports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = exports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = exports.DEFAULT_VIDEO_CONSTRAINT_TYPE = exports.DEFAULT_VIDEO_RESOLUTION = exports.MediaStreamUnregisterReason = exports.MediaSessionDisconnectReason = exports.KnownMediaStream = exports.KnownMediaStreamKind = exports.MediaRequestErrorCode = exports.SessionClientType = exports.SessionClientRole = exports.MediaServiceType = exports.MultiPartyCameraTypes = exports.CameraTypes = exports.ConstraintType = exports.LocalVideoSourceType = void 0;
4
7
  var LocalVideoSourceType;
8
+
5
9
  (function (LocalVideoSourceType) {
6
- LocalVideoSourceType["CAMERA"] = "CAMERA";
7
- LocalVideoSourceType["CAMERA_FORNT"] = "CAMERA_FRONT";
8
- LocalVideoSourceType["DESKTOP_SHARE"] = "DESKTOP_SHARE";
10
+ LocalVideoSourceType["CAMERA"] = "CAMERA";
11
+ LocalVideoSourceType["CAMERA_FRONT"] = "CAMERA_FRONT";
12
+ LocalVideoSourceType["DESKTOP_SHARE"] = "DESKTOP_SHARE";
9
13
  })(LocalVideoSourceType = exports.LocalVideoSourceType || (exports.LocalVideoSourceType = {}));
14
+
10
15
  var ConstraintType;
16
+
11
17
  (function (ConstraintType) {
12
- ConstraintType["MIN"] = "min";
13
- ConstraintType["IDEAL"] = "ideal";
18
+ ConstraintType["MIN"] = "min";
19
+ ConstraintType["IDEAL"] = "ideal";
14
20
  })(ConstraintType = exports.ConstraintType || (exports.ConstraintType = {}));
21
+
15
22
  var CameraTypes;
23
+
16
24
  (function (CameraTypes) {
17
- CameraTypes["CUSTOMER_FRONT"] = "customerFront";
18
- CameraTypes["CUSTOMER_BACK"] = "customerBack";
25
+ CameraTypes["FRONT"] = "front";
26
+ CameraTypes["BACK"] = "back";
27
+ CameraTypes["NONE"] = "none";
19
28
  })(CameraTypes = exports.CameraTypes || (exports.CameraTypes = {}));
29
+
30
+ var MultiPartyCameraTypes;
31
+
32
+ (function (MultiPartyCameraTypes) {
33
+ MultiPartyCameraTypes["FRONT"] = "front";
34
+ MultiPartyCameraTypes["BACK"] = "back";
35
+ })(MultiPartyCameraTypes = exports.MultiPartyCameraTypes || (exports.MultiPartyCameraTypes = {}));
36
+
20
37
  var MediaServiceType;
38
+
21
39
  (function (MediaServiceType) {
22
- MediaServiceType["OPENTOK"] = "OPENTOK";
23
- MediaServiceType["TURNSERVER"] = "TURN_SERVER";
40
+ MediaServiceType["OPENTOK"] = "OPENTOK";
41
+ MediaServiceType["TURNSERVER"] = "TURN_SERVER";
42
+ MediaServiceType["MEDIASERVER"] = "MEDIA_SERVER";
24
43
  })(MediaServiceType = exports.MediaServiceType || (exports.MediaServiceType = {}));
44
+
25
45
  var SessionClientRole;
46
+
26
47
  (function (SessionClientRole) {
27
- SessionClientRole["AGENT"] = "AGENT";
28
- SessionClientRole["OBSERVER"] = "OBSERVER";
29
- SessionClientRole["USER"] = "USER";
48
+ SessionClientRole["AGENT"] = "AGENT";
49
+ SessionClientRole["OBSERVER"] = "OBSERVER";
50
+ SessionClientRole["USER"] = "USER";
30
51
  })(SessionClientRole = exports.SessionClientRole || (exports.SessionClientRole = {}));
52
+
31
53
  var SessionClientType;
54
+
32
55
  (function (SessionClientType) {
33
- SessionClientType["INITIATOR"] = "publisher";
34
- SessionClientType["GUEST"] = "subscriber";
56
+ SessionClientType["INITIATOR"] = "publisher";
57
+ SessionClientType["GUEST"] = "subscriber";
35
58
  })(SessionClientType = exports.SessionClientType || (exports.SessionClientType = {}));
59
+
36
60
  var MediaRequestErrorCode;
61
+
37
62
  (function (MediaRequestErrorCode) {
38
- MediaRequestErrorCode["Overconstrained"] = "Overconstrained";
39
- MediaRequestErrorCode["PermissionDenied"] = "PermissionDenied";
40
- MediaRequestErrorCode["GeneralError"] = "GeneralError";
63
+ MediaRequestErrorCode["Overconstrained"] = "Overconstrained";
64
+ MediaRequestErrorCode["PermissionDenied"] = "PermissionDenied";
65
+ MediaRequestErrorCode["GeneralError"] = "GeneralError";
41
66
  })(MediaRequestErrorCode = exports.MediaRequestErrorCode || (exports.MediaRequestErrorCode = {}));
67
+
42
68
  var KnownMediaStreamKind;
69
+
43
70
  (function (KnownMediaStreamKind) {
44
- KnownMediaStreamKind["Audio"] = "audio";
45
- KnownMediaStreamKind["Video"] = "video";
71
+ KnownMediaStreamKind["Audio"] = "audio";
72
+ KnownMediaStreamKind["Video"] = "video";
46
73
  })(KnownMediaStreamKind = exports.KnownMediaStreamKind || (exports.KnownMediaStreamKind = {}));
74
+
47
75
  var KnownMediaStream;
76
+
48
77
  (function (KnownMediaStream) {
49
- KnownMediaStream["AGENT_AUDIO_STREAM"] = "DASHBOARD_AUDIO_STREAM";
50
- KnownMediaStream["USER_AUDIO_STREAM"] = "MOBILE_CLIENT_AUDIO_STREAM";
51
- KnownMediaStream["USER_VIDEO_STREAM"] = "MOBILE_CLIENT_VIDEO_STREAM";
52
- KnownMediaStream["USER_SCREEN_SHARE_STREAM"] = "USER_SCREEN_SHARE_STREAM";
78
+ KnownMediaStream["AGENT_AUDIO_STREAM"] = "DASHBOARD_AUDIO_STREAM";
79
+ KnownMediaStream["OBSERVER_AUDIO_STREAM"] = "OBSERVER_AUDIO_STREAM";
80
+ KnownMediaStream["USER_AUDIO_STREAM"] = "MOBILE_CLIENT_AUDIO_STREAM";
81
+ KnownMediaStream["USER_VIDEO_STREAM"] = "MOBILE_CLIENT_VIDEO_STREAM";
82
+ KnownMediaStream["USER_SCREEN_SHARE_STREAM"] = "USER_SCREEN_SHARE_STREAM";
53
83
  })(KnownMediaStream = exports.KnownMediaStream || (exports.KnownMediaStream = {}));
84
+
54
85
  var MediaSessionDisconnectReason;
86
+
55
87
  (function (MediaSessionDisconnectReason) {
56
- //Raised on initiator peer when guest peer was disconnected from signaling
57
- MediaSessionDisconnectReason["PeerDisconnected"] = "PeerDisconnected";
58
- MediaSessionDisconnectReason["PeerConnectionInterrupted"] = "PeerConnectionInterrupted";
59
- MediaSessionDisconnectReason["PeerConnectionStateChangeTimeout"] = "PeerConnectionStateChangeTimeout";
60
- MediaSessionDisconnectReason["InitiatorPeerReconnected"] = "InitiatorPeerReconnected";
61
- MediaSessionDisconnectReason["PublishedStreamDestroyed"] = "PublishedStreamDestroyed";
62
- MediaSessionDisconnectReason["ForcedByConsumer"] = "ForcedByConsumer";
63
- MediaSessionDisconnectReason["SignalingChannelDisconnect"] = "SignalingChannelDisconnect";
88
+ //Raised on initiator peer when guest peer was disconnected from signaling
89
+ MediaSessionDisconnectReason["PeerDisconnected"] = "PeerDisconnected";
90
+ MediaSessionDisconnectReason["PeerConnectionInterrupted"] = "PeerConnectionInterrupted";
91
+ MediaSessionDisconnectReason["PeerConnectionStateChangeTimeout"] = "PeerConnectionStateChangeTimeout";
92
+ MediaSessionDisconnectReason["InitiatorPeerReconnected"] = "InitiatorPeerReconnected";
93
+ MediaSessionDisconnectReason["PublishedStreamDestroyed"] = "PublishedStreamDestroyed";
94
+ MediaSessionDisconnectReason["ForcedByConsumer"] = "ForcedByConsumer";
95
+ MediaSessionDisconnectReason["SignalingChannelDisconnect"] = "SignalingChannelDisconnect";
64
96
  })(MediaSessionDisconnectReason = exports.MediaSessionDisconnectReason || (exports.MediaSessionDisconnectReason = {}));
97
+
65
98
  var MediaStreamUnregisterReason;
99
+
66
100
  (function (MediaStreamUnregisterReason) {
67
- MediaStreamUnregisterReason["NativeEvent"] = "NativeEvent";
68
- MediaStreamUnregisterReason["ReplacingStream"] = "ReplacingStream";
69
- MediaStreamUnregisterReason["ClosedRemotely"] = "ClosedRemotely";
70
- MediaStreamUnregisterReason["ServiceCleanUp"] = "ServiceCleanUp";
101
+ MediaStreamUnregisterReason["NativeEvent"] = "NativeEvent";
102
+ MediaStreamUnregisterReason["ReplacingStream"] = "ReplacingStream";
103
+ MediaStreamUnregisterReason["ClosedRemotely"] = "ClosedRemotely";
104
+ MediaStreamUnregisterReason["ServiceCleanUp"] = "ServiceCleanUp";
71
105
  })(MediaStreamUnregisterReason = exports.MediaStreamUnregisterReason || (exports.MediaStreamUnregisterReason = {}));
106
+
72
107
  exports.DEFAULT_VIDEO_RESOLUTION = '640x480';
73
108
  exports.DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;
74
109
  exports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;
75
110
  exports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;
76
-
77
- //# sourceMappingURL=MediaConstants.js.map
111
+ exports.DEFAULT_VIDEO_CONSTRAINTS = {
112
+ resolution: exports.DEFAULT_VIDEO_RESOLUTION,
113
+ constraintType: exports.DEFAULT_VIDEO_CONSTRAINT_TYPE
114
+ };
115
+ exports.POSSIBLE_LOOPBACK_RESOLUTIONS = [{
116
+ resolution: '1920x1080',
117
+ constraintType: ConstraintType.MIN
118
+ }, {
119
+ resolution: '1280x720',
120
+ constraintType: ConstraintType.MIN
121
+ }, exports.DEFAULT_VIDEO_CONSTRAINTS // fallback
122
+ ];
78
123
  //# sourceMappingURL=MediaConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["MediaConstants.js","../src/MediaConstants.ts"],"names":["Object","defineProperty","exports","value","LocalVideoSourceType","ConstraintType","CameraTypes","MediaServiceType","SessionClientRole","SessionClientType","MediaRequestErrorCode","KnownMediaStreamKind","KnownMediaStream","MediaSessionDisconnectReason","MediaStreamUnregisterReason","DEFAULT_VIDEO_RESOLUTION","DEFAULT_VIDEO_CONSTRAINT_TYPE","IDEAL","DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS","DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS"],"mappings":"AAAA;;AACAA,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;ACDA,IAAYC,oBAAZ;AAAA,CAAA,UAAYA,oBAAZ,EAAgC;AAC5BA,yBAAA,QAAA,IAAA,QAAA;AACAA,yBAAA,cAAA,IAAA,cAAA;AACAA,yBAAA,eAAA,IAAA,eAAA;AACH,CAJD,EAAYA,uBAAAF,QAAAE,oBAAA,KAAAF,QAAAE,oBAAA,GAAoB,EAApB,CAAZ;AAMA,IAAYC,cAAZ;AAAA,CAAA,UAAYA,cAAZ,EAA0B;AACtBA,mBAAA,KAAA,IAAA,KAAA;AACAA,mBAAA,OAAA,IAAA,OAAA;AACH,CAHD,EAAYA,iBAAAH,QAAAG,cAAA,KAAAH,QAAAG,cAAA,GAAc,EAAd,CAAZ;AAKA,IAAYC,WAAZ;AAAA,CAAA,UAAYA,WAAZ,EAAuB;AACnBA,gBAAA,gBAAA,IAAA,eAAA;AACAA,gBAAA,eAAA,IAAA,cAAA;AACH,CAHD,EAAYA,cAAAJ,QAAAI,WAAA,KAAAJ,QAAAI,WAAA,GAAW,EAAX,CAAZ;AAKA,IAAYC,gBAAZ;AAAA,CAAA,UAAYA,gBAAZ,EAA4B;AACxBA,qBAAA,SAAA,IAAA,SAAA;AACAA,qBAAA,YAAA,IAAA,aAAA;AACH,CAHD,EAAYA,mBAAAL,QAAAK,gBAAA,KAAAL,QAAAK,gBAAA,GAAgB,EAAhB,CAAZ;AAKA,IAAYC,iBAAZ;AAAA,CAAA,UAAYA,iBAAZ,EAA6B;AACzBA,sBAAA,OAAA,IAAA,OAAA;AACAA,sBAAA,UAAA,IAAA,UAAA;AACAA,sBAAA,MAAA,IAAA,MAAA;AACH,CAJD,EAAYA,oBAAAN,QAAAM,iBAAA,KAAAN,QAAAM,iBAAA,GAAiB,EAAjB,CAAZ;AAMA,IAAYC,iBAAZ;AAAA,CAAA,UAAYA,iBAAZ,EAA6B;AACzBA,sBAAA,WAAA,IAAA,WAAA;AACAA,sBAAA,OAAA,IAAA,YAAA;AACH,CAHD,EAAYA,oBAAAP,QAAAO,iBAAA,KAAAP,QAAAO,iBAAA,GAAiB,EAAjB,CAAZ;AAKA,IAAYC,qBAAZ;AAAA,CAAA,UAAYA,qBAAZ,EAAiC;AAC7BA,0BAAA,iBAAA,IAAA,iBAAA;AACAA,0BAAA,kBAAA,IAAA,kBAAA;AACAA,0BAAA,cAAA,IAAA,cAAA;AACH,CAJD,EAAYA,wBAAAR,QAAAQ,qBAAA,KAAAR,QAAAQ,qBAAA,GAAqB,EAArB,CAAZ;AAMA,IAAYC,oBAAZ;AAAA,CAAA,UAAYA,oBAAZ,EAAgC;AAC5BA,yBAAA,OAAA,IAAA,OAAA;AACAA,yBAAA,OAAA,IAAA,OAAA;AACH,CAHD,EAAYA,uBAAAT,QAAAS,oBAAA,KAAAT,QAAAS,oBAAA,GAAoB,EAApB,CAAZ;AAKA,IAAYC,gBAAZ;AAAA,CAAA,UAAYA,gBAAZ,EAA4B;AACxBA,qBAAA,oBAAA,IAAA,wBAAA;AACAA,qBAAA,mBAAA,IAAA,4BAAA;AACAA,qBAAA,mBAAA,IAAA,4BAAA;AACAA,qBAAA,0BAAA,IAAA,0BAAA;AACH,CALD,EAAYA,mBAAAV,QAAAU,gBAAA,KAAAV,QAAAU,gBAAA,GAAgB,EAAhB,CAAZ;AAOA,IAAYC,4BAAZ;AAAA,CAAA,UAAYA,4BAAZ,EAAwC;AACpC;AACAA,iCAAA,kBAAA,IAAA,kBAAA;AACAA,iCAAA,2BAAA,IAAA,2BAAA;AACAA,iCAAA,kCAAA,IAAA,kCAAA;AACAA,iCAAA,0BAAA,IAAA,0BAAA;AACAA,iCAAA,0BAAA,IAAA,0BAAA;AACAA,iCAAA,kBAAA,IAAA,kBAAA;AACAA,iCAAA,4BAAA,IAAA,4BAAA;AACH,CATD,EAAYA,+BAAAX,QAAAW,4BAAA,KAAAX,QAAAW,4BAAA,GAA4B,EAA5B,CAAZ;AAWA,IAAYC,2BAAZ;AAAA,CAAA,UAAYA,2BAAZ,EAAuC;AACnCA,gCAAA,aAAA,IAAA,aAAA;AACAA,gCAAA,iBAAA,IAAA,iBAAA;AACAA,gCAAA,gBAAA,IAAA,gBAAA;AACAA,gCAAA,gBAAA,IAAA,gBAAA;AACH,CALD,EAAYA,8BAAAZ,QAAAY,2BAAA,KAAAZ,QAAAY,2BAAA,GAA2B,EAA3B,CAAZ;AAOaZ,QAAAa,wBAAA,GAA2B,SAA3B;AACAb,QAAAc,6BAAA,GAAgCX,eAAeY,KAA/C;AACAf,QAAAgB,yCAAA,GAA4C,EAA5C;AACAhB,QAAAiB,kCAAA,GAAqC,EAArC;;ADIb","file":"MediaConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LocalVideoSourceType;\n(function (LocalVideoSourceType) {\n LocalVideoSourceType[\"CAMERA\"] = \"CAMERA\";\n LocalVideoSourceType[\"CAMERA_FORNT\"] = \"CAMERA_FRONT\";\n LocalVideoSourceType[\"DESKTOP_SHARE\"] = \"DESKTOP_SHARE\";\n})(LocalVideoSourceType = exports.LocalVideoSourceType || (exports.LocalVideoSourceType = {}));\nvar ConstraintType;\n(function (ConstraintType) {\n ConstraintType[\"MIN\"] = \"min\";\n ConstraintType[\"IDEAL\"] = \"ideal\";\n})(ConstraintType = exports.ConstraintType || (exports.ConstraintType = {}));\nvar CameraTypes;\n(function (CameraTypes) {\n CameraTypes[\"CUSTOMER_FRONT\"] = \"customerFront\";\n CameraTypes[\"CUSTOMER_BACK\"] = \"customerBack\";\n})(CameraTypes = exports.CameraTypes || (exports.CameraTypes = {}));\nvar MediaServiceType;\n(function (MediaServiceType) {\n MediaServiceType[\"OPENTOK\"] = \"OPENTOK\";\n MediaServiceType[\"TURNSERVER\"] = \"TURN_SERVER\";\n})(MediaServiceType = exports.MediaServiceType || (exports.MediaServiceType = {}));\nvar SessionClientRole;\n(function (SessionClientRole) {\n SessionClientRole[\"AGENT\"] = \"AGENT\";\n SessionClientRole[\"OBSERVER\"] = \"OBSERVER\";\n SessionClientRole[\"USER\"] = \"USER\";\n})(SessionClientRole = exports.SessionClientRole || (exports.SessionClientRole = {}));\nvar SessionClientType;\n(function (SessionClientType) {\n SessionClientType[\"INITIATOR\"] = \"publisher\";\n SessionClientType[\"GUEST\"] = \"subscriber\";\n})(SessionClientType = exports.SessionClientType || (exports.SessionClientType = {}));\nvar MediaRequestErrorCode;\n(function (MediaRequestErrorCode) {\n MediaRequestErrorCode[\"Overconstrained\"] = \"Overconstrained\";\n MediaRequestErrorCode[\"PermissionDenied\"] = \"PermissionDenied\";\n MediaRequestErrorCode[\"GeneralError\"] = \"GeneralError\";\n})(MediaRequestErrorCode = exports.MediaRequestErrorCode || (exports.MediaRequestErrorCode = {}));\nvar KnownMediaStreamKind;\n(function (KnownMediaStreamKind) {\n KnownMediaStreamKind[\"Audio\"] = \"audio\";\n KnownMediaStreamKind[\"Video\"] = \"video\";\n})(KnownMediaStreamKind = exports.KnownMediaStreamKind || (exports.KnownMediaStreamKind = {}));\nvar KnownMediaStream;\n(function (KnownMediaStream) {\n KnownMediaStream[\"AGENT_AUDIO_STREAM\"] = \"DASHBOARD_AUDIO_STREAM\";\n KnownMediaStream[\"USER_AUDIO_STREAM\"] = \"MOBILE_CLIENT_AUDIO_STREAM\";\n KnownMediaStream[\"USER_VIDEO_STREAM\"] = \"MOBILE_CLIENT_VIDEO_STREAM\";\n KnownMediaStream[\"USER_SCREEN_SHARE_STREAM\"] = \"USER_SCREEN_SHARE_STREAM\";\n})(KnownMediaStream = exports.KnownMediaStream || (exports.KnownMediaStream = {}));\nvar MediaSessionDisconnectReason;\n(function (MediaSessionDisconnectReason) {\n //Raised on initiator peer when guest peer was disconnected from signaling\n MediaSessionDisconnectReason[\"PeerDisconnected\"] = \"PeerDisconnected\";\n MediaSessionDisconnectReason[\"PeerConnectionInterrupted\"] = \"PeerConnectionInterrupted\";\n MediaSessionDisconnectReason[\"PeerConnectionStateChangeTimeout\"] = \"PeerConnectionStateChangeTimeout\";\n MediaSessionDisconnectReason[\"InitiatorPeerReconnected\"] = \"InitiatorPeerReconnected\";\n MediaSessionDisconnectReason[\"PublishedStreamDestroyed\"] = \"PublishedStreamDestroyed\";\n MediaSessionDisconnectReason[\"ForcedByConsumer\"] = \"ForcedByConsumer\";\n MediaSessionDisconnectReason[\"SignalingChannelDisconnect\"] = \"SignalingChannelDisconnect\";\n})(MediaSessionDisconnectReason = exports.MediaSessionDisconnectReason || (exports.MediaSessionDisconnectReason = {}));\nvar MediaStreamUnregisterReason;\n(function (MediaStreamUnregisterReason) {\n MediaStreamUnregisterReason[\"NativeEvent\"] = \"NativeEvent\";\n MediaStreamUnregisterReason[\"ReplacingStream\"] = \"ReplacingStream\";\n MediaStreamUnregisterReason[\"ClosedRemotely\"] = \"ClosedRemotely\";\n MediaStreamUnregisterReason[\"ServiceCleanUp\"] = \"ServiceCleanUp\";\n})(MediaStreamUnregisterReason = exports.MediaStreamUnregisterReason || (exports.MediaStreamUnregisterReason = {}));\nexports.DEFAULT_VIDEO_RESOLUTION = '640x480';\nexports.DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\n//# sourceMappingURL=MediaConstants.js.map\n","export enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FORNT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n CUSTOMER_FRONT = 'customerFront',\n CUSTOMER_BACK = 'customerBack'\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n"]}
1
+ {"version":3,"sources":["MediaConstants.js","../src/MediaConstants.ts"],"names":["Object","defineProperty","exports","value","POSSIBLE_LOOPBACK_RESOLUTIONS","DEFAULT_VIDEO_CONSTRAINTS","DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS","DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS","DEFAULT_VIDEO_CONSTRAINT_TYPE","DEFAULT_VIDEO_RESOLUTION","MediaStreamUnregisterReason","MediaSessionDisconnectReason","KnownMediaStream","KnownMediaStreamKind","MediaRequestErrorCode","SessionClientType","SessionClientRole","MediaServiceType","MultiPartyCameraTypes","CameraTypes","ConstraintType","LocalVideoSourceType","IDEAL","resolution","constraintType","MIN"],"mappings":"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","file":"MediaConstants.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.POSSIBLE_LOOPBACK_RESOLUTIONS = exports.DEFAULT_VIDEO_CONSTRAINTS = exports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = exports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = exports.DEFAULT_VIDEO_CONSTRAINT_TYPE = exports.DEFAULT_VIDEO_RESOLUTION = exports.MediaStreamUnregisterReason = exports.MediaSessionDisconnectReason = exports.KnownMediaStream = exports.KnownMediaStreamKind = exports.MediaRequestErrorCode = exports.SessionClientType = exports.SessionClientRole = exports.MediaServiceType = exports.MultiPartyCameraTypes = exports.CameraTypes = exports.ConstraintType = exports.LocalVideoSourceType = void 0;\nvar LocalVideoSourceType;\n(function (LocalVideoSourceType) {\n LocalVideoSourceType[\"CAMERA\"] = \"CAMERA\";\n LocalVideoSourceType[\"CAMERA_FRONT\"] = \"CAMERA_FRONT\";\n LocalVideoSourceType[\"DESKTOP_SHARE\"] = \"DESKTOP_SHARE\";\n})(LocalVideoSourceType = exports.LocalVideoSourceType || (exports.LocalVideoSourceType = {}));\nvar ConstraintType;\n(function (ConstraintType) {\n ConstraintType[\"MIN\"] = \"min\";\n ConstraintType[\"IDEAL\"] = \"ideal\";\n})(ConstraintType = exports.ConstraintType || (exports.ConstraintType = {}));\nvar CameraTypes;\n(function (CameraTypes) {\n CameraTypes[\"FRONT\"] = \"front\";\n CameraTypes[\"BACK\"] = \"back\";\n CameraTypes[\"NONE\"] = \"none\";\n})(CameraTypes = exports.CameraTypes || (exports.CameraTypes = {}));\nvar MultiPartyCameraTypes;\n(function (MultiPartyCameraTypes) {\n MultiPartyCameraTypes[\"FRONT\"] = \"front\";\n MultiPartyCameraTypes[\"BACK\"] = \"back\";\n})(MultiPartyCameraTypes = exports.MultiPartyCameraTypes || (exports.MultiPartyCameraTypes = {}));\nvar MediaServiceType;\n(function (MediaServiceType) {\n MediaServiceType[\"OPENTOK\"] = \"OPENTOK\";\n MediaServiceType[\"TURNSERVER\"] = \"TURN_SERVER\";\n MediaServiceType[\"MEDIASERVER\"] = \"MEDIA_SERVER\";\n})(MediaServiceType = exports.MediaServiceType || (exports.MediaServiceType = {}));\nvar SessionClientRole;\n(function (SessionClientRole) {\n SessionClientRole[\"AGENT\"] = \"AGENT\";\n SessionClientRole[\"OBSERVER\"] = \"OBSERVER\";\n SessionClientRole[\"USER\"] = \"USER\";\n})(SessionClientRole = exports.SessionClientRole || (exports.SessionClientRole = {}));\nvar SessionClientType;\n(function (SessionClientType) {\n SessionClientType[\"INITIATOR\"] = \"publisher\";\n SessionClientType[\"GUEST\"] = \"subscriber\";\n})(SessionClientType = exports.SessionClientType || (exports.SessionClientType = {}));\nvar MediaRequestErrorCode;\n(function (MediaRequestErrorCode) {\n MediaRequestErrorCode[\"Overconstrained\"] = \"Overconstrained\";\n MediaRequestErrorCode[\"PermissionDenied\"] = \"PermissionDenied\";\n MediaRequestErrorCode[\"GeneralError\"] = \"GeneralError\";\n})(MediaRequestErrorCode = exports.MediaRequestErrorCode || (exports.MediaRequestErrorCode = {}));\nvar KnownMediaStreamKind;\n(function (KnownMediaStreamKind) {\n KnownMediaStreamKind[\"Audio\"] = \"audio\";\n KnownMediaStreamKind[\"Video\"] = \"video\";\n})(KnownMediaStreamKind = exports.KnownMediaStreamKind || (exports.KnownMediaStreamKind = {}));\nvar KnownMediaStream;\n(function (KnownMediaStream) {\n KnownMediaStream[\"AGENT_AUDIO_STREAM\"] = \"DASHBOARD_AUDIO_STREAM\";\n KnownMediaStream[\"OBSERVER_AUDIO_STREAM\"] = \"OBSERVER_AUDIO_STREAM\";\n KnownMediaStream[\"USER_AUDIO_STREAM\"] = \"MOBILE_CLIENT_AUDIO_STREAM\";\n KnownMediaStream[\"USER_VIDEO_STREAM\"] = \"MOBILE_CLIENT_VIDEO_STREAM\";\n KnownMediaStream[\"USER_SCREEN_SHARE_STREAM\"] = \"USER_SCREEN_SHARE_STREAM\";\n})(KnownMediaStream = exports.KnownMediaStream || (exports.KnownMediaStream = {}));\nvar MediaSessionDisconnectReason;\n(function (MediaSessionDisconnectReason) {\n //Raised on initiator peer when guest peer was disconnected from signaling\n MediaSessionDisconnectReason[\"PeerDisconnected\"] = \"PeerDisconnected\";\n MediaSessionDisconnectReason[\"PeerConnectionInterrupted\"] = \"PeerConnectionInterrupted\";\n MediaSessionDisconnectReason[\"PeerConnectionStateChangeTimeout\"] = \"PeerConnectionStateChangeTimeout\";\n MediaSessionDisconnectReason[\"InitiatorPeerReconnected\"] = \"InitiatorPeerReconnected\";\n MediaSessionDisconnectReason[\"PublishedStreamDestroyed\"] = \"PublishedStreamDestroyed\";\n MediaSessionDisconnectReason[\"ForcedByConsumer\"] = \"ForcedByConsumer\";\n MediaSessionDisconnectReason[\"SignalingChannelDisconnect\"] = \"SignalingChannelDisconnect\";\n})(MediaSessionDisconnectReason = exports.MediaSessionDisconnectReason || (exports.MediaSessionDisconnectReason = {}));\nvar MediaStreamUnregisterReason;\n(function (MediaStreamUnregisterReason) {\n MediaStreamUnregisterReason[\"NativeEvent\"] = \"NativeEvent\";\n MediaStreamUnregisterReason[\"ReplacingStream\"] = \"ReplacingStream\";\n MediaStreamUnregisterReason[\"ClosedRemotely\"] = \"ClosedRemotely\";\n MediaStreamUnregisterReason[\"ServiceCleanUp\"] = \"ServiceCleanUp\";\n})(MediaStreamUnregisterReason = exports.MediaStreamUnregisterReason || (exports.MediaStreamUnregisterReason = {}));\nexports.DEFAULT_VIDEO_RESOLUTION = '640x480';\nexports.DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexports.DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexports.DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\nexports.DEFAULT_VIDEO_CONSTRAINTS = {\n resolution: exports.DEFAULT_VIDEO_RESOLUTION,\n constraintType: exports.DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\nexports.POSSIBLE_LOOPBACK_RESOLUTIONS = [\n { resolution: '1920x1080', constraintType: ConstraintType.MIN },\n { resolution: '1280x720', constraintType: ConstraintType.MIN },\n exports.DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n\n//# sourceMappingURL=MediaConstants.js.map\n","import {VideoStreamResolution} from './MediaContracts';\n\nexport enum LocalVideoSourceType {\n CAMERA = 'CAMERA',\n CAMERA_FRONT = 'CAMERA_FRONT',\n DESKTOP_SHARE = 'DESKTOP_SHARE'\n}\n\nexport enum ConstraintType {\n MIN = 'min',\n IDEAL = 'ideal'\n}\n\nexport enum CameraTypes {\n FRONT = 'front',\n BACK = 'back',\n NONE = 'none'\n}\n\nexport enum MultiPartyCameraTypes {\n FRONT = CameraTypes.FRONT,\n BACK = CameraTypes.BACK\n}\n\nexport enum MediaServiceType {\n OPENTOK = 'OPENTOK',\n TURNSERVER = 'TURN_SERVER',\n MEDIASERVER = 'MEDIA_SERVER'\n}\n\nexport enum SessionClientRole {\n AGENT = 'AGENT',\n OBSERVER = 'OBSERVER',\n USER = 'USER'\n}\n\nexport enum SessionClientType {\n INITIATOR = 'publisher',\n GUEST = 'subscriber'\n}\n\nexport enum MediaRequestErrorCode {\n Overconstrained = 'Overconstrained',\n PermissionDenied = 'PermissionDenied',\n GeneralError = 'GeneralError'\n}\n\nexport enum KnownMediaStreamKind {\n Audio = 'audio',\n Video = 'video'\n}\n\nexport enum KnownMediaStream {\n AGENT_AUDIO_STREAM = 'DASHBOARD_AUDIO_STREAM',\n OBSERVER_AUDIO_STREAM = 'OBSERVER_AUDIO_STREAM',\n USER_AUDIO_STREAM = 'MOBILE_CLIENT_AUDIO_STREAM',\n USER_VIDEO_STREAM = 'MOBILE_CLIENT_VIDEO_STREAM',\n USER_SCREEN_SHARE_STREAM = 'USER_SCREEN_SHARE_STREAM'\n}\n\nexport enum MediaSessionDisconnectReason {\n //Raised on initiator peer when guest peer was disconnected from signaling\n PeerDisconnected = 'PeerDisconnected',\n PeerConnectionInterrupted = 'PeerConnectionInterrupted',\n PeerConnectionStateChangeTimeout = 'PeerConnectionStateChangeTimeout',\n InitiatorPeerReconnected = 'InitiatorPeerReconnected',\n PublishedStreamDestroyed = 'PublishedStreamDestroyed',\n ForcedByConsumer = 'ForcedByConsumer',\n SignalingChannelDisconnect = 'SignalingChannelDisconnect'\n}\n\nexport enum MediaStreamUnregisterReason {\n NativeEvent = 'NativeEvent',\n ReplacingStream = 'ReplacingStream',\n ClosedRemotely = 'ClosedRemotely',\n ServiceCleanUp = 'ServiceCleanUp'\n}\n\nexport const DEFAULT_VIDEO_RESOLUTION = '640x480';\nexport const DEFAULT_VIDEO_CONSTRAINT_TYPE = ConstraintType.IDEAL;\nexport const DEFAULT_PEER_CONNECTIVITY_TIMEOUT_SECONDS = 10;\nexport const DEFAULT_VIDEO_WAIT_TIMEOUT_SECONDS = 30;\n\nexport const DEFAULT_VIDEO_CONSTRAINTS: VideoStreamResolution = {\n resolution: DEFAULT_VIDEO_RESOLUTION,\n constraintType: DEFAULT_VIDEO_CONSTRAINT_TYPE\n};\n\nexport const POSSIBLE_LOOPBACK_RESOLUTIONS: VideoStreamResolution[] = [\n {resolution: '1920x1080', constraintType: ConstraintType.MIN}, // FHD\n {resolution: '1280x720', constraintType: ConstraintType.MIN}, // HD\n DEFAULT_VIDEO_CONSTRAINTS // fallback\n];\n"]}