agora-electron-sdk 4.2.6 → 4.3.0-dev.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.
Files changed (172) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/js/Private/AgoraBase.js +139 -174
  3. package/js/Private/AgoraMediaBase.js +49 -20
  4. package/js/Private/AgoraMediaPlayerTypes.js +32 -23
  5. package/js/Private/IAgoraH265Transcoder.js +39 -0
  6. package/js/Private/IAgoraMediaStreamingSource.js +32 -32
  7. package/js/Private/IAgoraMusicContentCenter.js +19 -19
  8. package/js/Private/IAgoraRhythmPlayer.js +9 -9
  9. package/js/Private/IAgoraRtcEngine.js +12 -12
  10. package/js/Private/IAgoraSpatialAudio.js +3 -31
  11. package/js/Private/extension/IAgoraH265TranscoderExtension.js +2 -0
  12. package/js/Private/impl/AgoraMediaBaseImpl.js +26 -2
  13. package/js/Private/impl/IAgoraH265TranscoderImpl.js +119 -0
  14. package/js/Private/impl/IAgoraMediaEngineImpl.js +13 -13
  15. package/js/Private/impl/IAgoraMediaPlayerImpl.js +92 -74
  16. package/js/Private/impl/IAgoraMediaPlayerSourceImpl.js +12 -2
  17. package/js/Private/impl/IAgoraMediaRecorderImpl.js +2 -2
  18. package/js/Private/impl/IAgoraMusicContentCenterImpl.js +20 -20
  19. package/js/Private/impl/IAgoraRtcEngineExImpl.js +66 -84
  20. package/js/Private/impl/IAgoraRtcEngineImpl.js +456 -440
  21. package/js/Private/impl/IAgoraSpatialAudioImpl.js +157 -181
  22. package/js/Private/impl/IAudioDeviceManagerImpl.js +22 -22
  23. package/js/Private/internal/AgoraH265TranscoderInternal.js +86 -0
  24. package/js/Private/internal/AgoraMediaBaseInternal.js +34 -0
  25. package/js/Private/internal/IrisApiEngine.js +35 -20
  26. package/js/Private/internal/LocalSpatialAudioEngineInternal.js +0 -39
  27. package/js/Private/internal/MediaPlayerInternal.js +22 -21
  28. package/js/Private/internal/MusicContentCenterInternal.js +1 -4
  29. package/js/Private/internal/RtcEngineExInternal.js +101 -134
  30. package/js/Private/ti/AgoraMediaBase-ti.js +1 -1
  31. package/js/Private/ti/IAgoraH265Transcoder-ti.js +40 -0
  32. package/js/Private/ti/IAgoraMediaPlayerSource-ti.js +4 -2
  33. package/js/Private/ti/IAgoraMusicContentCenter-ti.js +5 -5
  34. package/js/Private/ti/IAgoraRtcEngine-ti.js +12 -11
  35. package/js/Renderer/AgoraView.js +28 -14
  36. package/js/Renderer/IRenderer.js +65 -17
  37. package/js/Renderer/IRendererManager.js +230 -0
  38. package/js/Renderer/RendererCache.js +170 -0
  39. package/js/Renderer/RendererManager.js +49 -460
  40. package/js/Renderer/WebGLRenderer/index.js +82 -234
  41. package/js/Renderer/YUVCanvasRenderer/index.js +27 -147
  42. package/js/Types.js +6 -6
  43. package/js/Utils.js +37 -88
  44. package/package.json +4 -3
  45. package/scripts/clean.js +12 -0
  46. package/scripts/synclib.js +8 -2
  47. package/ts/Private/AgoraBase.ts +225 -201
  48. package/ts/Private/AgoraMediaBase.ts +63 -25
  49. package/ts/Private/AgoraMediaPlayerTypes.ts +67 -24
  50. package/ts/Private/IAgoraH265Transcoder.ts +73 -0
  51. package/ts/Private/IAgoraLog.ts +1 -0
  52. package/ts/Private/IAgoraMediaEngine.ts +12 -7
  53. package/ts/Private/IAgoraMediaPlayer.ts +47 -21
  54. package/ts/Private/IAgoraMediaPlayerSource.ts +27 -6
  55. package/ts/Private/IAgoraMediaStreamingSource.ts +38 -37
  56. package/ts/Private/IAgoraMusicContentCenter.ts +20 -20
  57. package/ts/Private/IAgoraRhythmPlayer.ts +7 -6
  58. package/ts/Private/IAgoraRtcEngine.ts +407 -364
  59. package/ts/Private/IAgoraRtcEngineEx.ts +25 -61
  60. package/ts/Private/IAgoraSpatialAudio.ts +80 -191
  61. package/ts/Private/IAudioDeviceManager.ts +27 -14
  62. package/ts/Private/extension/IAgoraH265TranscoderExtension.ts +39 -0
  63. package/ts/Private/impl/AgoraMediaBaseImpl.ts +25 -1
  64. package/ts/Private/impl/IAgoraH265TranscoderImpl.ts +152 -0
  65. package/ts/Private/impl/IAgoraMediaEngineImpl.ts +13 -13
  66. package/ts/Private/impl/IAgoraMediaPlayerImpl.ts +110 -81
  67. package/ts/Private/impl/IAgoraMediaPlayerSourceImpl.ts +17 -2
  68. package/ts/Private/impl/IAgoraMediaRecorderImpl.ts +2 -2
  69. package/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +21 -21
  70. package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +71 -106
  71. package/ts/Private/impl/IAgoraRtcEngineImpl.ts +589 -572
  72. package/ts/Private/impl/IAgoraSpatialAudioImpl.ts +211 -218
  73. package/ts/Private/impl/IAudioDeviceManagerImpl.ts +22 -22
  74. package/ts/Private/internal/AgoraH265TranscoderInternal.ts +97 -0
  75. package/ts/Private/internal/AgoraMediaBaseInternal.ts +15 -0
  76. package/ts/Private/internal/IrisApiEngine.ts +42 -27
  77. package/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +1 -86
  78. package/ts/Private/internal/MediaPlayerInternal.ts +20 -29
  79. package/ts/Private/internal/MusicContentCenterInternal.ts +1 -5
  80. package/ts/Private/internal/RtcEngineExInternal.ts +91 -204
  81. package/ts/Private/ti/AgoraMediaBase-ti.ts +1 -1
  82. package/ts/Private/ti/IAgoraH265Transcoder-ti.ts +16 -0
  83. package/ts/Private/ti/IAgoraMediaPlayerSource-ti.ts +4 -2
  84. package/ts/Private/ti/IAgoraMusicContentCenter-ti.ts +5 -5
  85. package/ts/Private/ti/IAgoraRtcEngine-ti.ts +12 -11
  86. package/ts/Renderer/AgoraView.ts +29 -19
  87. package/ts/Renderer/IRenderer.ts +71 -22
  88. package/ts/Renderer/IRendererManager.ts +273 -19
  89. package/ts/Renderer/RendererCache.ts +167 -0
  90. package/ts/Renderer/RendererManager.ts +62 -607
  91. package/ts/Renderer/WebGLRenderer/index.ts +117 -295
  92. package/ts/Renderer/YUVCanvasRenderer/index.ts +45 -198
  93. package/ts/Types.ts +17 -194
  94. package/ts/Utils.ts +36 -100
  95. package/types/Private/AgoraBase.d.ts +219 -200
  96. package/types/Private/AgoraBase.d.ts.map +1 -1
  97. package/types/Private/AgoraMediaBase.d.ts +63 -27
  98. package/types/Private/AgoraMediaBase.d.ts.map +1 -1
  99. package/types/Private/AgoraMediaPlayerTypes.d.ts +65 -24
  100. package/types/Private/AgoraMediaPlayerTypes.d.ts.map +1 -1
  101. package/types/Private/IAgoraH265Transcoder.d.ts +28 -0
  102. package/types/Private/IAgoraH265Transcoder.d.ts.map +1 -0
  103. package/types/Private/IAgoraLog.d.ts.map +1 -1
  104. package/types/Private/IAgoraMediaEngine.d.ts +11 -6
  105. package/types/Private/IAgoraMediaEngine.d.ts.map +1 -1
  106. package/types/Private/IAgoraMediaPlayer.d.ts +42 -20
  107. package/types/Private/IAgoraMediaPlayer.d.ts.map +1 -1
  108. package/types/Private/IAgoraMediaPlayerSource.d.ts +23 -6
  109. package/types/Private/IAgoraMediaPlayerSource.d.ts.map +1 -1
  110. package/types/Private/IAgoraMediaStreamingSource.d.ts.map +1 -1
  111. package/types/Private/IAgoraMusicContentCenter.d.ts +19 -19
  112. package/types/Private/IAgoraMusicContentCenter.d.ts.map +1 -1
  113. package/types/Private/IAgoraRhythmPlayer.d.ts +6 -6
  114. package/types/Private/IAgoraRhythmPlayer.d.ts.map +1 -1
  115. package/types/Private/IAgoraRtcEngine.d.ts +329 -293
  116. package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
  117. package/types/Private/IAgoraRtcEngineEx.d.ts +21 -53
  118. package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -1
  119. package/types/Private/IAgoraSpatialAudio.d.ts +56 -167
  120. package/types/Private/IAgoraSpatialAudio.d.ts.map +1 -1
  121. package/types/Private/IAudioDeviceManager.d.ts +27 -14
  122. package/types/Private/IAudioDeviceManager.d.ts.map +1 -1
  123. package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts +24 -0
  124. package/types/Private/extension/IAgoraH265TranscoderExtension.d.ts.map +1 -0
  125. package/types/Private/impl/AgoraMediaBaseImpl.d.ts +5 -1
  126. package/types/Private/impl/AgoraMediaBaseImpl.d.ts.map +1 -1
  127. package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts +15 -0
  128. package/types/Private/impl/IAgoraH265TranscoderImpl.d.ts.map +1 -0
  129. package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts +6 -4
  130. package/types/Private/impl/IAgoraMediaPlayerImpl.d.ts.map +1 -1
  131. package/types/Private/impl/IAgoraMediaPlayerSourceImpl.d.ts.map +1 -1
  132. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts +2 -4
  133. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -1
  134. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts +30 -25
  135. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -1
  136. package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts +20 -22
  137. package/types/Private/impl/IAgoraSpatialAudioImpl.d.ts.map +1 -1
  138. package/types/Private/internal/AgoraH265TranscoderInternal.d.ts +14 -0
  139. package/types/Private/internal/AgoraH265TranscoderInternal.d.ts.map +1 -0
  140. package/types/Private/internal/AgoraMediaBaseInternal.d.ts +8 -0
  141. package/types/Private/internal/AgoraMediaBaseInternal.d.ts.map +1 -0
  142. package/types/Private/internal/IrisApiEngine.d.ts +5 -2
  143. package/types/Private/internal/IrisApiEngine.d.ts.map +1 -1
  144. package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts +0 -15
  145. package/types/Private/internal/LocalSpatialAudioEngineInternal.d.ts.map +1 -1
  146. package/types/Private/internal/MediaPlayerInternal.d.ts.map +1 -1
  147. package/types/Private/internal/MusicContentCenterInternal.d.ts +0 -1
  148. package/types/Private/internal/MusicContentCenterInternal.d.ts.map +1 -1
  149. package/types/Private/internal/RtcEngineExInternal.d.ts +7 -13
  150. package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -1
  151. package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts +8 -0
  152. package/types/Private/ti/IAgoraH265Transcoder-ti.d.ts.map +1 -0
  153. package/types/Private/ti/IAgoraMediaPlayerSource-ti.d.ts.map +1 -1
  154. package/types/Private/ti/IAgoraRtcEngine-ti.d.ts.map +1 -1
  155. package/types/Renderer/AgoraView.d.ts +4 -4
  156. package/types/Renderer/AgoraView.d.ts.map +1 -1
  157. package/types/Renderer/IRenderer.d.ts +11 -9
  158. package/types/Renderer/IRenderer.d.ts.map +1 -1
  159. package/types/Renderer/IRendererManager.d.ts +50 -12
  160. package/types/Renderer/IRendererManager.d.ts.map +1 -1
  161. package/types/Renderer/RendererCache.d.ts +36 -0
  162. package/types/Renderer/RendererCache.d.ts.map +1 -0
  163. package/types/Renderer/RendererManager.d.ts +13 -139
  164. package/types/Renderer/RendererManager.d.ts.map +1 -1
  165. package/types/Renderer/WebGLRenderer/index.d.ts +3 -18
  166. package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -1
  167. package/types/Renderer/YUVCanvasRenderer/index.d.ts +4 -10
  168. package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -1
  169. package/types/Types.d.ts +11 -187
  170. package/types/Types.d.ts.map +1 -1
  171. package/types/Utils.d.ts +3 -20
  172. package/types/Utils.d.ts.map +1 -1
