@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.
- package/lib/LocalStreamManager.d.ts +12 -0
- package/lib/LocalStreamManager.d.ts.map +1 -1
- package/lib/LocalStreamManager.js +440 -283
- package/lib/LocalStreamManager.js.map +1 -1
- package/lib/MediaConstants.d.ts +14 -4
- package/lib/MediaConstants.d.ts.map +1 -1
- package/lib/MediaConstants.js +83 -38
- package/lib/MediaConstants.js.map +1 -1
- package/lib/MediaContracts.d.ts +17 -14
- package/lib/MediaContracts.d.ts.map +1 -1
- package/lib/MediaContracts.js +3 -3
- package/lib/MediaContracts.js.map +1 -1
- package/lib/MediaPublisher.d.ts +3 -3
- package/lib/MediaPublisher.d.ts.map +1 -1
- package/lib/MediaPublisher.js +46 -35
- package/lib/MediaPublisher.js.map +1 -1
- package/lib/MediaServiceBase.d.ts +21 -7
- package/lib/MediaServiceBase.d.ts.map +1 -1
- package/lib/MediaServiceBase.js +924 -586
- package/lib/MediaServiceBase.js.map +1 -1
- package/lib/MediaSession/MediaServer.d.ts +45 -0
- package/lib/MediaSession/MediaServer.d.ts.map +1 -0
- package/lib/MediaSession/MediaServer.js +538 -0
- package/lib/MediaSession/MediaServer.js.map +1 -0
- package/lib/MediaSession/MediaSessionBase.d.ts +10 -1
- package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
- package/lib/MediaSession/MediaSessionBase.js +128 -66
- package/lib/MediaSession/MediaSessionBase.js.map +1 -1
- package/lib/MediaSession/SessionOpentok.d.ts +11 -9
- package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
- package/lib/MediaSession/SessionOpentok.js +500 -352
- package/lib/MediaSession/SessionOpentok.js.map +1 -1
- package/lib/MediaSession/SessionTurn.d.ts +4 -1
- package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
- package/lib/MediaSession/SessionTurn.js +611 -422
- package/lib/MediaSession/SessionTurn.js.map +1 -1
- package/lib/MediaSession/TurnConstants.js +31 -30
- package/lib/MediaSession/TurnConstants.js.map +1 -1
- package/lib/MediaSubscriber.d.ts +11 -11
- package/lib/MediaSubscriber.d.ts.map +1 -1
- package/lib/MediaSubscriber.js +236 -192
- package/lib/MediaSubscriber.js.map +1 -1
- package/lib/MediaUtils/Compatibility.d.ts +2 -1
- package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
- package/lib/MediaUtils/Compatibility.js +130 -85
- package/lib/MediaUtils/Compatibility.js.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.d.ts +3 -2
- package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
- package/lib/MediaUtils/MediaDomUtils.js +235 -174
- package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
- package/lib/MediaUtils/MediaTracer.js +9 -4
- package/lib/MediaUtils/MediaTracer.js.map +1 -1
- package/lib/MediaUtils/index.d.ts +1 -0
- package/lib/MediaUtils/index.d.ts.map +1 -0
- package/lib/MediaUtils/index.js +16 -0
- package/lib/MediaUtils/index.js.map +1 -0
- package/lib/MultiParty/Contracts.d.ts +16 -0
- package/lib/MultiParty/Contracts.d.ts.map +1 -0
- package/lib/MultiParty/Contracts.js +6 -0
- package/lib/MultiParty/Contracts.js.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts +16 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.js +79 -0
- package/lib/MultiParty/DetectWebRtcService.js.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesService.d.ts +23 -0
- package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesService.js +369 -0
- package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +5 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.js +305 -0
- package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -0
- package/lib/MultiParty/MultiPartyService.d.ts +40 -0
- package/lib/MultiParty/MultiPartyService.d.ts.map +1 -0
- package/lib/MultiParty/MultiPartyService.js +70 -0
- package/lib/MultiParty/MultiPartyService.js.map +1 -0
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts +3 -0
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -0
- package/lib/MultiParty/MultiPartyServiceFactory.js +21 -0
- package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -0
- package/lib/MultiParty/OpentokMultiPartyService.d.ts +29 -0
- package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -0
- package/lib/MultiParty/OpentokMultiPartyService.js +888 -0
- package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -0
- package/lib/MultiParty/VideoLayoutType.d.ts +4 -0
- package/lib/MultiParty/VideoLayoutType.d.ts.map +1 -0
- package/lib/MultiParty/VideoLayoutType.js +13 -0
- package/lib/MultiParty/VideoLayoutType.js.map +1 -0
- package/lib/MultiParty/index.d.ts +4 -0
- package/lib/MultiParty/index.d.ts.map +1 -0
- package/lib/MultiParty/index.js +61 -0
- package/lib/MultiParty/index.js.map +1 -0
- package/lib/MultiParty/opentok.d.ts +503 -0
- package/lib/TechseeMediaStream.d.ts +6 -6
- package/lib/TechseeMediaStream.d.ts.map +1 -1
- package/lib/TechseeMediaStream.js +59 -53
- package/lib/TechseeMediaStream.js.map +1 -1
- package/lib/oldCode/constants.js +20 -15
- package/lib/oldCode/constants.js.map +1 -1
- package/lib/oldCode/event-emitter.js +45 -22
- package/lib/oldCode/event-emitter.js.map +1 -1
- package/lib/oldCode/index.js +48 -52
- package/lib/oldCode/index.js.map +1 -1
- package/lib/oldCode/opentok/session.js +261 -236
- package/lib/oldCode/opentok/session.js.map +1 -1
- package/lib/oldCode/opentok/stream.js +283 -269
- package/lib/oldCode/opentok/stream.js.map +1 -1
- package/lib/oldCode/publisher.js +96 -71
- package/lib/oldCode/publisher.js.map +1 -1
- package/lib/oldCode/service.js +294 -272
- package/lib/oldCode/service.js.map +1 -1
- package/lib/oldCode/session.js +82 -60
- package/lib/oldCode/session.js.map +1 -1
- package/lib/oldCode/stream.js +153 -125
- package/lib/oldCode/stream.js.map +1 -1
- package/lib/oldCode/subscriber.js +60 -35
- package/lib/oldCode/subscriber.js.map +1 -1
- package/lib/oldCode/tracer.d.ts +3 -2
- package/lib/oldCode/tracer.d.ts.map +1 -1
- package/lib/oldCode/tracer.js +181 -130
- package/lib/oldCode/tracer.js.map +1 -1
- package/lib/oldCode/utils/ImageFixer.js +67 -44
- package/lib/oldCode/utils/ImageFixer.js.map +1 -1
- package/lib/oldCode/webrtc/constants.js +102 -110
- package/lib/oldCode/webrtc/constants.js.map +1 -1
- package/lib/oldCode/webrtc/helper.js +176 -124
- package/lib/oldCode/webrtc/helper.js.map +1 -1
- package/lib/oldCode/webrtc/session-kms.js +408 -393
- package/lib/oldCode/webrtc/session-kms.js.map +1 -1
- package/lib/oldCode/webrtc/session-loopback.js +245 -227
- package/lib/oldCode/webrtc/session-loopback.js.map +1 -1
- package/lib/oldCode/webrtc/session-turn.js +705 -658
- package/lib/oldCode/webrtc/session-turn.js.map +1 -1
- package/lib/oldCode/webrtc/session-turn.v2.js +480 -471
- package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -1
- package/lib/oldCode/webrtc/session.js +12 -6
- package/lib/oldCode/webrtc/session.js.map +1 -1
- package/lib/oldCode/webrtc/stream.js +526 -504
- package/lib/oldCode/webrtc/stream.js.map +1 -1
- package/lib/oldCode/webrtc/temasys/adapter-loader.js +5 -6
- package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -1
- package/lib/oldCode/webrtc/temasys/adapter.js +5264 -5192
- package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -1
- package/lib/oldCode/webrtc/webrtc-ie-shim.js +3357 -2927
- package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -1
- package/lib/qos/raw-qos.js +348 -273
- package/lib/qos/raw-qos.js.map +1 -1
- package/lib/webrtc-ie-shim.js +3386 -2985
- package/lib/webrtc-ie-shim.js.map +1 -1
- package/package.json +54 -42
|
@@ -1,25 +1,41 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
exports.LoopbackWebRTCSession = undefined;
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.LoopbackWebRTCSession = void 0;
|
|
7
9
|
|
|
8
|
-
var _session = require(
|
|
10
|
+
var _session = require("../session");
|
|
9
11
|
|
|
10
|
-
var _publisher = require(
|
|
12
|
+
var _publisher = require("../publisher");
|
|
11
13
|
|
|
12
|
-
var _tsEnvironmentDetect = require(
|
|
14
|
+
var _tsEnvironmentDetect = require("@techsee/techsee-common/lib/helpers/ts-environment-detect");
|
|
13
15
|
|
|
14
|
-
var _stream = require(
|
|
16
|
+
var _stream = require("./stream");
|
|
15
17
|
|
|
16
|
-
var _helper = require(
|
|
18
|
+
var _helper = require("./helper");
|
|
17
19
|
|
|
18
20
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
19
21
|
|
|
20
|
-
function
|
|
22
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
21
23
|
|
|
22
|
-
function
|
|
24
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
25
|
+
|
|
26
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
27
|
+
|
|
28
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
29
|
+
|
|
30
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
31
|
+
|
|
32
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
33
|
+
|
|
34
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
35
|
+
|
|
36
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
|
+
|
|
38
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
23
39
|
|
|
24
40
|
var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
|
|
25
41
|
|
|
@@ -34,42 +50,55 @@ var isIE11 = new _tsEnvironmentDetect.TsEnvironmentDetect().isIE11();
|
|
|
34
50
|
*
|
|
35
51
|
* @see TsMediaSession
|
|
36
52
|
*/
|
|
37
|
-
var LoopbackWebRTCSession =
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
var LoopbackWebRTCSession = /*#__PURE__*/function (_TsMediaSession) {
|
|
54
|
+
_inherits(LoopbackWebRTCSession, _TsMediaSession);
|
|
55
|
+
|
|
56
|
+
var _super = _createSuper(LoopbackWebRTCSession);
|
|
57
|
+
|
|
58
|
+
function LoopbackWebRTCSession(_ref) {
|
|
59
|
+
var _this;
|
|
60
|
+
|
|
61
|
+
var credentials = _ref.credentials,
|
|
62
|
+
deviceOpts = _ref.deviceOpts;
|
|
63
|
+
|
|
64
|
+
_classCallCheck(this, LoopbackWebRTCSession);
|
|
65
|
+
|
|
66
|
+
_this = _super.call(this);
|
|
67
|
+
_this._credentials = credentials;
|
|
68
|
+
_this._deviceOpts = deviceOpts;
|
|
69
|
+
_this._constraints = null;
|
|
70
|
+
return _this;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Id of the session.
|
|
74
|
+
*
|
|
75
|
+
* @member { String }
|
|
76
|
+
*
|
|
77
|
+
* @type { String }
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
_createClass(LoopbackWebRTCSession, [{
|
|
82
|
+
key: "id",
|
|
83
|
+
get: function get() {
|
|
84
|
+
return _.get(this._credentials, 'sessionId');
|
|
85
|
+
}
|
|
86
|
+
}, {
|
|
87
|
+
key: "isLoopback",
|
|
88
|
+
get: function get() {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}, {
|
|
92
|
+
key: "_setTrackStateTo",
|
|
93
|
+
value: function _setTrackStateTo(state) {
|
|
94
|
+
return function (track) {
|
|
95
|
+
if (track.setEnabled) {
|
|
96
|
+
track.setEnabled(state);
|
|
97
|
+
} else {
|
|
98
|
+
track.enabled = state;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
52
101
|
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Id of the session.
|
|
56
|
-
*
|
|
57
|
-
* @member { String }
|
|
58
|
-
*
|
|
59
|
-
* @type { String }
|
|
60
|
-
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
LoopbackWebRTCSession.prototype._setTrackStateTo = function _setTrackStateTo(state) {
|
|
64
|
-
return function (track) {
|
|
65
|
-
if (track.setEnabled) {
|
|
66
|
-
track.setEnabled(state);
|
|
67
|
-
} else {
|
|
68
|
-
track.enabled = state;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
102
|
/**
|
|
74
103
|
* Loopback does not connect, but still need to provide an implementation.
|
|
75
104
|
*
|
|
@@ -78,31 +107,33 @@ var LoopbackWebRTCSession = exports.LoopbackWebRTCSession = function (_TsMediaSe
|
|
|
78
107
|
*
|
|
79
108
|
*/
|
|
80
109
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
110
|
+
}, {
|
|
111
|
+
key: "connect",
|
|
112
|
+
value: function connect() {
|
|
113
|
+
return Promise.resolve();
|
|
114
|
+
}
|
|
115
|
+
}, {
|
|
116
|
+
key: "_toggleAllStreams",
|
|
117
|
+
value: function _toggleAllStreams(state) {
|
|
118
|
+
var _this2 = this;
|
|
119
|
+
|
|
120
|
+
if (!_.isEmpty(this._streams)) {
|
|
121
|
+
this._streams.forEach(function (stream) {
|
|
122
|
+
return stream._mediaStream.getTracks().forEach(_this2._setTrackStateTo(state));
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}, {
|
|
127
|
+
key: "_stopAllStreams",
|
|
128
|
+
value: function _stopAllStreams() {
|
|
129
|
+
if (!_.isEmpty(this._streams)) {
|
|
130
|
+
this._streams.forEach(function (stream) {
|
|
131
|
+
return stream._mediaStream.getTracks().forEach(function (track) {
|
|
132
|
+
return track.stop();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
106
137
|
/**
|
|
107
138
|
* Cleanup
|
|
108
139
|
*
|
|
@@ -111,11 +142,11 @@ var LoopbackWebRTCSession = exports.LoopbackWebRTCSession = function (_TsMediaSe
|
|
|
111
142
|
*
|
|
112
143
|
*/
|
|
113
144
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
145
|
+
}, {
|
|
146
|
+
key: "disconnect",
|
|
147
|
+
value: function disconnect() {
|
|
148
|
+
return Promise.resolve();
|
|
149
|
+
}
|
|
119
150
|
/**
|
|
120
151
|
* Create new TsMediaPublisher instance
|
|
121
152
|
*
|
|
@@ -136,59 +167,51 @@ var LoopbackWebRTCSession = exports.LoopbackWebRTCSession = function (_TsMediaSe
|
|
|
136
167
|
* @see TsMediaPublisher
|
|
137
168
|
*/
|
|
138
169
|
|
|
170
|
+
}, {
|
|
171
|
+
key: "createPublisher",
|
|
172
|
+
value: function createPublisher(t, p) {
|
|
173
|
+
var _this3 = this;
|
|
174
|
+
|
|
175
|
+
var target = t,
|
|
176
|
+
params = p;
|
|
177
|
+
|
|
178
|
+
if (!params) {
|
|
179
|
+
params = target;
|
|
180
|
+
target = null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return new Promise(function (resolve, reject) {
|
|
184
|
+
(0, _helper.getHighestResolutionStream)(_this3._deviceOpts, _this3._constraints).then(function (result) {
|
|
185
|
+
_this3._constraints = result.constraints;
|
|
186
|
+
return resolve(result.stream);
|
|
187
|
+
})["catch"](function (error) {
|
|
188
|
+
return reject(error);
|
|
189
|
+
});
|
|
190
|
+
}).then(function (mediaStream) {
|
|
191
|
+
// Clear previous streams
|
|
192
|
+
_this3._streams.clear(); //
|
|
193
|
+
// Get tracks that are related to the publisher (audio or video)
|
|
194
|
+
//
|
|
139
195
|
|
|
140
|
-
LoopbackWebRTCSession.prototype.createPublisher = function createPublisher(t, p) {
|
|
141
|
-
var _this3 = this;
|
|
142
|
-
|
|
143
|
-
var target = t,
|
|
144
|
-
params = p;
|
|
145
|
-
|
|
146
|
-
if (!params) {
|
|
147
|
-
params = target;
|
|
148
|
-
target = null;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return new Promise(function (resolve, reject) {
|
|
152
|
-
(0, _helper.getHighestResolutionStream)(_this3._deviceOpts, _this3._constraints).then(function (result) {
|
|
153
|
-
_this3._constraints = result.constraints;
|
|
154
|
-
|
|
155
|
-
return resolve(result.stream);
|
|
156
|
-
}).catch(function (error) {
|
|
157
|
-
return reject(error);
|
|
158
|
-
});
|
|
159
|
-
}).then(function (mediaStream) {
|
|
160
|
-
// Clear previous streams
|
|
161
|
-
_this3._streams.clear();
|
|
162
|
-
|
|
163
|
-
//
|
|
164
|
-
// Get tracks that are related to the publisher (audio or video)
|
|
165
|
-
//
|
|
166
|
-
var tracks = mediaStream.getTracks().filter(function (track) {
|
|
167
|
-
return track.kind === 'video' && params.videoDevice || track.kind === 'audio' && params.audioDevice;
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
var videoTrackSettings = (0, _helper.getVideoTrackSettings)(mediaStream);
|
|
171
|
-
|
|
172
|
-
var tsstream = new _stream.TsWebRTCStream(_this3, mediaStream, params.name, false, videoTrackSettings);
|
|
173
|
-
|
|
174
|
-
var publisher = new _publisher.TsMediaPublisher(_this3, {
|
|
175
|
-
stream: tsstream,
|
|
176
|
-
tracks: tracks,
|
|
177
|
-
videoParams: params.videoParams,
|
|
178
|
-
|
|
179
|
-
videoHeight: tsstream.videoDimensions.height,
|
|
180
|
-
videoWidth: tsstream.videoDimensions.width,
|
|
181
|
-
|
|
182
|
-
_target: target
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
tsstream.publisher = publisher;
|
|
186
|
-
_this3.publisher = publisher;
|
|
187
196
|
|
|
188
|
-
|
|
197
|
+
var tracks = mediaStream.getTracks().filter(function (track) {
|
|
198
|
+
return track.kind === 'video' && params.videoDevice || track.kind === 'audio' && params.audioDevice;
|
|
189
199
|
});
|
|
190
|
-
|
|
191
|
-
|
|
200
|
+
var videoTrackSettings = (0, _helper.getVideoTrackSettings)(mediaStream);
|
|
201
|
+
var tsstream = new _stream.TsWebRTCStream(_this3, mediaStream, params.name, false, videoTrackSettings);
|
|
202
|
+
var publisher = new _publisher.TsMediaPublisher(_this3, {
|
|
203
|
+
stream: tsstream,
|
|
204
|
+
tracks: tracks,
|
|
205
|
+
videoParams: params.videoParams,
|
|
206
|
+
videoHeight: tsstream.videoDimensions.height,
|
|
207
|
+
videoWidth: tsstream.videoDimensions.width,
|
|
208
|
+
_target: target
|
|
209
|
+
});
|
|
210
|
+
tsstream.publisher = publisher;
|
|
211
|
+
_this3.publisher = publisher;
|
|
212
|
+
return publisher;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
192
215
|
/**
|
|
193
216
|
* Publish stream from previously create TsMediaPublisher instance.
|
|
194
217
|
*
|
|
@@ -207,83 +230,86 @@ var LoopbackWebRTCSession = exports.LoopbackWebRTCSession = function (_TsMediaSe
|
|
|
207
230
|
* @see TsMediaPublisher#publish
|
|
208
231
|
*/
|
|
209
232
|
|
|
233
|
+
}, {
|
|
234
|
+
key: "publish",
|
|
235
|
+
value: function publish(publisher) {
|
|
236
|
+
var _this4 = this;
|
|
237
|
+
|
|
238
|
+
return Promise.resolve().then(function () {
|
|
239
|
+
publisher.emit(_publisher.EVENTS.STREAM_CREATED, publisher.stream);
|
|
240
|
+
|
|
241
|
+
_this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
|
|
242
|
+
stream: publisher.stream,
|
|
243
|
+
property: 'hasVideo',
|
|
244
|
+
value: publisher.stream.hasVideo
|
|
245
|
+
});
|
|
210
246
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
publisher.emit(_publisher.EVENTS.STREAM_CREATED, publisher.stream);
|
|
216
|
-
_this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
|
|
217
|
-
stream: publisher.stream,
|
|
218
|
-
property: 'hasVideo',
|
|
219
|
-
value: publisher.stream.hasVideo
|
|
220
|
-
});
|
|
221
|
-
_this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
|
|
222
|
-
stream: publisher.stream,
|
|
223
|
-
property: 'hasAudio',
|
|
224
|
-
value: publisher.stream.hasAudio
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
if (_this4.publisher._element) {
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (publisher._target) {
|
|
232
|
-
//
|
|
233
|
-
// New video element where publishing video stream will be rendered
|
|
234
|
-
//
|
|
235
|
-
var video = document.createElement('video');
|
|
236
|
-
|
|
237
|
-
if (!isIE11) {
|
|
238
|
-
video.src = URL.createObjectURL(publisher.stream._mediaStream);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
video.playsInline = true;
|
|
242
|
-
video.autoplay = true;
|
|
243
|
-
|
|
244
|
-
if (isIE11) {
|
|
245
|
-
publisher._target.appendChild(video);
|
|
246
|
-
publisher._element = attachMediaStream(video, publisher.stream._mediaStream);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
var streamDimensions = publisher.stream.videoDimensions;
|
|
250
|
-
|
|
251
|
-
var params = _.assign({}, {
|
|
252
|
-
fitMode: 'contain',
|
|
253
|
-
insertMode: 'append',
|
|
254
|
-
mirror: false,
|
|
255
|
-
resolution: streamDimensions.width + 'x' + streamDimensions.height,
|
|
256
|
-
width: '100%',
|
|
257
|
-
height: '100%'
|
|
258
|
-
}, publisher.videoParams);
|
|
259
|
-
|
|
260
|
-
var elementHeight = typeof params.height === 'string' ? params.height : params.height + 'px';
|
|
261
|
-
var elementWidth = typeof params.width === 'string' ? params.width : params.width + 'px';
|
|
262
|
-
|
|
263
|
-
_.assign((isIE11 ? publisher._element : video).style, {
|
|
264
|
-
height: elementHeight,
|
|
265
|
-
width: elementWidth,
|
|
266
|
-
|
|
267
|
-
position: 'relative',
|
|
268
|
-
'object-fit': params.fitMode
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
if (!isIE11) {
|
|
272
|
-
publisher._target.appendChild(video);
|
|
273
|
-
publisher._element = video;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
publisher.stream.setupDimensionsListener(video);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
//
|
|
280
|
-
// Enable (unpause) all media tracks related to publisher.
|
|
281
|
-
// They are sending data to the server from this moment.
|
|
282
|
-
//
|
|
283
|
-
_this4._toggleAllStreams(true);
|
|
247
|
+
_this4.emit(_session.EVENTS.STREAM_PROPERTY_CHANGED, {
|
|
248
|
+
stream: publisher.stream,
|
|
249
|
+
property: 'hasAudio',
|
|
250
|
+
value: publisher.stream.hasAudio
|
|
284
251
|
});
|
|
285
|
-
};
|
|
286
252
|
|
|
253
|
+
if (_this4.publisher._element) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (publisher._target) {
|
|
258
|
+
//
|
|
259
|
+
// New video element where publishing video stream will be rendered
|
|
260
|
+
//
|
|
261
|
+
var video = document.createElement('video');
|
|
262
|
+
|
|
263
|
+
if (!isIE11) {
|
|
264
|
+
video.src = URL.createObjectURL(publisher.stream._mediaStream);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
video.playsInline = true;
|
|
268
|
+
video.autoplay = true;
|
|
269
|
+
|
|
270
|
+
if (isIE11) {
|
|
271
|
+
publisher._target.appendChild(video);
|
|
272
|
+
|
|
273
|
+
publisher._element = attachMediaStream(video, publisher.stream._mediaStream);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
var streamDimensions = publisher.stream.videoDimensions;
|
|
277
|
+
|
|
278
|
+
var params = _.assign({}, {
|
|
279
|
+
fitMode: 'contain',
|
|
280
|
+
insertMode: 'append',
|
|
281
|
+
mirror: false,
|
|
282
|
+
resolution: "".concat(streamDimensions.width, "x").concat(streamDimensions.height),
|
|
283
|
+
width: '100%',
|
|
284
|
+
height: '100%'
|
|
285
|
+
}, publisher.videoParams);
|
|
286
|
+
|
|
287
|
+
var elementHeight = typeof params.height === 'string' ? params.height : params.height + 'px';
|
|
288
|
+
var elementWidth = typeof params.width === 'string' ? params.width : params.width + 'px';
|
|
289
|
+
|
|
290
|
+
_.assign((isIE11 ? publisher._element : video).style, {
|
|
291
|
+
height: elementHeight,
|
|
292
|
+
width: elementWidth,
|
|
293
|
+
position: 'relative',
|
|
294
|
+
'object-fit': params.fitMode
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
if (!isIE11) {
|
|
298
|
+
publisher._target.appendChild(video);
|
|
299
|
+
|
|
300
|
+
publisher._element = video;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
publisher.stream.setupDimensionsListener(video);
|
|
304
|
+
} //
|
|
305
|
+
// Enable (unpause) all media tracks related to publisher.
|
|
306
|
+
// They are sending data to the server from this moment.
|
|
307
|
+
//
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
_this4._toggleAllStreams(true);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
287
313
|
/**
|
|
288
314
|
* Unpublish stream and destroy publisher's view.
|
|
289
315
|
*
|
|
@@ -300,37 +326,29 @@ var LoopbackWebRTCSession = exports.LoopbackWebRTCSession = function (_TsMediaSe
|
|
|
300
326
|
* @see TsMediaPublisher#destroy
|
|
301
327
|
*/
|
|
302
328
|
|
|
329
|
+
}, {
|
|
330
|
+
key: "destroyPublisher",
|
|
331
|
+
value: function destroyPublisher(publisher) {
|
|
332
|
+
var _this5 = this;
|
|
303
333
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
return new Promise(function (resolve) {
|
|
308
|
-
_this5._toggleAllStreams(false);
|
|
309
|
-
_this5._stopAllStreams();
|
|
310
|
-
|
|
311
|
-
if (publisher._element) {
|
|
312
|
-
publisher._element.remove();
|
|
313
|
-
}
|
|
334
|
+
return new Promise(function (resolve) {
|
|
335
|
+
_this5._toggleAllStreams(false);
|
|
314
336
|
|
|
315
|
-
|
|
316
|
-
publisher.emit(_publisher.EVENTS.DESTROYED);
|
|
317
|
-
|
|
318
|
-
return resolve();
|
|
319
|
-
});
|
|
320
|
-
};
|
|
337
|
+
_this5._stopAllStreams();
|
|
321
338
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
get: function get() {
|
|
325
|
-
return _.get(this._credentials, 'sessionId');
|
|
339
|
+
if (publisher._element) {
|
|
340
|
+
publisher._element.remove();
|
|
326
341
|
}
|
|
327
|
-
}, {
|
|
328
|
-
key: 'isLoopback',
|
|
329
|
-
get: function get() {
|
|
330
|
-
return true;
|
|
331
|
-
}
|
|
332
|
-
}]);
|
|
333
342
|
|
|
334
|
-
|
|
343
|
+
_this5.publisher = null;
|
|
344
|
+
publisher.emit(_publisher.EVENTS.DESTROYED);
|
|
345
|
+
return resolve();
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
}]);
|
|
349
|
+
|
|
350
|
+
return LoopbackWebRTCSession;
|
|
335
351
|
}(_session.TsMediaSession);
|
|
352
|
+
|
|
353
|
+
exports.LoopbackWebRTCSession = LoopbackWebRTCSession;
|
|
336
354
|
//# sourceMappingURL=session-loopback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["oldCode/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"]}
|
|
1
|
+
{"version":3,"sources":["oldCode/webrtc/session-loopback.js"],"names":["isIE11","TsEnvironmentDetect","LoopbackWebRTCSession","credentials","deviceOpts","_credentials","_deviceOpts","_constraints","_","get","state","track","setEnabled","enabled","Promise","resolve","isEmpty","_streams","forEach","stream","_mediaStream","getTracks","_setTrackStateTo","stop","t","p","target","params","reject","then","result","constraints","error","mediaStream","clear","tracks","filter","kind","videoDevice","audioDevice","videoTrackSettings","tsstream","TsWebRTCStream","name","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","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","_toggleAllStreams","_stopAllStreams","remove","DESTROYED","TsMediaSession"],"mappings":"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","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"],"file":"session-loopback.js"}
|