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 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
 
@@ -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.RenderModeFit;
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.equalsElement = function (element) {
23
- if (!element) {
24
- throw new Error('You have pass a element');
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
- throw new Error('parentElement is null');
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 = __importDefault(require("./WebGLRenderer"));
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.renderMode = _this.checkWebglEnv()
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
- this.renderMode = mode;
76
- (0, Utils_1.logInfo)('setRenderMode: new render mode will take effect only if new view bind to render');
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 gl;
144
+ var _a;
145
+ var flag = false;
128
146
  var canvas = document.createElement('canvas');
129
147
  try {
130
- gl =
131
- canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
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
- return false;
167
+ flag = false;
137
168
  }
138
- return !!gl;
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
- this.videoFrameUpdateInterval = setInterval(function () {
364
+ var render = function () {
334
365
  _this.forEachStream(renderFunc);
335
- }, 1000 / this.renderFps);
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
- clearInterval(this.videoFrameUpdateInterval);
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 (failCallback) {
361
- if (this.renderMode === Types_1.RENDER_MODE.SOFTWARE) {
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.default(failCallback);
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, _c, _d;
413
+ var _b;
381
414
  var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
382
- return (((_d = (_c = (_b = this.renderers.get(videoSourceType)) === null || _b === void 0 ? void 0 : _b.get(channelId)) === null || _c === void 0 ? void 0 : _c.get(uid)) === null || _d === void 0 ? void 0 : _d.renders) ||
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 renders = this.getRenderers(config);
392
- var filterRenders = (renders === null || renders === void 0 ? void 0 : renders.filter(function (render) { return render.equalsElement(view); })) || [];
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(function () {
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
- renders.push(renderer);
431
+ renderers.push(renderer);
414
432
  return renderer;
415
433
  };
416
434
  /**