@@ -27,8 +27,6 @@ var __assign = (this && this.__assign) || function () {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.RendererManager = void 0;
30
- var AgoraBase_1 = require("../Private/AgoraBase");
31
- var AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
32
30
  var Types_1 = require("../Types");
33
31
  var Utils_1 = require("../Utils");
34
32
  var IRendererManager_1 = require("./IRendererManager");
@@ -41,485 +39,76 @@ var RendererManager = /** @class */ (function (_super) {
41
39
  __extends(RendererManager, _super);
42
40
  function RendererManager() {
43
41
  var _this = _super.call(this) || this;
44
- /**
45
- * @ignore
46
- */
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
- }; };
62
- _this.renderFps = 15;
63
- _this.renderers = new Map();
64
- _this.setRenderMode();
65
- _this.msgBridge = Utils_1.AgoraEnv.AgoraElectronBridge;
66
- _this.defaultRenderConfig = {
67
- rendererOptions: {
68
- contentMode: AgoraMediaBase_1.RenderModeType.RenderModeFit,
69
- mirror: false,
70
- },
71
- };
42
+ _this._rendererType = (0, Utils_1.isSupportWebGL)()
43
+ ? Types_1.RendererType.WEBGL
44
+ : Types_1.RendererType.SOFTWARE;
72
45
  return _this;
73
46
  }
47
+ Object.defineProperty(RendererManager.prototype, "rendererType", {
48
+ get: function () {
49
+ return this._rendererType;
50
+ },
51
+ set: function (rendererType) {
52
+ if (this._rendererType !== rendererType) {
53
+ this._rendererType = rendererType;
54
+ }
55
+ },
56
+ enumerable: false,
57
+ configurable: true
58
+ });
74
59
  /**
75
- * Sets the channel mode of the current audio file.
76
- * In a stereo music file, the left and right channels can store different audio data. According to your needs, you can set the channel mode to original mode, left channel mode, right channel mode, or mixed channel mode. For example, in the KTV scenario, the left channel of the music file stores the musical accompaniment, and the right channel stores the singing voice. If you only need to listen to the accompaniment, call this method to set the channel mode of the music file to left channel mode; if you need to listen to the accompaniment and the singing voice at the same time, call this method to set the channel mode to mixed channel mode.Call this method after calling open .This method only applies to stereo audio files.
77
- *
78
- * @param mode The channel mode. See AudioDualMonoMode .
79
- *
80
- * @returns
81
- * 0: Success.< 0: Failure.
60
+ * @deprecated Use rendererType instead
82
61
  */
83
62
  RendererManager.prototype.setRenderMode = function (mode) {
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
- }
63
+ this.rendererType = mode;
94
64
  };
