@techsee/techsee-media-service 0.1.5 → 0.4.0-alpha.13

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.
@@ -37,8 +37,8 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
37
37
 
38
38
  var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
39
39
 
40
- var _ref = isIE11 ? require('kurento-utils-temasys-mod') : require('kurento-utils'),
41
- WebRtcPeer = _ref.WebRtcPeer;
40
+ var _require = require('kurento-utils'),
41
+ WebRtcPeer = _require.WebRtcPeer;
42
42
 
43
43
  /**
44
44
  * WebRTC-specific implementation of TsMediaSession.
@@ -54,11 +54,11 @@ var _ref = isIE11 ? require('kurento-utils-temasys-mod') : require('kurento-util
54
54
  var KMSWebRTCSession = exports.KMSWebRTCSession = function (_TsMediaSession) {
55
55
  _inherits(KMSWebRTCSession, _TsMediaSession);
56
56
 
57
- function KMSWebRTCSession(_ref2) {
58
- var credentials = _ref2.credentials,
59
- isMobile = _ref2.isMobile,
60
- resolution = _ref2.resolution,
61
- deviceOpts = _ref2.deviceOpts;
57
+ function KMSWebRTCSession(_ref) {
58
+ var credentials = _ref.credentials,
59
+ isMobile = _ref.isMobile,
60
+ resolution = _ref.resolution,
61
+ deviceOpts = _ref.deviceOpts;
62
62
 
63
63
  _classCallCheck(this, KMSWebRTCSession);
64
64
 
@@ -187,13 +187,13 @@ var KMSWebRTCSession = exports.KMSWebRTCSession = function (_TsMediaSession) {
187
187
  return _constants.PEER_CONNECTION_TYPES.RECV_ONLY;
188
188
  };
189
189
 
190
- KMSWebRTCSession.prototype._connectRTCPeer = function _connectRTCPeer(_ref3) {
190
+ KMSWebRTCSession.prototype._connectRTCPeer = function _connectRTCPeer(_ref2) {
191
191
  var _this4 = this;
192
192
 
193
- var constraints = _ref3.constraints,
194
- configuration = _ref3.configuration,
195
- sessionId = _ref3.sessionId,
196
- isMobile = _ref3.isMobile;
193
+ var constraints = _ref2.constraints,
194
+ configuration = _ref2.configuration,
195
+ sessionId = _ref2.sessionId,
196
+ isMobile = _ref2.isMobile;
197
197
 
198
198
  return new Promise(function (resolve, reject) {
199
199
  var done = _.once(function (err) {
@@ -218,9 +218,9 @@ var KMSWebRTCSession = exports.KMSWebRTCSession = function (_TsMediaSession) {
218
218
  return done(error);
219
219
  }
220
220
 
221
- _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, function (_ref4) {
222
- var sdpAnswer = _ref4.sdpAnswer,
223
- uid = _ref4.uid;
221
+ _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, function (_ref3) {
222
+ var sdpAnswer = _ref3.sdpAnswer,
223
+ uid = _ref3.uid;
224
224
 
225
225
  _jsCookie2.default.set(_constants.COOKIES.UID, uid);
226
226
 
@@ -239,8 +239,8 @@ var KMSWebRTCSession = exports.KMSWebRTCSession = function (_TsMediaSession) {
239
239
  return done();
240
240
  });
241
241
 
242
- _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, function (_ref5) {
243
- var candidate = _ref5.candidate;
242
+ _this4._socket.on(_constants.SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, function (_ref4) {
243
+ var candidate = _ref4.candidate;
244
244
 
245
245
  pc.addIceCandidate(candidate);
246
246
  });
@@ -299,8 +299,8 @@ var KMSWebRTCSession = exports.KMSWebRTCSession = function (_TsMediaSession) {
299
299
  stream.getTracks().forEach(_this5._setTrackStateTo(false));
300
300
  });
301
301
 
302
- _this5._pc.peerConnection.onaddstream = function (_ref6) {
303
- var stream = _ref6.stream;
302
+ _this5._pc.peerConnection.onaddstream = function (_ref5) {
303
+ var stream = _ref5.stream;
304
304
 
305
305
  var tsStream = new _stream.TsWebRTCStream(_this5, stream);
306
306
 
@@ -1 +1 @@
1
- {"version":3,"sources":["webrtc/session-kms.js"],"names":["io","isIE11","TsEnvironmentDetect","require","WebRtcPeer","KMSWebRTCSession","credentials","isMobile","resolution","deviceOpts","_credentials","_isMobile","_resolution","_deviceOpts","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_socket","_pc","_connectSocket","Promise","resolve","reject","socket","connect","forceNew","done","_","once","err","on","SOCKET_EVENTS","INCOMING","ERROR","_setupConnection","pc","sessionId","uid","Cookies","get","COOKIES","UID","clientType","CLIENT_TYPES","PUBLISHER","SUBSCRIBER","PIPELINE_DESTROYED","destroyed","off","disconnect","emit","EVENTS","DISCONNECTED","reason","generateOffer","error","offer","OUTGOING","JOIN_PIPELINE","pipelineType","sdpOffer","_getPeerType","constraints","audio","PEER_CONNECTION_TYPES","SEND_RECV","RECV_ONLY","_connectRTCPeer","configuration","peerConnectionType","mediaConstraints","onicecandidate","candidate","ICE_CANDIDATE","JOIN_RESPONSE","sdpAnswer","set","processAnswer","CONNECTED","addIceCandidate","then","catch","_setTrackStateTo","state","track","setEnabled","enabled","video","peerConnection","getLocalStreams","forEach","stream","getTracks","onaddstream","tsStream","TsWebRTCStream","STREAM_CREATED","close","DESTROY_PIPELINE","event","createPublisher","target","params","mediaStream","tracks","reduce","result","filter","kind","videoDevice","audioDevice","push","tsstream","name","remote","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","PUBLISHER_EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","document","createElement","src","URL","createObjectURL","_mediaStream","playsInline","autoplay","appendChild","_element","attachMediaStream","assign","fitMode","insertMode","mirror","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","PIPELINE_TYPES","AUDIO_VIDEO_TO_SUBSCRIBERS","TsMediaSession"],"mappings":"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","file":"session-kms.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession,\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher,\n} from '../publisher';\n\nimport {\n TsWebRTCStream,\n} from './stream';\n\nimport * as io from 'socket.io-client';\n\nimport Cookies from 'js-cookie';\n\nimport { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nconst { WebRtcPeer } = isIE11 ? require('kurento-utils-temasys-mod') : require('kurento-utils');\n\nimport {\n CLIENT_TYPES,\n COOKIES,\n PEER_CONNECTION_TYPES,\n PIPELINE_TYPES,\n SOCKET_EVENTS\n} from './constants';\n\nimport {\n getMediaConstraints\n} from './helper';\n\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'MEDIA_SERVER' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class KMSWebRTCSession extends TsMediaSession {\n constructor({ credentials, isMobile, resolution, deviceOpts }) {\n super();\n\n this._credentials = credentials;\n this._isMobile = isMobile;\n this._resolution = resolution;\n this._deviceOpts = deviceOpts;\n\n const iceServers = credentials.ice.map((item) => ({\n urls: item.url,\n username: item.login,\n credential: item.password,\n }));\n\n this._configuration = {\n iceServers,\n\n iceTransportPolicy: 'relay',\n };\n\n /**\n * Socket.io connection to the signaling server\n *\n * @private\n * @member { Object }\n */\n this._socket = null;\n\n /**\n * RTCPeerConnection to the media server.\n *\n * For now kurento-utils is used for connection establishment.\n *\n * @private\n * @member { Object }\n */\n this._pc = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return this._credentials.sessionId;\n }\n\n /**\n * PipelineType of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get pipelineType() {\n return this._credentials.pipelineType || PIPELINE_TYPES.AUDIO_VIDEO_TO_SUBSCRIBERS;\n }\n\n _connectSocket(url) {\n return new Promise((resolve, reject) => {\n const socket = io.connect(url, { forceNew: true });\n\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n\n //\n // When connection is established\n //\n socket.once('connect', () => done());\n //\n // errorOccured is ts-media-client signal\n //\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n //\n // And these 2 are socket.io connection failed events\n //\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n\n this._socket = socket;\n });\n }\n\n _setupConnection(pc, sessionId) {\n const uid = Cookies.get(COOKIES.UID);\n const clientType = this._isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER;\n\n return new Promise((resolve, reject) => {\n this._socket.on(SOCKET_EVENTS.INCOMING.PIPELINE_DESTROYED, () => {\n this.destroyed = true;\n\n this._socket.off();\n this._socket.disconnect();\n\n this.emit(EVENTS.DISCONNECTED, {\n reason: 'Client disconnected',\n });\n });\n\n pc.generateOffer((error, offer) => {\n if (error) {\n return reject(error);\n }\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_PIPELINE, {\n uid,\n sessionId,\n clientType,\n\n pipelineType: this.pipelineType,\n sdpOffer: offer,\n });\n\n resolve();\n });\n });\n }\n\n _getPeerType(constraints, isMobile) {\n if (isMobile || constraints.audio) {\n return PEER_CONNECTION_TYPES.SEND_RECV;\n }\n\n return PEER_CONNECTION_TYPES.RECV_ONLY;\n }\n\n _connectRTCPeer({\n constraints,\n configuration,\n sessionId,\n isMobile,\n }) {\n return new Promise((resolve, reject) => {\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n const peerConnectionType = this._getPeerType(constraints, isMobile);\n\n const pc = WebRtcPeer[peerConnectionType]({\n configuration,\n\n mediaConstraints: constraints,\n onicecandidate: (candidate) => {\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId,\n\n candidate,\n clientType: isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER,\n });\n },\n }, (error) => {\n if (error) {\n return done(error);\n }\n\n this._socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, ({ sdpAnswer, uid }) => {\n Cookies.set(COOKIES.UID, uid);\n\n pc.processAnswer(sdpAnswer, (error) => {\n if (error) {\n return done(error);\n }\n });\n\n this.emit(EVENTS.CONNECTED);\n\n this._socket.off(SOCKET_EVENTS.INCOMING.ERROR);\n this._socket.off('connect_error');\n this._socket.off('connect_timeout');\n\n return done();\n });\n\n this._socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, ({ candidate }) => {\n pc.addIceCandidate(candidate);\n });\n\n this._setupConnection(pc, sessionId)\n .then(done)\n .catch(done);\n });\n\n this._pc = pc;\n });\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Establish socket and peer connection to the media server.\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#CONNECTED\n */\n connect() {\n return this._connectSocket(this._credentials.url)\n .then(() => (\n getMediaConstraints({\n resolution: this._resolution,\n deviceOpts: this._deviceOpts\n })\n ))\n .then((constraints) => {\n // streaming from dashboard is not supported and we\n // don't want to access the camera without a reason\n if (!this._isMobile && constraints.video) {\n delete constraints.video;\n }\n\n return this._connectRTCPeer({\n constraints,\n\n configuration: this._configuration,\n sessionId: this._credentials.sessionId,\n isMobile: this._isMobile,\n });\n })\n .then(() => {\n this._pc.peerConnection.getLocalStreams().forEach((stream) => {\n stream.getTracks().forEach(this._setTrackStateTo(false));\n });\n\n this._pc.peerConnection.onaddstream = ({ stream }) => {\n const tsStream = new TsWebRTCStream(this, stream);\n\n this.emit(EVENTS.STREAM_CREATED, tsStream);\n };\n });\n }\n\n /**\n * Close all media streams, disconnect RTCPeerConnection and socket.io\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#DISCONNECTED\n */\n disconnect() {\n return Promise.resolve()\n .then(() => {\n if (this.destroyed) {\n return null;\n }\n\n this._pc.peerConnection.close();\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.DESTROY_PIPELINE, {\n sessionId: this._credentials.sessionId,\n });\n this._socket.disconnect();\n\n const event = { reason: 'disconnected' };\n\n this.emit(EVENTS.DISCONNECTED, event);\n\n return event;\n });\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(target, params) {\n if (!params) {\n params = target;\n target = null;\n }\n\n return Promise.resolve()\n .then(() => {\n //\n // Get media streams that were created on session initialization\n //\n const mediaStream = this._pc.peerConnection.getLocalStreams()[0];\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = this._pc.peerConnection.getLocalStreams().reduce((result, mediaStream) => {\n mediaStream.getTracks()\n .filter((track) => (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice))\n .forEach((track) => result.push(track));\n\n return result;\n }, []);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name);\n\n tsstream.remote = false;\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target,\n });\n\n tsstream.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo,\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio,\n });\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: '480x640',\n width: '100%',\n height: '100%',\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode,\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n publisher.tracks.forEach(this._setTrackStateTo(true));\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n publisher.tracks.forEach(this._setTrackStateTo(false));\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["webrtc/session-kms.js"],"names":["io","isIE11","TsEnvironmentDetect","require","WebRtcPeer","KMSWebRTCSession","credentials","isMobile","resolution","deviceOpts","_credentials","_isMobile","_resolution","_deviceOpts","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_socket","_pc","_connectSocket","Promise","resolve","reject","socket","connect","forceNew","done","_","once","err","on","SOCKET_EVENTS","INCOMING","ERROR","_setupConnection","pc","sessionId","uid","Cookies","get","COOKIES","UID","clientType","CLIENT_TYPES","PUBLISHER","SUBSCRIBER","PIPELINE_DESTROYED","destroyed","off","disconnect","emit","EVENTS","DISCONNECTED","reason","generateOffer","error","offer","OUTGOING","JOIN_PIPELINE","pipelineType","sdpOffer","_getPeerType","constraints","audio","PEER_CONNECTION_TYPES","SEND_RECV","RECV_ONLY","_connectRTCPeer","configuration","peerConnectionType","mediaConstraints","onicecandidate","candidate","ICE_CANDIDATE","JOIN_RESPONSE","sdpAnswer","set","processAnswer","CONNECTED","addIceCandidate","then","catch","_setTrackStateTo","state","track","setEnabled","enabled","video","peerConnection","getLocalStreams","forEach","stream","getTracks","onaddstream","tsStream","TsWebRTCStream","STREAM_CREATED","close","DESTROY_PIPELINE","event","createPublisher","target","params","mediaStream","tracks","reduce","result","filter","kind","videoDevice","audioDevice","push","tsstream","name","remote","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","PUBLISHER_EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","document","createElement","src","URL","createObjectURL","_mediaStream","playsInline","autoplay","appendChild","_element","attachMediaStream","assign","fitMode","insertMode","mirror","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","PIPELINE_TYPES","AUDIO_VIDEO_TO_SUBSCRIBERS","TsMediaSession"],"mappings":"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","file":"session-kms.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport {\n TsWebRTCStream\n} from './stream';\n\nimport * as io from 'socket.io-client';\n\nimport Cookies from 'js-cookie';\n\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nconst {WebRtcPeer} = require('kurento-utils');\n\nimport {\n CLIENT_TYPES,\n COOKIES,\n PEER_CONNECTION_TYPES,\n PIPELINE_TYPES,\n SOCKET_EVENTS\n} from './constants';\n\nimport {\n getMediaConstraints\n} from './helper';\n\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'MEDIA_SERVER' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class KMSWebRTCSession extends TsMediaSession {\n constructor({credentials, isMobile, resolution, deviceOpts}) {\n super();\n\n this._credentials = credentials;\n this._isMobile = isMobile;\n this._resolution = resolution;\n this._deviceOpts = deviceOpts;\n\n const iceServers = credentials.ice.map((item) => ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }));\n\n this._configuration = {\n iceServers,\n\n iceTransportPolicy: 'relay'\n };\n\n /**\n * Socket.io connection to the signaling server\n *\n * @private\n * @member { Object }\n */\n this._socket = null;\n\n /**\n * RTCPeerConnection to the media server.\n *\n * For now kurento-utils is used for connection establishment.\n *\n * @private\n * @member { Object }\n */\n this._pc = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return this._credentials.sessionId;\n }\n\n /**\n * PipelineType of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get pipelineType() {\n return this._credentials.pipelineType || PIPELINE_TYPES.AUDIO_VIDEO_TO_SUBSCRIBERS;\n }\n\n _connectSocket(url) {\n return new Promise((resolve, reject) => {\n const socket = io.connect(url, {forceNew: true});\n\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n\n //\n // When connection is established\n //\n socket.once('connect', () => done());\n //\n // errorOccured is ts-media-client signal\n //\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n //\n // And these 2 are socket.io connection failed events\n //\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n\n this._socket = socket;\n });\n }\n\n _setupConnection(pc, sessionId) {\n const uid = Cookies.get(COOKIES.UID);\n const clientType = this._isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER;\n\n return new Promise((resolve, reject) => {\n this._socket.on(SOCKET_EVENTS.INCOMING.PIPELINE_DESTROYED, () => {\n this.destroyed = true;\n\n this._socket.off();\n this._socket.disconnect();\n\n this.emit(EVENTS.DISCONNECTED, {\n reason: 'Client disconnected'\n });\n });\n\n pc.generateOffer((error, offer) => {\n if (error) {\n return reject(error);\n }\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_PIPELINE, {\n uid,\n sessionId,\n clientType,\n\n pipelineType: this.pipelineType,\n sdpOffer: offer\n });\n\n resolve();\n });\n });\n }\n\n _getPeerType(constraints, isMobile) {\n if (isMobile || constraints.audio) {\n return PEER_CONNECTION_TYPES.SEND_RECV;\n }\n\n return PEER_CONNECTION_TYPES.RECV_ONLY;\n }\n\n _connectRTCPeer({\n constraints,\n configuration,\n sessionId,\n isMobile\n }) {\n return new Promise((resolve, reject) => {\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n const peerConnectionType = this._getPeerType(constraints, isMobile);\n\n const pc = WebRtcPeer[peerConnectionType]({\n configuration,\n\n mediaConstraints: constraints,\n onicecandidate: (candidate) => {\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId,\n\n candidate,\n clientType: isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER\n });\n }\n }, (error) => {\n if (error) {\n return done(error);\n }\n\n this._socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, ({sdpAnswer, uid}) => {\n Cookies.set(COOKIES.UID, uid);\n\n pc.processAnswer(sdpAnswer, (error) => {\n if (error) {\n return done(error);\n }\n });\n\n this.emit(EVENTS.CONNECTED);\n\n this._socket.off(SOCKET_EVENTS.INCOMING.ERROR);\n this._socket.off('connect_error');\n this._socket.off('connect_timeout');\n\n return done();\n });\n\n this._socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, ({candidate}) => {\n pc.addIceCandidate(candidate);\n });\n\n this._setupConnection(pc, sessionId)\n .then(done)\n .catch(done);\n });\n\n this._pc = pc;\n });\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Establish socket and peer connection to the media server.\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#CONNECTED\n */\n connect() {\n return this._connectSocket(this._credentials.url)\n .then(() => (\n getMediaConstraints({\n resolution: this._resolution,\n deviceOpts: this._deviceOpts\n })\n ))\n .then((constraints) => {\n // streaming from dashboard is not supported and we\n // don't want to access the camera without a reason\n if (!this._isMobile && constraints.video) {\n delete constraints.video;\n }\n\n return this._connectRTCPeer({\n constraints,\n\n configuration: this._configuration,\n sessionId: this._credentials.sessionId,\n isMobile: this._isMobile\n });\n })\n .then(() => {\n this._pc.peerConnection.getLocalStreams().forEach((stream) => {\n stream.getTracks().forEach(this._setTrackStateTo(false));\n });\n\n this._pc.peerConnection.onaddstream = ({stream}) => {\n const tsStream = new TsWebRTCStream(this, stream);\n\n this.emit(EVENTS.STREAM_CREATED, tsStream);\n };\n });\n }\n\n /**\n * Close all media streams, disconnect RTCPeerConnection and socket.io\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#DISCONNECTED\n */\n disconnect() {\n return Promise.resolve()\n .then(() => {\n if (this.destroyed) {\n return null;\n }\n\n this._pc.peerConnection.close();\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.DESTROY_PIPELINE, {\n sessionId: this._credentials.sessionId\n });\n this._socket.disconnect();\n\n const event = {reason: 'disconnected'};\n\n this.emit(EVENTS.DISCONNECTED, event);\n\n return event;\n });\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(target, params) {\n if (!params) {\n params = target;\n target = null;\n }\n\n return Promise.resolve()\n .then(() => {\n //\n // Get media streams that were created on session initialization\n //\n const mediaStream = this._pc.peerConnection.getLocalStreams()[0];\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = this._pc.peerConnection.getLocalStreams().reduce((result, mediaStream) => {\n mediaStream.getTracks()\n .filter((track) => (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice))\n .forEach((track) => result.push(track));\n\n return result;\n }, []);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name);\n\n tsstream.remote = false;\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target\n });\n\n tsstream.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio\n });\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: '480x640',\n width: '100%',\n height: '100%'\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n publisher.tracks.forEach(this._setTrackStateTo(true));\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n publisher.tracks.forEach(this._setTrackStateTo(false));\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}
@@ -23,10 +23,6 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
23
23
 
24
24
  var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
25
25
 
26
- if (isIE11) {
27
- require('./temasys/adapter-loader')(); // eslint-disable-line global-require
28
- }
29
-
30
26
  /**
31
27
  * WebRTC-specific implementation of TsMediaSession.
32
28
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["webrtc/session-loopback.js"],"names":["isIE11","TsEnvironmentDetect","require","LoopbackWebRTCSession","credentials","deviceOpts","_credentials","_deviceOpts","_constraints","_setTrackStateTo","state","track","setEnabled","enabled","connect","Promise","resolve","_toggleAllStreams","_","isEmpty","_streams","forEach","stream","_mediaStream","getTracks","_stopAllStreams","stop","disconnect","createPublisher","t","p","target","params","reject","then","result","constraints","catch","error","mediaStream","clear","tracks","filter","kind","videoDevice","audioDevice","videoTrackSettings","tsstream","TsWebRTCStream","name","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","emit","PUBLISHER_EVENTS","STREAM_CREATED","EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","_element","video","document","createElement","src","URL","createObjectURL","playsInline","autoplay","appendChild","attachMediaStream","streamDimensions","assign","fitMode","insertMode","mirror","resolution","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","get","TsMediaSession"],"mappings":"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","file":"session-loopback.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nimport {\n TsWebRTCStream,\n} from './stream';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nif (isIE11) {\n require('./temasys/adapter-loader')(); // eslint-disable-line global-require\n}\n\nimport {\n getVideoTrackSettings,\n getHighestResolutionStream\n} from './helper';\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'LOOPBACK' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class LoopbackWebRTCSession extends TsMediaSession {\n constructor({ credentials, deviceOpts }) {\n super();\n\n this._credentials = credentials;\n this._deviceOpts = deviceOpts;\n this._constraints = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return _.get(this._credentials, 'sessionId');\n }\n\n get isLoopback() {\n return true;\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Loopback does not connect, but still need to provide an implementation.\n *\n * @method\n * @returns { Promise }\n *\n */\n connect() {\n return Promise.resolve();\n }\n\n _toggleAllStreams(state) {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach(this._setTrackStateTo(state)));\n }\n }\n\n _stopAllStreams() {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach((track) => track.stop()));\n }\n }\n\n /**\n * Cleanup\n *\n * @method\n * @returns { Promise }\n *\n */\n disconnect() {\n return Promise.resolve();\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(t, p) {\n let target = t,\n params = p;\n\n if (!params) {\n params = target;\n target = null;\n }\n\n return new Promise((resolve, reject) => {\n getHighestResolutionStream(this._deviceOpts, this._constraints)\n .then((result) => {\n this._constraints = result.constraints;\n\n return resolve(result.stream);\n })\n .catch((error) => reject(error));\n })\n .then((mediaStream) => {\n // Clear previous streams\n this._streams.clear();\n\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = mediaStream.getTracks()\n .filter((track) => (\n (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice)));\n\n const videoTrackSettings = getVideoTrackSettings(mediaStream);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name, false, videoTrackSettings);\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target,\n });\n\n tsstream.publisher = publisher;\n this.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo,\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio,\n });\n\n if (this.publisher._element) {\n return;\n }\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const streamDimensions = publisher.stream.videoDimensions;\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: `${streamDimensions.width}x${streamDimensions.height}`,\n width: '100%',\n height: '100%',\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode,\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n this._toggleAllStreams(true);\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n this._toggleAllStreams(false);\n this._stopAllStreams();\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n this.publisher = null;\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["webrtc/session-loopback.js"],"names":["isIE11","TsEnvironmentDetect","LoopbackWebRTCSession","credentials","deviceOpts","_credentials","_deviceOpts","_constraints","_setTrackStateTo","state","track","setEnabled","enabled","connect","Promise","resolve","_toggleAllStreams","_","isEmpty","_streams","forEach","stream","_mediaStream","getTracks","_stopAllStreams","stop","disconnect","createPublisher","t","p","target","params","reject","then","result","constraints","catch","error","mediaStream","clear","tracks","filter","kind","videoDevice","audioDevice","videoTrackSettings","tsstream","TsWebRTCStream","name","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","emit","PUBLISHER_EVENTS","STREAM_CREATED","EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","_element","video","document","createElement","src","URL","createObjectURL","playsInline","autoplay","appendChild","attachMediaStream","streamDimensions","assign","fitMode","insertMode","mirror","resolution","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","get","TsMediaSession"],"mappings":"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","file":"session-loopback.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nimport {\n TsWebRTCStream,\n} from './stream';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nimport {\n getVideoTrackSettings,\n getHighestResolutionStream\n} from './helper';\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'LOOPBACK' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class LoopbackWebRTCSession extends TsMediaSession {\n constructor({ credentials, deviceOpts }) {\n super();\n\n this._credentials = credentials;\n this._deviceOpts = deviceOpts;\n this._constraints = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return _.get(this._credentials, 'sessionId');\n }\n\n get isLoopback() {\n return true;\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Loopback does not connect, but still need to provide an implementation.\n *\n * @method\n * @returns { Promise }\n *\n */\n connect() {\n return Promise.resolve();\n }\n\n _toggleAllStreams(state) {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach(this._setTrackStateTo(state)));\n }\n }\n\n _stopAllStreams() {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach((track) => track.stop()));\n }\n }\n\n /**\n * Cleanup\n *\n * @method\n * @returns { Promise }\n *\n */\n disconnect() {\n return Promise.resolve();\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(t, p) {\n let target = t,\n params = p;\n\n if (!params) {\n params = target;\n target = null;\n }\n\n return new Promise((resolve, reject) => {\n getHighestResolutionStream(this._deviceOpts, this._constraints)\n .then((result) => {\n this._constraints = result.constraints;\n\n return resolve(result.stream);\n })\n .catch((error) => reject(error));\n })\n .then((mediaStream) => {\n // Clear previous streams\n this._streams.clear();\n\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = mediaStream.getTracks()\n .filter((track) => (\n (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice)));\n\n const videoTrackSettings = getVideoTrackSettings(mediaStream);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name, false, videoTrackSettings);\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target,\n });\n\n tsstream.publisher = publisher;\n this.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo,\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio,\n });\n\n if (this.publisher._element) {\n return;\n }\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const streamDimensions = publisher.stream.videoDimensions;\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: `${streamDimensions.width}x${streamDimensions.height}`,\n width: '100%',\n height: '100%',\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode,\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n this._toggleAllStreams(true);\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n this._toggleAllStreams(false);\n this._stopAllStreams();\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n this.publisher = null;\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}