@flashphoner/websdk 2.0.231 → 2.0.232
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/docTemplate/README.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
///////////// Utils ////////////
|
|
3
3
|
///////////////////////////////////
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Default server ports description
|
|
7
|
+
*
|
|
8
|
+
* @type {{legacy: {http: number, https: number}, wss: number, http: number, https: number, ws: number, hls: {http: number, https: number}}}
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_PORTS = {
|
|
11
|
+
http: 8081,
|
|
12
|
+
https: 8444,
|
|
13
|
+
legacy: {
|
|
14
|
+
http: 9091,
|
|
15
|
+
https: 8888
|
|
16
|
+
},
|
|
17
|
+
ws: 8080,
|
|
18
|
+
wss: 8443,
|
|
19
|
+
hls: {
|
|
20
|
+
http: 8082,
|
|
21
|
+
https: 8445
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Check if object is not empty
|
|
27
|
+
*
|
|
28
|
+
* @param obj object to check
|
|
29
|
+
* @returns {boolean} true if object is not empty
|
|
30
|
+
*/
|
|
5
31
|
function notEmpty(obj) {
|
|
6
32
|
if (obj != null && obj != 'undefined' && obj != '') {
|
|
7
33
|
return true;
|
|
@@ -9,34 +35,165 @@ function notEmpty(obj) {
|
|
|
9
35
|
return false;
|
|
10
36
|
}
|
|
11
37
|
|
|
12
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Print trace string to
|
|
40
|
+
*
|
|
41
|
+
* @param str string to print
|
|
42
|
+
*/
|
|
13
43
|
function trace(str) {
|
|
14
44
|
console.log(str);
|
|
15
45
|
}
|
|
16
46
|
|
|
17
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Get HTML page field
|
|
49
|
+
*
|
|
50
|
+
* @param name field name
|
|
51
|
+
* @returns {*} field
|
|
52
|
+
*/
|
|
18
53
|
function field(name) {
|
|
19
54
|
var field = document.getElementById(name).value;
|
|
20
55
|
return field;
|
|
21
56
|
}
|
|
22
57
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Set default value to port if it is not defined
|
|
60
|
+
*
|
|
61
|
+
* @param port
|
|
62
|
+
* @param value
|
|
63
|
+
* @returns {*}
|
|
64
|
+
*/
|
|
65
|
+
function setDefaultPort(port, value) {
|
|
66
|
+
if (port === undefined) {
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
return port;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get server ports configuration
|
|
74
|
+
*
|
|
75
|
+
* @returns {{legacy: {http: number, https: number}, wss: number, http: number, https: number, ws: number, hls: {http: number, https: number}}}
|
|
76
|
+
*/
|
|
77
|
+
function getPortsConfig() {
|
|
78
|
+
let portsConfig = DEFAULT_PORTS;
|
|
79
|
+
try {
|
|
80
|
+
// Try to get ports from a separate config declaring the SERVER_PORTS constant
|
|
81
|
+
portsConfig = SERVER_PORTS;
|
|
82
|
+
// Fill the ports absent in config by default values
|
|
83
|
+
portsConfig.http = setDefaultPort(portsConfig.http, DEFAULT_PORTS.http);
|
|
84
|
+
portsConfig.https = setDefaultPort(portsConfig.https, DEFAULT_PORTS.https);
|
|
85
|
+
portsConfig.legacy = setDefaultPort(portsConfig.legacy, DEFAULT_PORTS.legacy);
|
|
86
|
+
portsConfig.legacy.http = setDefaultPort(portsConfig.legacy.http, DEFAULT_PORTS.legacy.http);
|
|
87
|
+
portsConfig.legacy.https = setDefaultPort(portsConfig.legacy.https, DEFAULT_PORTS.legacy.https);
|
|
88
|
+
portsConfig.ws = setDefaultPort(portsConfig.ws, DEFAULT_PORTS.ws);
|
|
89
|
+
portsConfig.wss = setDefaultPort(portsConfig.wss, DEFAULT_PORTS.wss);
|
|
90
|
+
portsConfig.hls = setDefaultPort(portsConfig.hls, DEFAULT_PORTS.hls);
|
|
91
|
+
portsConfig.hls.http = setDefaultPort(portsConfig.hls.http, DEFAULT_PORTS.hls.http);
|
|
92
|
+
portsConfig.hls.https = setDefaultPort(portsConfig.hls.https, DEFAULT_PORTS.hls.https);
|
|
93
|
+
console.log("Use custom server ports");
|
|
94
|
+
} catch(e) {
|
|
95
|
+
console.log("Use default server ports");
|
|
96
|
+
console.log(e.stack);
|
|
97
|
+
}
|
|
98
|
+
return portsConfig;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Get web interface standard port depending on connection type
|
|
103
|
+
*
|
|
104
|
+
* @returns {string}
|
|
105
|
+
*/
|
|
106
|
+
function getWebPort() {
|
|
107
|
+
let portsConfig = getPortsConfig();
|
|
108
|
+
let port;
|
|
109
|
+
if (window.location.protocol == "http:") {
|
|
110
|
+
port = portsConfig.http;
|
|
111
|
+
} else {
|
|
112
|
+
port = portsConfig.https;
|
|
113
|
+
}
|
|
114
|
+
return port;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Get HTML protocol used depending on connection type
|
|
119
|
+
*
|
|
120
|
+
* @returns {string}
|
|
121
|
+
*/
|
|
122
|
+
function getWebProtocol() {
|
|
123
|
+
let proto;
|
|
124
|
+
if (window.location.protocol == "http:") {
|
|
125
|
+
proto = "http://";
|
|
126
|
+
} else {
|
|
127
|
+
proto = "https://";
|
|
128
|
+
}
|
|
129
|
+
return proto;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Get websocket standard port depending on connection type
|
|
134
|
+
*
|
|
135
|
+
* @returns {string}
|
|
136
|
+
*/
|
|
137
|
+
function getWsPort() {
|
|
138
|
+
let portsConfig = getPortsConfig();
|
|
139
|
+
let port;
|
|
140
|
+
if (window.location.protocol == "http:") {
|
|
141
|
+
port = portsConfig.ws;
|
|
142
|
+
} else {
|
|
143
|
+
port = portsConfig.wss;
|
|
144
|
+
}
|
|
145
|
+
return port;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Get websocket protocol type depending on connection type
|
|
150
|
+
*
|
|
151
|
+
* @returns {string}
|
|
152
|
+
*/
|
|
153
|
+
function getWsProtocol() {
|
|
154
|
+
let proto;
|
|
28
155
|
if (window.location.protocol == "http:") {
|
|
29
156
|
proto = "ws://";
|
|
30
|
-
port = "8080";
|
|
31
157
|
} else {
|
|
32
158
|
proto = "wss://";
|
|
33
|
-
port = "8443";
|
|
34
159
|
}
|
|
160
|
+
return proto;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Get standard HLS port depending on connection type
|
|
165
|
+
*
|
|
166
|
+
* @returns {string}
|
|
167
|
+
*/
|
|
168
|
+
function getHlsPort() {
|
|
169
|
+
let portsConfig = getPortsConfig();
|
|
170
|
+
let port;
|
|
171
|
+
if (window.location.protocol == "http:") {
|
|
172
|
+
port = portsConfig.hls.http;
|
|
173
|
+
} else {
|
|
174
|
+
port = portsConfig.hls.https;
|
|
175
|
+
}
|
|
176
|
+
return port;
|
|
177
|
+
}
|
|
35
178
|
|
|
36
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Set default WCS websocket URL (used in most examples)
|
|
181
|
+
*
|
|
182
|
+
* @returns {string}
|
|
183
|
+
*/
|
|
184
|
+
function setURL() {
|
|
185
|
+
var proto = getWsProtocol();
|
|
186
|
+
var port = getWsPort();
|
|
187
|
+
var url = proto + window.location.hostname + ":" + port;
|
|
37
188
|
return url;
|
|
38
189
|
}
|
|
39
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Get URL parameter
|
|
193
|
+
*
|
|
194
|
+
* @param name
|
|
195
|
+
* @returns {string|null}
|
|
196
|
+
*/
|
|
40
197
|
function getUrlParam(name) {
|
|
41
198
|
var url = window.location.href;
|
|
42
199
|
name = name.replace(/[\[\]]/g, "\\$&");
|
|
@@ -47,40 +204,83 @@ function getUrlParam(name) {
|
|
|
47
204
|
return decodeURIComponent(results[2].replace(/\+/g, " "));
|
|
48
205
|
}
|
|
49
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Get default HLS url
|
|
209
|
+
*
|
|
210
|
+
* @returns {string}
|
|
211
|
+
*/
|
|
50
212
|
function getHLSUrl() {
|
|
213
|
+
var proto = getWebProtocol();
|
|
214
|
+
var port = getHlsPort();
|
|
215
|
+
var url = proto + window.location.hostname + ":" + port;
|
|
216
|
+
return url;
|
|
217
|
+
}
|
|
51
218
|
|
|
52
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Get default admin URL (used in Embed Player)
|
|
221
|
+
*
|
|
222
|
+
* @returns {string}
|
|
223
|
+
*/
|
|
224
|
+
function getAdminUrl() {
|
|
225
|
+
var portsConfig = getPortsConfig();
|
|
226
|
+
var proto = getWebProtocol();
|
|
53
227
|
var port;
|
|
54
|
-
|
|
55
228
|
if (window.location.protocol == "http:") {
|
|
56
|
-
|
|
57
|
-
port = "8082";
|
|
229
|
+
port = portsConfig.legacy.http;
|
|
58
230
|
} else {
|
|
59
|
-
|
|
60
|
-
port = "8445";
|
|
231
|
+
port = portsConfig.legacy.https;
|
|
61
232
|
}
|
|
62
|
-
|
|
63
233
|
var url = proto + window.location.hostname + ":" + port;
|
|
64
234
|
return url;
|
|
65
235
|
}
|
|
66
236
|
|
|
67
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Get REST API URL
|
|
239
|
+
*
|
|
240
|
+
* @param hostName host name to override the default one
|
|
241
|
+
* @param hostPort host port to override the default one
|
|
242
|
+
* @returns {string}
|
|
243
|
+
*/
|
|
244
|
+
function getRestUrl(hostName, hostPort) {
|
|
245
|
+
let proto = getWebProtocol();
|
|
246
|
+
let port = getWebPort();
|
|
247
|
+
if (!hostName) {
|
|
248
|
+
hostName = window.location.hostname;
|
|
249
|
+
}
|
|
250
|
+
if (hostPort) {
|
|
251
|
+
port = hostPort;
|
|
252
|
+
}
|
|
68
253
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
254
|
+
let url = proto + hostName + ":" + port;
|
|
255
|
+
return url;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Get Websocket URL
|
|
260
|
+
*
|
|
261
|
+
* @param hostName host name to override the default one
|
|
262
|
+
* @param hostPort host port to override the default one
|
|
263
|
+
* @returns {string}
|
|
264
|
+
*/
|
|
265
|
+
function getWebsocketUrl(hostName, hostPort) {
|
|
266
|
+
let proto = getWsProtocol();
|
|
267
|
+
let port = getWsPort();
|
|
268
|
+
if (!hostName) {
|
|
269
|
+
hostName = window.location.hostname;
|
|
270
|
+
}
|
|
271
|
+
if (hostPort) {
|
|
272
|
+
port = hostPort;
|
|
77
273
|
}
|
|
78
274
|
|
|
79
|
-
|
|
275
|
+
let url = proto + hostName + ":" + port;
|
|
80
276
|
return url;
|
|
81
277
|
}
|
|
82
278
|
|
|
83
|
-
|
|
279
|
+
/**
|
|
280
|
+
* Detect IE (for compatibility only)
|
|
281
|
+
*
|
|
282
|
+
* @returns {boolean}
|
|
283
|
+
*/
|
|
84
284
|
function detectIE() {
|
|
85
285
|
var ua = window.navigator.userAgent;
|
|
86
286
|
var msie = ua.indexOf('MSIE ');
|
|
@@ -94,7 +294,10 @@ function detectIE() {
|
|
|
94
294
|
return false;
|
|
95
295
|
}
|
|
96
296
|
|
|
97
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Detect Flash (for compatibility only)
|
|
299
|
+
*
|
|
300
|
+
*/
|
|
98
301
|
function detectFlash() {
|
|
99
302
|
var hasFlash = false;
|
|
100
303
|
try {
|
|
@@ -133,7 +336,12 @@ $(function () {
|
|
|
133
336
|
});
|
|
134
337
|
});
|
|
135
338
|
|
|
136
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Generate simple uuid
|
|
341
|
+
*
|
|
342
|
+
* @param length UUID length
|
|
343
|
+
* @returns {string}
|
|
344
|
+
*/
|
|
137
345
|
function createUUID(length) {
|
|
138
346
|
var s = [];
|
|
139
347
|
var hexDigits = "0123456789abcdef";
|
|
@@ -185,7 +393,15 @@ function resizeVideo(video, width, height) {
|
|
|
185
393
|
console.log("Resize from " + video.videoWidth + "x" + video.videoHeight + " to " + display.offsetWidth + "x" + display.offsetHeight);
|
|
186
394
|
}
|
|
187
395
|
|
|
188
|
-
|
|
396
|
+
/**
|
|
397
|
+
* Helper function to resize video tag
|
|
398
|
+
*
|
|
399
|
+
* @param videoWidth
|
|
400
|
+
* @param videoHeight
|
|
401
|
+
* @param dstWidth
|
|
402
|
+
* @param dstHeight
|
|
403
|
+
* @returns {{w: number, h: number}}
|
|
404
|
+
*/
|
|
189
405
|
function downScaleToFitSize(videoWidth, videoHeight, dstWidth, dstHeight) {
|
|
190
406
|
var newWidth, newHeight;
|
|
191
407
|
var videoRatio = videoWidth / videoHeight;
|
|
@@ -203,6 +419,11 @@ function downScaleToFitSize(videoWidth, videoHeight, dstWidth, dstHeight) {
|
|
|
203
419
|
};
|
|
204
420
|
}
|
|
205
421
|
|
|
422
|
+
/**
|
|
423
|
+
* Set Webkit fullscreen handler functions to video tag
|
|
424
|
+
*
|
|
425
|
+
* @param video
|
|
426
|
+
*/
|
|
206
427
|
function setWebkitFullscreenHandlers(video) {
|
|
207
428
|
if (video) {
|
|
208
429
|
let needRestart = false;
|
|
@@ -239,6 +460,12 @@ function setWebkitFullscreenHandlers(video) {
|
|
|
239
460
|
}
|
|
240
461
|
}
|
|
241
462
|
|
|
463
|
+
/**
|
|
464
|
+
* Check if fullscreen mode is available in Webkit
|
|
465
|
+
*
|
|
466
|
+
* @param video
|
|
467
|
+
* @returns {boolean}
|
|
468
|
+
*/
|
|
242
469
|
function canWebkitFullScreen(video) {
|
|
243
470
|
let canFullscreen = false;
|
|
244
471
|
if (video) {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
<link rel="stylesheet" href="console.css">
|
|
9
9
|
<link rel="stylesheet" type="text/css" href="jquery.dataTables.css">
|
|
10
10
|
<title>Console</title>
|
|
11
|
+
<script type="text/javascript" src="ports.js"></script>
|
|
11
12
|
<script type="text/javascript" src="../../dependencies/jquery/jquery-1.12.0.js"></script>
|
|
12
13
|
<script type="text/javascript" src="../../dependencies/jquery/jquery-ui.js"></script>
|
|
13
14
|
<script type="text/javascript" src="../../dependencies/bootstrap/js/bootstrap.min.js"></script>
|
|
@@ -146,18 +146,19 @@ $(function() {
|
|
|
146
146
|
|
|
147
147
|
function createNode(id, ip) {
|
|
148
148
|
let nodeIp = ip;
|
|
149
|
-
let port =
|
|
149
|
+
let port = getWebPort();
|
|
150
150
|
if (ip.indexOf(':') !== -1) {
|
|
151
151
|
port = ip.substring(ip.indexOf(":") + 1);
|
|
152
152
|
nodeIp = ip.substring(0, ip.indexOf(":"));
|
|
153
153
|
}
|
|
154
|
-
|
|
154
|
+
let restUrl = getRestUrl(nodeIp, port);
|
|
155
|
+
let api = FlashphonerRestApi.instance(restUrl, restUrl);
|
|
155
156
|
api.id = id;
|
|
156
157
|
api.ip = nodeIp;
|
|
157
158
|
api.port = port;
|
|
158
159
|
api.tests = [];
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
let state = NODE_STATE.NEW;
|
|
161
|
+
let pollState = function(){
|
|
161
162
|
api.stat.poll().then(function(stat){
|
|
162
163
|
api.setState(NODE_STATE.ALIVE, stat);
|
|
163
164
|
setTimeout(pollState, REFRESH_NODE_STATE_INTERVAL);
|
|
@@ -269,7 +270,7 @@ function createNode(id, ip) {
|
|
|
269
270
|
}
|
|
270
271
|
};
|
|
271
272
|
api.getTranscodingGroupStat = async function() {
|
|
272
|
-
const result = await fetch(
|
|
273
|
+
const result = await fetch(restUrl + "/?action=stat&format=json&groups=transcoding_stats")
|
|
273
274
|
const json = await result.json();
|
|
274
275
|
return json;
|
|
275
276
|
}
|
|
@@ -277,10 +278,7 @@ function createNode(id, ip) {
|
|
|
277
278
|
}
|
|
278
279
|
|
|
279
280
|
function addNode(ip) {
|
|
280
|
-
var id = ip.replace(
|
|
281
|
-
if (ip.indexOf(':') !== -1) {
|
|
282
|
-
id = ip.substring(ip.indexOf(":") + 1).replace(/\./g, "");
|
|
283
|
-
}
|
|
281
|
+
var id = ip.replace(/[.:]/g, "");
|
|
284
282
|
if (nodes[id]) {
|
|
285
283
|
return;
|
|
286
284
|
}
|
|
@@ -471,7 +469,7 @@ function pullStreamBatch() {
|
|
|
471
469
|
var remoteName = $("#pullBatchRemoteName").val();
|
|
472
470
|
var remote;
|
|
473
471
|
if (proto == "ws") {
|
|
474
|
-
remote =
|
|
472
|
+
remote = getWebsocketUrl($("#pullStreamBatchNodes").val()) + "/";
|
|
475
473
|
} else {
|
|
476
474
|
remote = "rtmp://" + $("#pullStreamBatchNodes").val() + ":1935/live/" + remoteName;
|
|
477
475
|
}
|
|
@@ -674,7 +672,7 @@ function doRego(node, testedNode, login, domain, password) {
|
|
|
674
672
|
sipPassword: password,
|
|
675
673
|
sipPort: "5060",
|
|
676
674
|
sipRegisterRequired: true,
|
|
677
|
-
urlServer:
|
|
675
|
+
urlServer: getWebsocketUrl(testedNode) + "/"
|
|
678
676
|
};
|
|
679
677
|
return node.api.createSession(connection);
|
|
680
678
|
}
|
|
@@ -954,7 +952,7 @@ function streamPlayStressTest() {
|
|
|
954
952
|
return;
|
|
955
953
|
}
|
|
956
954
|
|
|
957
|
-
var remote =
|
|
955
|
+
var remote = getWebsocketUrl($("#streamStressBatchNodes").val());
|
|
958
956
|
var name = $("#streamStressBatchName").val();
|
|
959
957
|
var start = parseInt($("#streamStressBatchStart").val());
|
|
960
958
|
var end = parseInt($("#streamStressBatchEnd").val());
|
|
@@ -1323,7 +1321,7 @@ function streamPublishStressTest() {
|
|
|
1323
1321
|
return false;
|
|
1324
1322
|
}
|
|
1325
1323
|
var node = getActiveNode();
|
|
1326
|
-
var remote =
|
|
1324
|
+
var remote = getWebsocketUrl($("#streamPublishStressBatchNodes").val());
|
|
1327
1325
|
var name = $("#streamPublishStressBatchName").val();
|
|
1328
1326
|
var start = parseInt($("#streamPublishStressBatchStart").val());
|
|
1329
1327
|
var end = parseInt($("#streamPublishStressBatchEnd").val());
|
|
@@ -1443,7 +1441,7 @@ function streamPlayStressTestRandom() {
|
|
|
1443
1441
|
var node = getActiveNode();
|
|
1444
1442
|
var streams = {};
|
|
1445
1443
|
var remoteNode = getNode($("#streamStressBatchNodes").val());
|
|
1446
|
-
var remote =
|
|
1444
|
+
var remote = getWebsocketUrl($("#streamStressBatchNodes").val());
|
|
1447
1445
|
var start = 0;
|
|
1448
1446
|
var end = parseInt($("#streamStressMaxStreams").val());
|
|
1449
1447
|
var rate = parseInt($("#streamStressBatchRate").val());
|