95
65
  /**
96
- * @ignore
66
+ * @deprecated Use renderingFps instead
97
67
  */
98
68
  RendererManager.prototype.setFPS = function (fps) {
99
- this.renderFps = fps;
100
- this.restartRender();
101
- };
102
- /**
103
- * @ignore
104
- */
105
- RendererManager.prototype.setRenderOption = function (view, contentMode, mirror) {
106
- if (contentMode === void 0) { contentMode = AgoraMediaBase_1.RenderModeType.RenderModeFit; }
107
- if (mirror === void 0) { mirror = false; }
108
- if (!view) {
109
- (0, Utils_1.logError)('setRenderOption: view not exist', view);
110
- }
111
- this.forEachStream(function (_a) {
112
- var renders = _a.renders;
113
- renders === null || renders === void 0 ? void 0 : renders.forEach(function (render) {
114
- if (render.equalsElement(view)) {
115
- render.setRenderOption({ contentMode: contentMode, mirror: mirror });
116
- }
117
- });
118
- });
119
- };
120
- /**
121
- * @ignore
122
- */
123
- RendererManager.prototype.setRenderOptionByConfig = function (rendererConfig) {
124
- var _a = (0, Utils_1.getDefaultRendererVideoConfig)(rendererConfig), uid = _a.uid, channelId = _a.channelId, rendererOptions = _a.rendererOptions, videoSourceType = _a.videoSourceType;
125
- var renderList = this.getRenderers({ uid: uid, channelId: channelId, videoSourceType: videoSourceType });
126
- renderList
127
- ? renderList
128
- .filter(function (renderItem) {
129
- if (rendererConfig.view) {
130
- return renderItem.equalsElement(rendererConfig.view);
131
- }
132
- else {
133
- return true;
134
- }
135
- })
136
- .forEach(function (renderItem) { return renderItem.setRenderOption(rendererOptions); })
137
- : (0, Utils_1.logWarn)("RenderStreamType: ".concat(videoSourceType, " channelId:").concat(channelId, " uid:").concat(uid, " have no render view, you need to call this api after setView"));
138
- return AgoraBase_1.ErrorCodeType.ErrOk;
139
- };
140
- /**
141
- * @ignore
142
- */
143
- RendererManager.prototype.checkWebglEnv = function () {
144
- var _a;
145
- var flag = false;
146
- var canvas = document.createElement('canvas');
147
- try {
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;
163
- (0, Utils_1.logInfo)('Your browser support webGL');
164
- }
165
- catch (e) {
166
- (0, Utils_1.logWarn)('Your browser may not support webGL');
167
- flag = false;
168
- }
169
- return flag;
170
- };
171
- /**
172
- * @ignore
173
- */
174
- RendererManager.prototype.setupVideo = function (rendererVideoConfig) {
175
- var formatConfig = (0, Utils_1.getDefaultRendererVideoConfig)(rendererVideoConfig);
176
- var uid = formatConfig.uid, channelId = formatConfig.channelId, videoSourceType = formatConfig.videoSourceType, rendererOptions = formatConfig.rendererOptions, view = formatConfig.view;
177
- if (!formatConfig.view) {
178
- (0, Utils_1.logWarn)('setupVideo->destroyRenderersByConfig, because of view is null');
179
- this.destroyRenderersByConfig(videoSourceType, channelId, uid);
180
- return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
181
- }
182
- // ensure a render to RenderMap
183
- var render = this.bindHTMLElementToRender(formatConfig, view);
184
- // render config
185
- render === null || render === void 0 ? void 0 : render.setRenderOption(rendererOptions);
186
- // enable iris videoFrame
187
- this.enableVideoFrameCache({
188
- uid: uid,
189
- channelId: channelId,
190
- videoSourceType: videoSourceType,
191
- });
192
- // enable render
193
- this.enableRender(true);
194
- return AgoraBase_1.ErrorCodeType.ErrOk;
195
- };
196
- /**
197
- * @ignore
198
- */
199
- RendererManager.prototype.setupLocalVideo = function (rendererConfig) {
200
- var videoSourceType = rendererConfig.videoSourceType;
201
- if (videoSourceType === AgoraMediaBase_1.VideoSourceType.VideoSourceRemote) {
202
- (0, Utils_1.logError)('setupLocalVideo videoSourceType error', videoSourceType);
203
- return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
204
- }
205
- this.setupVideo(__assign({}, rendererConfig));
206
- return AgoraBase_1.ErrorCodeType.ErrOk;
69
+ this.renderingFps = fps;
207
70
  };
