agora-electron-sdk 4.2.4 → 4.2.6-rc.1
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/CHANGELOG.md +14 -0
- package/js/Renderer/IRenderer.js +27 -8
- package/js/Renderer/RendererManager.js +59 -41
- package/js/Renderer/WebGLRenderer/index.js +271 -298
- package/js/Renderer/YUVCanvasRenderer/index.js +77 -101
- package/package.json +5 -5
- package/ts/Private/AgoraBase.ts +1 -1
- package/ts/Private/IAgoraMediaPlayer.ts +1 -1
- package/ts/Private/IAgoraRtcEngine.ts +16 -35
- package/ts/Renderer/IRenderer.ts +30 -17
- package/ts/Renderer/RendererManager.ts +73 -46
- package/ts/Renderer/WebGLRenderer/index.ts +389 -371
- package/ts/Renderer/YUVCanvasRenderer/index.ts +101 -127
- package/ts/Types.ts +1 -1
- package/types/Private/AgoraBase.d.ts +1 -1
- package/types/Private/IAgoraMediaPlayer.d.ts +1 -1
- package/types/Private/IAgoraRtcEngine.d.ts +16 -35
- package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
- package/types/Renderer/IRenderer.d.ts +2 -7
- package/types/Renderer/IRenderer.d.ts.map +1 -1
- package/types/Renderer/RendererManager.d.ts +6 -2
- package/types/Renderer/RendererManager.d.ts.map +1 -1
- package/types/Renderer/WebGLRenderer/index.d.ts +19 -28
- package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -1
- package/types/Renderer/YUVCanvasRenderer/index.d.ts +2 -3
- package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -1
- package/types/Types.d.ts +1 -1
- package/types/Types.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
## [4.2.6-rc.1](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.2.4...v4.2.6-rc.1) (2023-11-21)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* jira CSD-60920 render issue after ([#1110](https://github.com/AgoraIO-Extensions/Electron-SDK/issues/1110)) ([5730d86](https://github.com/AgoraIO-Extensions/Electron-SDK/commit/5730d86d136539d79f50b1e92ba9ec5049196488))
|
|
9
|
+
* jira CSD-61288 CSD-60920 renderer issue ([341491d](https://github.com/AgoraIO-Extensions/Electron-SDK/commit/341491dfac72e1614df5ad32f0b40198d6a046dd))
|
|
10
|
+
* use `setTimeout` intead of `setInterval` ([#1097](https://github.com/AgoraIO-Extensions/Electron-SDK/issues/1097)) ([9df0579](https://github.com/AgoraIO-Extensions/Electron-SDK/commit/9df057989846e5e7e5fb4a00c6a1208f5728b9d8))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* suppot native 4.2.6 ([#1104](https://github.com/AgoraIO-Extensions/Electron-SDK/issues/1104)) ([e8be60b](https://github.com/AgoraIO-Extensions/Electron-SDK/commit/e8be60bc762db3aac50d025a674664fb9e21c0bd)), closes [#1102](https://github.com/AgoraIO-Extensions/Electron-SDK/issues/1102)
|
|
16
|
+
|
|
3
17
|
## [4.2.4](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.2.3...v4.2.4) (2023-10-24)
|
|
4
18
|
|
|
5
19
|
|
package/js/Renderer/IRenderer.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.IRenderer = void 0;
|
|
|
4
4
|
var AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
|
|
5
5
|
var IRenderer = /** @class */ (function () {
|
|
6
6
|
function IRenderer() {
|
|
7
|
-
this.contentMode = AgoraMediaBase_1.RenderModeType.
|
|
7
|
+
this.contentMode = AgoraMediaBase_1.RenderModeType.RenderModeHidden;
|
|
8
8
|
}
|
|
9
9
|
IRenderer.prototype.snapshot = function (fileType) {
|
|
10
10
|
if (fileType === void 0) { fileType = 'image/png'; }
|
|
@@ -14,17 +14,36 @@ var IRenderer = /** @class */ (function () {
|
|
|
14
14
|
return null;
|
|
15
15
|
};
|
|
16
16
|
IRenderer.prototype.bind = function (element) {
|
|
17
|
-
if (!element) {
|
|
18
|
-
throw new Error('You have pass a element');
|
|
19
|
-
}
|
|
20
17
|
this.parentElement = element;
|
|
18
|
+
this.container = document.createElement('div');
|
|
19
|
+
Object.assign(this.container.style, {
|
|
20
|
+
width: '100%',
|
|
21
|
+
height: '100%',
|
|
22
|
+
display: 'flex',
|
|
23
|
+
justifyContent: 'center',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
overflow: 'hidden',
|
|
26
|
+
});
|
|
27
|
+
this.parentElement.appendChild(this.container);
|
|
28
|
+
this.canvas = document.createElement('canvas');
|
|
29
|
+
this.container.appendChild(this.canvas);
|
|
21
30
|
};
|
|
22
|
-
IRenderer.prototype.
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
IRenderer.prototype.unbind = function () {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
if (this.container && ((_a = this.canvas) === null || _a === void 0 ? void 0 : _a.parentNode) === this.container) {
|
|
34
|
+
this.container.removeChild(this.canvas);
|
|
25
35
|
}
|
|
36
|
+
if (this.parentElement &&
|
|
37
|
+
((_b = this.container) === null || _b === void 0 ? void 0 : _b.parentNode) === this.parentElement) {
|
|
38
|
+
this.parentElement.removeChild(this.container);
|
|
39
|
+
}
|
|
40
|
+
this.canvas = undefined;
|
|
41
|
+
this.container = undefined;
|
|
42
|
+
this.parentElement = undefined;
|
|
43
|
+
};
|
|
44
|
+
IRenderer.prototype.equalsElement = function (element) {
|
|
26
45
|
if (!this.parentElement) {
|
|
27
|
-
|
|
46
|
+
console.error('parentElement is null');
|
|
28
47
|
}
|
|
29
48
|
return element === this.parentElement;
|
|
30
49
|
};
|
|
@@ -25,9 +25,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
25
25
|
};
|
|
26
26
|
return __assign.apply(this, arguments);
|
|
27
27
|
};
|
|
28
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
-
};
|
|
31
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
29
|
exports.RendererManager = void 0;
|
|
33
30
|
var AgoraBase_1 = require("../Private/AgoraBase");
|
|
@@ -35,7 +32,7 @@ var AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
|
|
|
35
32
|
var Types_1 = require("../Types");
|
|
36
33
|
var Utils_1 = require("../Utils");
|
|
37
34
|
var IRendererManager_1 = require("./IRendererManager");
|
|
38
|
-
var WebGLRenderer_1 =
|
|
35
|
+
var WebGLRenderer_1 = require("./WebGLRenderer");
|
|
39
36
|
var YUVCanvasRenderer_1 = require("./YUVCanvasRenderer");
|
|
40
37
|
/**
|
|
41
38
|
* @ignore
|
|
@@ -48,11 +45,23 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
48
45
|
* @ignore
|
|
49
46
|
*/
|
|
50
47
|
_this.isRendering = false;
|
|
48
|
+
/**
|
|
49
|
+
* @ignore
|
|
50
|
+
*/
|
|
51
|
+
_this.handleWebGLFallback = function (config) { return function (renderer) {
|
|
52
|
+
var contentMode = renderer.contentMode, mirror = renderer.mirror;
|
|
53
|
+
var view = renderer.parentElement;
|
|
54
|
+
var renderers = _this.getRenderers(config);
|
|
55
|
+
var index = renderers.indexOf(renderer);
|
|
56
|
+
renderer.unbind();
|
|
57
|
+
var newRenderer = _this.createRenderer(Types_1.RENDER_MODE.SOFTWARE);
|
|
58
|
+
newRenderer.bind(view);
|
|
59
|
+
newRenderer.setRenderOption({ contentMode: contentMode, mirror: mirror });
|
|
60
|
+
renderers.splice(index, 1, newRenderer);
|
|
61
|
+
}; };
|
|
51
62
|
_this.renderFps = 15;
|
|
52
63
|
_this.renderers = new Map();
|
|
53
|
-
_this.
|
|
54
|
-
? Types_1.RENDER_MODE.WEBGL
|
|
55
|
-
: Types_1.RENDER_MODE.SOFTWARE;
|
|
64
|
+
_this.setRenderMode();
|
|
56
65
|
_this.msgBridge = Utils_1.AgoraEnv.AgoraElectronBridge;
|
|
57
66
|
_this.defaultRenderConfig = {
|
|
58
67
|
rendererOptions: {
|
|
@@ -72,8 +81,16 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
72
81
|
* 0: Success.< 0: Failure.
|
|
73
82
|
*/
|
|
74
83
|
RendererManager.prototype.setRenderMode = function (mode) {
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
if (mode === undefined) {
|
|
85
|
+
this.renderMode = this.checkWebglEnv()
|
|
86
|
+
? Types_1.RENDER_MODE.WEBGL
|
|
87
|
+
: Types_1.RENDER_MODE.SOFTWARE;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (mode !== this.renderMode) {
|
|
91
|
+
this.renderMode = mode;
|
|
92
|
+
(0, Utils_1.logInfo)('setRenderMode: new render mode will take effect only if new view bind to render');
|
|
93
|
+
}
|
|
77
94
|
};
|
|
78
95
|
/**
|
|
79
96
|
* @ignore
|
|
@@ -124,18 +141,32 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
124
141
|
* @ignore
|
|
125
142
|
*/
|
|
126
143
|
RendererManager.prototype.checkWebglEnv = function () {
|
|
127
|
-
var
|
|
144
|
+
var _a;
|
|
145
|
+
var flag = false;
|
|
128
146
|
var canvas = document.createElement('canvas');
|
|
129
147
|
try {
|
|
130
|
-
|
|
131
|
-
|
|
148
|
+
var getContext = function (contextNames) {
|
|
149
|
+
if (contextNames === void 0) { contextNames = ['webgl2', 'webgl', 'experimental-webgl']; }
|
|
150
|
+
for (var i = 0; i < contextNames.length; i++) {
|
|
151
|
+
var contextName = contextNames[i];
|
|
152
|
+
var context = canvas === null || canvas === void 0 ? void 0 : canvas.getContext(contextName);
|
|
153
|
+
if (context) {
|
|
154
|
+
return context;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
};
|
|
159
|
+
var gl = getContext();
|
|
160
|
+
flag = !!gl;
|
|
161
|
+
(_a = gl === null || gl === void 0 ? void 0 : gl.getExtension('WEBGL_lose_context')) === null || _a === void 0 ? void 0 : _a.loseContext();
|
|
162
|
+
gl = null;
|
|
132
163
|
(0, Utils_1.logInfo)('Your browser support webGL');
|
|
133
164
|
}
|
|
134
165
|
catch (e) {
|
|
135
166
|
(0, Utils_1.logWarn)('Your browser may not support webGL');
|
|
136
|
-
|
|
167
|
+
flag = false;
|
|
137
168
|
}
|
|
138
|
-
return
|
|
169
|
+
return flag;
|
|
139
170
|
};
|
|
140
171
|
/**
|
|
141
172
|
* @ignore
|
|
@@ -330,9 +361,11 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
330
361
|
});
|
|
331
362
|
}
|
|
332
363
|
};
|
|
333
|
-
|
|
364
|
+
var render = function () {
|
|
334
365
|
_this.forEachStream(renderFunc);
|
|
335
|
-
|
|
366
|
+
_this.videoFrameUpdateInterval = setTimeout(render, 1000 / _this.renderFps);
|
|
367
|
+
};
|
|
368
|
+
render();
|
|
336
369
|
};
|
|
337
370
|
/**
|
|
338
371
|
* @ignore
|
|
@@ -340,7 +373,7 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
340
373
|
RendererManager.prototype.stopRender = function () {
|
|
341
374
|
this.isRendering = false;
|
|
342
375
|
if (this.videoFrameUpdateInterval) {
|
|
343
|
-
|
|
376
|
+
clearTimeout(this.videoFrameUpdateInterval);
|
|
344
377
|
this.videoFrameUpdateInterval = undefined;
|
|
345
378
|
}
|
|
346
379
|
};
|
|
@@ -357,12 +390,12 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
357
390
|
/**
|
|
358
391
|
* @ignore
|
|
359
392
|
*/
|
|
360
|
-
RendererManager.prototype.createRenderer = function (
|
|
361
|
-
if (
|
|
393
|
+
RendererManager.prototype.createRenderer = function (renderMode, fallback) {
|
|
394
|
+
if (renderMode === Types_1.RENDER_MODE.SOFTWARE) {
|
|
362
395
|
return new YUVCanvasRenderer_1.YUVCanvasRenderer();
|
|
363
396
|
}
|
|
364
397
|
else {
|
|
365
|
-
return new WebGLRenderer_1.
|
|
398
|
+
return new WebGLRenderer_1.WebGLRenderer(fallback);
|
|
366
399
|
}
|
|
367
400
|
};
|
|
368
401
|
/**
|
|
@@ -377,40 +410,25 @@ var RendererManager = /** @class */ (function (_super) {
|
|
|
377
410
|
* @ignore
|
|
378
411
|
*/
|
|
379
412
|
RendererManager.prototype.getRenderers = function (_a) {
|
|
380
|
-
var _b
|
|
413
|
+
var _b;
|
|
381
414
|
var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
|
|
382
|
-
return ((
|
|
383
|
-
[]);
|
|
415
|
+
return ((_b = this.getRender({ videoSourceType: videoSourceType, channelId: channelId, uid: uid })) === null || _b === void 0 ? void 0 : _b.renders) || [];
|
|
384
416
|
};
|
|
385
417
|
/**
|
|
386
418
|
* @ignore
|
|
387
419
|
*/
|
|
388
420
|
RendererManager.prototype.bindHTMLElementToRender = function (config, view) {
|
|
389
|
-
var _this = this;
|
|
390
421
|
this.ensureRendererConfig(config);
|
|
391
|
-
var
|
|
392
|
-
var filterRenders = (
|
|
422
|
+
var renderers = this.getRenderers(config);
|
|
423
|
+
var filterRenders = (renderers === null || renderers === void 0 ? void 0 : renderers.filter(function (render) { return render.equalsElement(view); })) || [];
|
|
393
424
|
var hasBeenAdd = filterRenders.length > 0;
|
|
394
425
|
if (hasBeenAdd) {
|
|
395
426
|
(0, Utils_1.logWarn)('bindHTMLElementToRender: this view has bind to render', filterRenders);
|
|
396
427
|
return filterRenders[0];
|
|
397
428
|
}
|
|
398
|
-
var renderer = this.createRenderer(
|
|
399
|
-
var renderConfig = _this.getRender(config);
|
|
400
|
-
if (!renderConfig) {
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
renderConfig.renders = renders.filter(function (r) { return r !== renderer; });
|
|
404
|
-
var contentMode = renderer.contentMode;
|
|
405
|
-
renderer.unbind();
|
|
406
|
-
_this.setRenderMode(Types_1.RENDER_MODE.SOFTWARE);
|
|
407
|
-
var newRender = _this.createRenderer();
|
|
408
|
-
newRender.contentMode = contentMode;
|
|
409
|
-
newRender.bind(view);
|
|
410
|
-
renderConfig.renders.push(newRender);
|
|
411
|
-
});
|
|
429
|
+
var renderer = this.createRenderer(this.renderMode, this.handleWebGLFallback(config));
|
|
412
430
|
renderer.bind(view);
|
|
413
|
-
|
|
431
|
+
renderers.push(renderer);
|
|
414
432
|
return renderer;
|
|
415
433
|
};
|
|
416
434
|
/**
|