208
71
  /**
209
- * @ignore
72
+ * @deprecated Use getRendererCache instead
210
73
  */
211
- RendererManager.prototype.setupRemoteVideo = function (rendererConfig) {
212
- var videoSourceType = rendererConfig.videoSourceType;
213
- if (videoSourceType !== AgoraMediaBase_1.VideoSourceType.VideoSourceRemote) {
214
- (0, Utils_1.logError)('setupRemoteVideo videoSourceType error', videoSourceType);
215
- return -AgoraBase_1.ErrorCodeType.ErrInvalidArgument;
216
- }
217
- this.setupVideo(__assign({}, rendererConfig));
218
- return AgoraBase_1.ErrorCodeType.ErrOk;
74
+ RendererManager.prototype.getRender = function (context) {
75
+ return this.getRendererCache(context);
219
76
  };
220
- /**
221
- * Destroys a video renderer object.
222
- *
223
- * @param view The HTMLElement object to be destroyed.
224
- */
225
- RendererManager.prototype.destroyRendererByView = function (view) {
226
- var _this = this;
227
- var renders = this.renderers;
228
- renders.forEach(function (channelMap, videoSourceType) {
229
- channelMap.forEach(function (uidMap, channelId) {
230
- uidMap.forEach(function (renderConfig, uid) {
231
- var _a;
232
- var hasRender = false;
233
- var remainRenders = (_a = renderConfig.renders) === null || _a === void 0 ? void 0 : _a.filter(function (render) {
234
- var isFilter = render.equalsElement(view);
235
- if (isFilter) {
236
- hasRender = true;
237
- render.unbind();
238
- }
239
- return !isFilter;
240
- });
241
- if (!hasRender) {
242
- return;
243
- }
244
- if ((remainRenders === null || remainRenders === void 0 ? void 0 : remainRenders.length) === 0 || !remainRenders) {
245
- _this.disableVideoFrameCache({ uid: uid, channelId: channelId, videoSourceType: videoSourceType });
246
- }
247
- renderConfig.renders = remainRenders;
248
- });
249
- });
250
- });
251
- };
252
- /**
253
- * @ignore
254
- */
255
- RendererManager.prototype.destroyRenderersByConfig = function (videoSourceType, channelId, uid) {
256
- var _a, _b;
257
- var config = (0, Utils_1.formatConfigByVideoSourceType)(videoSourceType, channelId, uid);
258
- videoSourceType = config.videoSourceType;
259
- channelId = config.channelId;
260
- uid = config.uid;
261
- this.disableVideoFrameCache(config);
262
- var uidMap = (_a = this.renderers.get(videoSourceType)) === null || _a === void 0 ? void 0 : _a.get(channelId);
263
- var renderMap = uidMap === null || uidMap === void 0 ? void 0 : uidMap.get(uid);
264
- if (!renderMap) {
265
- return;
77
+ RendererManager.prototype.createRenderer = function (context, rendererType) {
78
+ if (rendererType === undefined) {
79
+ rendererType = this.rendererType;
266
80
  }
267
- (_b = renderMap.renders) === null || _b === void 0 ? void 0 : _b.forEach(function (renderItem) {
268
- renderItem.unbind();
269
- });
270
- renderMap.renders = [];
271
- };
272
- /**
273
- * @ignore
274
- */
275
- RendererManager.prototype.removeAllRenderer = function () {
276
- var _this = this;
277
- var renderMap = this.forEachStream(function (renderConfig, videoFrameCacheConfig) {
278
- var _a;
279
- _this.disableVideoFrameCache(videoFrameCacheConfig);
280
- (_a = renderConfig.renders) === null || _a === void 0 ? void 0 : _a.forEach(function (renderItem) {
281
- renderItem.unbind();
282
- });
283
- renderConfig.renders = [];
284
- });
285
- renderMap.clear();
286
- };
287
- /**
288
- * @ignore
289
- */
290
- RendererManager.prototype.clear = function () {
291
- this.stopRender();
292
- this.removeAllRenderer();
293
- };
294
- /**
295
- * Enables/Disables the local video capture.
296
- * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel.
297
- *
298
- * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera.
299
- *
300
- * @returns
301
- * 0: Success.< 0: Failure.
302
- */
303
- RendererManager.prototype.enableRender = function (enabled) {
304
- if (enabled === void 0) { enabled = true; }
305
- if (enabled && this.isRendering) {
306
- //is already _isRendering
307
- }
308
- else if (enabled && !this.isRendering) {
309
- this.startRenderer();
310
- }
311
- else {
312
- this.stopRender();
81
+ var renderer;
82
+ switch (rendererType) {
83
+ case Types_1.RendererType.WEBGL:
84
+ renderer = new WebGLRenderer_1.WebGLRenderer(this.handleWebGLFallback(context).bind(this));
85
+ break;
86
+ case Types_1.RendererType.SOFTWARE:
87
+ renderer = new YUVCanvasRenderer_1.YUVCanvasRenderer();
88
+ break;
89
+ default:
90
+ throw new Error('Unknown renderer type');
313
91
  }
314
- };
315
- /**
316
- * @ignore
317
- */
318
- RendererManager.prototype.startRenderer = function () {
319
- var _this = this;
320
- this.isRendering = true;
321
- var renderFunc = function (rendererItem, _a) {
322
- var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
323
- var renders = rendererItem.renders;
324
- if (!renders || (renders === null || renders === void 0 ? void 0 : renders.length) === 0) {
325
- return;
326
- }
327
- var finalResult = _this.msgBridge.GetVideoFrame(rendererItem.shareVideoFrame);
328
- switch (finalResult.ret) {
329
- case 0:
330
- // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::OK = 0,
331
- // everything is ok
332
- break;
333
- case 1: {
334
- // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED
335
- var width = finalResult.width, height = finalResult.height, yStride = finalResult.yStride;
336
- var newShareVideoFrame = _this.resizeShareVideoFrame(videoSourceType, channelId, uid, width, height, yStride);
337
- rendererItem.shareVideoFrame = newShareVideoFrame;
338
- finalResult = _this.msgBridge.GetVideoFrame(newShareVideoFrame);
339
- break;
340
- }
341
- case 2:
342
- // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::NO_CACHE
343
- // setupVideo/AgoraView render before initialize
344
- // this.enableVideoFrameCache({ videoSourceType, channelId, uid });
345
- break;
346
- default:
347
- break;
348
- }
349
- if (finalResult.ret !== 0) {
350
- (0, Utils_1.logDebug)('GetVideoFrame ret is', finalResult.ret, rendererItem);
351
- return;
352
- }
353
- if (!finalResult.isNewFrame) {
354
- (0, Utils_1.logDebug)('GetVideoFrame isNewFrame is false', rendererItem);
355
- return;
356
- }
357
- var renderVideoFrame = rendererItem.shareVideoFrame;
358
- if (renderVideoFrame.width > 0 && renderVideoFrame.height > 0) {
359
- renders.forEach(function (renderItem) {
360
- renderItem.drawFrame(rendererItem.shareVideoFrame);
361
- });
362
- }
363
- };
364
- var render = function () {
365
- _this.forEachStream(renderFunc);
366
- _this.videoFrameUpdateInterval = setTimeout(render, 1000 / _this.renderFps);
92
+ renderer.bind(context.view);
93
+ renderer.context = {
94
+ renderMode: context.renderMode,
95
+ mirrorMode: context.mirrorMode,
367
96
  };
368
- render();
369
- };
370
- /**
371
- * @ignore
372
- */
373
- RendererManager.prototype.stopRender = function () {
374
- this.isRendering = false;
375
- if (this.videoFrameUpdateInterval) {
376
- clearTimeout(this.videoFrameUpdateInterval);
377
- this.videoFrameUpdateInterval = undefined;
378
- }
379
- };
380
- /**
381
- * @ignore
382
- */
383
- RendererManager.prototype.restartRender = function () {
384
- if (this.videoFrameUpdateInterval) {
385
- this.stopRender();
386
- this.startRenderer();
387
- (0, Utils_1.logInfo)("restartRender: Fps: ".concat(this.renderFps, " restartInterval"));
388
- }
389
- };
390
- /**
391
- * @ignore
392
- */
393
- RendererManager.prototype.createRenderer = function (renderMode, fallback) {
394
- if (renderMode === Types_1.RENDER_MODE.SOFTWARE) {
395
- return new YUVCanvasRenderer_1.YUVCanvasRenderer();
396
- }
397
- else {
398
- return new WebGLRenderer_1.WebGLRenderer(fallback);
399
- }
400
- };
401
- /**
402
- * @ignore
403
- */
404
- RendererManager.prototype.getRender = function (_a) {
405
- var _b, _c;
406
- var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
407
- return (_c = (_b = this.renderers.get(videoSourceType)) === null || _b === void 0 ? void 0 : _b.get(channelId)) === null || _c === void 0 ? void 0 : _c.get(uid);
408
- };
409
- /**
410
- * @ignore
411
- */
412
- RendererManager.prototype.getRenderers = function (_a) {
413
- var _b;
414
- var videoSourceType = _a.videoSourceType, channelId = _a.channelId, uid = _a.uid;
415
- return ((_b = this.getRender({ videoSourceType: videoSourceType, channelId: channelId, uid: uid })) === null || _b === void 0 ? void 0 : _b.renders) || [];
416
- };
417
- /**
418
- * @ignore
419
- */
420
- RendererManager.prototype.bindHTMLElementToRender = function (config, view) {
421
- this.ensureRendererConfig(config);
422
- var renderers = this.getRenderers(config);
423
- var filterRenders = (renderers === null || renderers === void 0 ? void 0 : renderers.filter(function (render) { return render.equalsElement(view); })) || [];
424
- var hasBeenAdd = filterRenders.length > 0;
425
- if (hasBeenAdd) {
426
- (0, Utils_1.logWarn)('bindHTMLElementToRender: this view has bind to render', filterRenders);
427
- return filterRenders[0];
428
- }
429
- var renderer = this.createRenderer(this.renderMode, this.handleWebGLFallback(config));
430
- renderer.bind(view);
431
- renderers.push(renderer);
432
97
  return renderer;
433
98
  };
434
- /**
435
- * @ignore
436
- */
437
- RendererManager.prototype.forEachStream = function (callbackfn) {
438
- var renders = this.renderers;
439
- renders.forEach(function (channelMap, videoSourceType) {
440
- channelMap.forEach(function (uidMap, channelId) {
441
- uidMap.forEach(function (renderConfig, uid) {
442
- callbackfn(renderConfig, { videoSourceType: videoSourceType, channelId: channelId, uid: uid }, { channelMap: channelMap, uidMap: uidMap });
443
- });
444
- });
445
- });
446
- return renders;
447
- };
448
- /**
449
- * @ignore
450
- */
451
- RendererManager.prototype.enableVideoFrameCache = function (videoFrameCacheConfig) {
452
- (0, Utils_1.logDebug)("enableVideoFrameCache ".concat(JSON.stringify(videoFrameCacheConfig)));
453
- this.msgBridge.EnableVideoFrameCache(videoFrameCacheConfig);
454
- };
455
- /**
456
- * @ignore
457
- */
458
- RendererManager.prototype.disableVideoFrameCache = function (videoFrameCacheConfig) {
459
- (0, Utils_1.logDebug)("disableVideoFrameCache ".concat(JSON.stringify(videoFrameCacheConfig)));
460
- this.msgBridge.DisableVideoFrameCache(videoFrameCacheConfig);
461
- };
462
- /**
463
- * @ignore
464
- */
465
- RendererManager.prototype.ensureRendererConfig = function (config) {
466
- var videoSourceType = config.videoSourceType, uid = config.uid, channelId = config.channelId;
467
- var emptyRenderConfig = {
468
- renders: [],
469
- shareVideoFrame: this.resizeShareVideoFrame(videoSourceType, channelId, uid),
470
- };
471
- var emptyUidMap = new Map([[uid, emptyRenderConfig]]);
472
- var emptyChannelMap = new Map([[channelId, emptyUidMap]]);
473
- var renderers = this.renderers;
474
- var videoSourceMap = renderers.get(videoSourceType);
475
- if (!videoSourceMap) {
476
- renderers.set(videoSourceType, emptyChannelMap);
477
- return emptyUidMap;
478
- }
479
- var channelMap = videoSourceMap.get(channelId);
480
- if (!channelMap) {
481
- videoSourceMap.set(channelId, emptyUidMap);
482
- return emptyUidMap;
483
- }
484
- var renderConfig = channelMap === null || channelMap === void 0 ? void 0 : channelMap.get(uid);
485
- if (!renderConfig) {
486
- channelMap === null || channelMap === void 0 ? void 0 : channelMap.set(uid, emptyRenderConfig);
487
- (0, Utils_1.logWarn)("ensureRendererMap uid map for channelId:".concat(channelId, " uid:").concat(uid));
488
- return emptyUidMap;
489
- }
490
- return channelMap;
99
+ RendererManager.prototype.doRendering = function (rendererCache) {
100
+ rendererCache.draw();
491
101
  };
492
- /**
493
- * @ignore
494
- */
495
- RendererManager.prototype.resizeShareVideoFrame = function (videoSourceType, channelId, uid, width, height, yStride) {
496
- if (width === void 0) { width = 0; }
497
- if (height === void 0) { height = 0; }
498
- if (yStride === void 0) { yStride = 0; }
499
- return {
500
- videoSourceType: videoSourceType,
501
- channelId: channelId,
502
- uid: uid,
503
- yBuffer: Buffer.alloc(yStride * height),
504
- uBuffer: Buffer.alloc((yStride * height) / 4),
505
- vBuffer: Buffer.alloc((yStride * height) / 4),
506
- width: width,
507
- height: height,
508
- yStride: yStride,
102
+ RendererManager.prototype.handleWebGLFallback = function (context) {
103
+ var _this = this;
104
+ return function (renderer) {
105
+ var _a = renderer.context, renderMode = _a.renderMode, mirrorMode = _a.mirrorMode;
106
+ var renderers = _this.getRenderers(context);
107
+ renderer.unbind();
108
+ var newRenderer = _this.createRenderer(__assign(__assign({}, context), { renderMode: renderMode, mirrorMode: mirrorMode }), Types_1.RendererType.SOFTWARE);
109
+ renderers.splice(renderers.indexOf(renderer), 1, newRenderer);
509
110
  };
510
111
  };
511
- /**
512
- * @ignore
513
- */
514
- RendererManager.prototype.updateVideoFrameCacheInMap = function (config, shareVideoFrame) {
515
- var _a;
516
- var rendererConfigMap = this.ensureRendererConfig(config);
517
- rendererConfigMap
518
- ? Object.assign((_a = rendererConfigMap.get(config.uid)) !== null && _a !== void 0 ? _a : {}, {
519
- shareVideoFrame: shareVideoFrame,
520
- })
521
- : (0, Utils_1.logWarn)("updateVideoFrameCacheInMap videoSourceType:".concat(config.videoSourceType, " channelId:").concat(config.channelId, " uid:").concat(config.uid, " rendererConfigMap is null"));
522
- };
523
112
  return RendererManager;
524
113
  }(IRendererManager_1.IRendererManager));
525
114
  exports.RendererManager = RendererManager;