agora-electron-sdk 4.5.1 → 4.5.2-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 (99) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/js/Decoder/gpu-utils.js +74 -0
  3. package/js/Decoder/index.js +172 -0
  4. package/js/Private/AgoraBase.js +15 -3
  5. package/js/Private/extension/AgoraBaseExtension.js +1 -0
  6. package/js/Private/internal/IrisApiEngine.js +20 -7
  7. package/js/Private/internal/RtcEngineExInternal.js +31 -16
  8. package/js/Private/ipc/main.js +21 -0
  9. package/js/Private/ipc/renderer.js +21 -0
  10. package/js/Renderer/CapabilityManager.js +99 -0
  11. package/js/Renderer/IRenderer.js +40 -11
  12. package/js/Renderer/IRendererCache.js +75 -0
  13. package/js/Renderer/RendererCache.js +26 -63
  14. package/js/Renderer/RendererManager.js +259 -38
  15. package/js/Renderer/WebCodecsRenderer/index.js +109 -0
  16. package/js/Renderer/WebCodecsRendererCache.js +115 -0
  17. package/js/Renderer/WebGLRenderer/index.js +115 -67
  18. package/js/Renderer/YUVCanvasRenderer/index.js +5 -3
  19. package/js/Renderer/index.js +0 -1
  20. package/js/Types.js +51 -1
  21. package/js/Utils.js +47 -7
  22. package/package.json +28 -11
  23. package/scripts/checkElectron.js +4 -2
  24. package/scripts/download.js +105 -0
  25. package/scripts/downloadPrebuild.js +2 -1
  26. package/scripts/synclib.js +2 -2
  27. package/ts/Decoder/gpu-utils.ts +92 -0
  28. package/ts/Decoder/index.ts +206 -0
  29. package/ts/Private/AgoraBase.ts +18 -4
  30. package/ts/Private/IAgoraRtcEngine.ts +6 -7
  31. package/ts/Private/IAgoraRtcEngineEx.ts +2 -1
  32. package/ts/Private/extension/AgoraBaseExtension.ts +14 -1
  33. package/ts/Private/internal/IrisApiEngine.ts +21 -7
  34. package/ts/Private/internal/RtcEngineExInternal.ts +27 -8
  35. package/ts/Private/ipc/main.ts +22 -0
  36. package/ts/Private/ipc/renderer.ts +21 -0
  37. package/ts/Renderer/CapabilityManager.ts +126 -0
  38. package/ts/Renderer/IRenderer.ts +52 -17
  39. package/ts/Renderer/IRendererCache.ts +96 -0
  40. package/ts/Renderer/RendererCache.ts +42 -85
  41. package/ts/Renderer/RendererManager.ts +342 -52
  42. package/ts/Renderer/WebCodecsRenderer/index.ts +145 -0
  43. package/ts/Renderer/WebCodecsRendererCache.ts +137 -0
  44. package/ts/Renderer/WebGLRenderer/index.ts +153 -107
  45. package/ts/Renderer/YUVCanvasRenderer/index.ts +24 -22
  46. package/ts/Renderer/index.ts +0 -1
  47. package/ts/Types.ts +130 -7
  48. package/ts/Utils.ts +53 -7
  49. package/types/Decoder/gpu-utils.d.ts +21 -0
  50. package/types/Decoder/gpu-utils.d.ts.map +1 -0
  51. package/types/Decoder/index.d.ts +26 -0
  52. package/types/Decoder/index.d.ts.map +1 -0
  53. package/types/Private/AgoraBase.d.ts +18 -4
  54. package/types/Private/AgoraBase.d.ts.map +1 -1
  55. package/types/Private/IAgoraRtcEngine.d.ts +6 -7
  56. package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
  57. package/types/Private/IAgoraRtcEngineEx.d.ts +2 -1
  58. package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -1
  59. package/types/Private/extension/AgoraBaseExtension.d.ts +13 -1
  60. package/types/Private/extension/AgoraBaseExtension.d.ts.map +1 -1
  61. package/types/Private/internal/IrisApiEngine.d.ts +2 -0
  62. package/types/Private/internal/IrisApiEngine.d.ts.map +1 -1
  63. package/types/Private/internal/RtcEngineExInternal.d.ts +2 -0
  64. package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -1
  65. package/types/Private/ipc/main.d.ts +2 -0
  66. package/types/Private/ipc/main.d.ts.map +1 -0
  67. package/types/Private/ipc/renderer.d.ts +3 -0
  68. package/types/Private/ipc/renderer.d.ts.map +1 -0
  69. package/types/Renderer/CapabilityManager.d.ts +20 -0
  70. package/types/Renderer/CapabilityManager.d.ts.map +1 -0
  71. package/types/Renderer/IRenderer.d.ts +8 -7
  72. package/types/Renderer/IRenderer.d.ts.map +1 -1
  73. package/types/Renderer/IRendererCache.d.ts +26 -0
  74. package/types/Renderer/IRendererCache.d.ts.map +1 -0
  75. package/types/Renderer/RendererCache.d.ts +6 -18
  76. package/types/Renderer/RendererCache.d.ts.map +1 -1
  77. package/types/Renderer/RendererManager.d.ts +49 -15
  78. package/types/Renderer/RendererManager.d.ts.map +1 -1
  79. package/types/Renderer/WebCodecsRenderer/index.d.ts +14 -0
  80. package/types/Renderer/WebCodecsRenderer/index.d.ts.map +1 -0
  81. package/types/Renderer/WebCodecsRendererCache.d.ts +15 -0
  82. package/types/Renderer/WebCodecsRendererCache.d.ts.map +1 -0
  83. package/types/Renderer/WebGLRenderer/index.d.ts +5 -3
  84. package/types/Renderer/WebGLRenderer/index.d.ts.map +1 -1
  85. package/types/Renderer/YUVCanvasRenderer/index.d.ts +1 -1
  86. package/types/Renderer/YUVCanvasRenderer/index.d.ts.map +1 -1
  87. package/types/Renderer/index.d.ts +0 -1
  88. package/types/Renderer/index.d.ts.map +1 -1
  89. package/types/Types.d.ts +99 -8
  90. package/types/Types.d.ts.map +1 -1
  91. package/types/Utils.d.ts +4 -0
  92. package/types/Utils.d.ts.map +1 -1
  93. package/js/Renderer/IRendererManager.js +0 -229
  94. package/scripts/publishCN/common.sh +0 -19
  95. package/scripts/publishCN/rewrite-dep.sh +0 -22
  96. package/scripts/publishCN/rewrite-example.sh +0 -22
  97. package/ts/Renderer/IRendererManager.ts +0 -316
  98. package/types/Renderer/IRendererManager.d.ts +0 -56
  99. package/types/Renderer/IRendererManager.d.ts.map +0 -1
@@ -1,229 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IRendererManager = void 0;
4
- const AgoraBase_1 = require("../Private/AgoraBase");
5
- const AgoraMediaBase_1 = require("../Private/AgoraMediaBase");
6
- const Utils_1 = require("../Utils");
7
- const RendererCache_1 = require("./RendererCache");
8
- /**
9
- * @ignore
10
- */
11
- class IRendererManager {
12
- constructor() {
13
- this._renderingFps = 15;
14
- this._currentFrameCount = 0;
15
- this._previousFirstFrameTime = 0;
16
- this._rendererCaches = [];
17
- this._context = {
18
- renderMode: AgoraMediaBase_1.RenderModeType.RenderModeHidden,
19
- mirrorMode: AgoraBase_1.VideoMirrorModeType.VideoMirrorModeDisabled,
20
- };
21
- }
22
- set renderingFps(fps) {
23
- if (this._renderingFps !== fps) {
24
- this._renderingFps = fps;
25
- if (this._renderingTimer) {
26
- this.stopRendering();
27
- this.startRendering();
28
- }
29
- }
30
- }
31
- get renderingFps() {
32
- return this._renderingFps;
33
- }
34
- set defaultChannelId(channelId) {
35
- this._context.channelId = channelId;
36
- }
37
- get defaultChannelId() {
38
- return this._context.channelId ?? '';
39
- }
40
- get defaultRenderMode() {
41
- return this._context.renderMode;
42
- }
43
- get defaultMirrorMode() {
44
- return this._context.mirrorMode;
45
- }
46
- release() {
47
- this.stopRendering();
48
- this.clearRendererCache();
49
- }
50
- precheckRendererContext(context) {
51
- let { sourceType, uid, channelId, position, mediaPlayerId, renderMode = this.defaultRenderMode, mirrorMode = this.defaultMirrorMode, } = context;
52
- switch (sourceType) {
53
- case AgoraMediaBase_1.VideoSourceType.VideoSourceRemote:
54
- if (uid === undefined) {
55
- throw new Error('uid is required');
56
- }
57
- channelId = channelId ?? this.defaultChannelId;
58
- break;
59
- case AgoraMediaBase_1.VideoSourceType.VideoSourceMediaPlayer:
60
- if (mediaPlayerId === undefined) {
61
- throw new Error('mediaPlayerId is required');
62
- }
63
- channelId = '';
64
- uid = mediaPlayerId;
65
- break;
66
- case undefined:
67
- if (uid) {
68
- sourceType = AgoraMediaBase_1.VideoSourceType.VideoSourceRemote;
69
- }
70
- break;
71
- default:
72
- channelId = '';
73
- uid = 0;
74
- break;
75
- }
76
- if (!position) {
77
- position =
78
- AgoraMediaBase_1.VideoModulePosition.PositionPreEncoder |
79
- AgoraMediaBase_1.VideoModulePosition.PositionPreRenderer;
80
- }
81
- return {
82
- ...context,
83
- position,
84
- sourceType,
85
- uid,
86
- channelId,
87
- renderMode,
88
- mirrorMode,
89
- };
90
- }
91
- addOrRemoveRenderer(context) {
92
- // To be compatible with the old API
93
- let { setupMode = AgoraBase_1.VideoViewSetupMode.VideoViewSetupAdd } = context;
94
- if (!context.view)
95
- setupMode = AgoraBase_1.VideoViewSetupMode.VideoViewSetupRemove;
96
- switch (setupMode) {
97
- case AgoraBase_1.VideoViewSetupMode.VideoViewSetupAdd:
98
- return this.addRendererToCache(context);
99
- case AgoraBase_1.VideoViewSetupMode.VideoViewSetupRemove:
100
- this.removeRendererFromCache(context);
101
- return undefined;
102
- case AgoraBase_1.VideoViewSetupMode.VideoViewSetupReplace:
103
- this.removeRendererFromCache(context);
104
- return this.addRendererToCache(context);
105
- }
106
- }
107
- addRendererToCache(context) {
108
- const checkedContext = this.precheckRendererContext(context);
109
- if (!checkedContext.view)
110
- return undefined;
111
- if (this.findRenderer(checkedContext.view)) {
112
- throw new Error('You have already added this view to the renderer');
113
- }
114
- let rendererCache = this.getRendererCache(checkedContext);
115
- if (!rendererCache) {
116
- rendererCache = new RendererCache_1.RendererCache(checkedContext);
117
- this._rendererCaches.push(rendererCache);
118
- }
119
- rendererCache.addRenderer(this.createRenderer(checkedContext));
120
- this.startRendering();
121
- return rendererCache;
122
- }
123
- removeRendererFromCache(context) {
124
- const checkedContext = this.precheckRendererContext(context);
125
- const rendererCache = this.getRendererCache(checkedContext);
126
- if (rendererCache) {
127
- if (checkedContext.view) {
128
- const renderer = rendererCache.findRenderer(checkedContext.view);
129
- if (!renderer)
130
- return;
131
- rendererCache.removeRenderer(renderer);
132
- }
133
- else {
134
- rendererCache.removeRenderer();
135
- }
136
- if (rendererCache.renderers.length === 0) {
137
- this._rendererCaches.splice(this._rendererCaches.indexOf(rendererCache), 1);
138
- }
139
- }
140
- else {
141
- this._rendererCaches = this._rendererCaches.filter((_rendererCache) => {
142
- const renderer = _rendererCache.findRenderer(checkedContext.view);
143
- if (renderer) {
144
- _rendererCache.removeRenderer(renderer);
145
- }
146
- return _rendererCache.renderers.length > 0;
147
- });
148
- }
149
- }
150
- clearRendererCache() {
151
- for (const rendererCache of this._rendererCaches) {
152
- rendererCache.removeRenderer();
153
- }
154
- this._rendererCaches.splice(0);
155
- }
156
- getRendererCache(context) {
157
- return this._rendererCaches.find((cache) => cache.key === (0, RendererCache_1.generateRendererCacheKey)(context));
158
- }
159
- getRenderers(context) {
160
- return this.getRendererCache(context)?.renderers || [];
161
- }
162
- findRenderer(view) {
163
- for (const rendererCache of this._rendererCaches) {
164
- const renderer = rendererCache.findRenderer(view);
165
- if (renderer)
166
- return renderer;
167
- }
168
- return undefined;
169
- }
170
- startRendering() {
171
- if (this._renderingTimer)
172
- return;
173
- const renderingLooper = () => {
174
- if (this._previousFirstFrameTime === 0) {
175
- // Get the current time as the time of the first frame of per second
176
- this._previousFirstFrameTime = performance.now();
177
- // Reset the frame count
178
- this._currentFrameCount = 0;
179
- }
180
- // Increase the frame count
181
- ++this._currentFrameCount;
182
- // Get the current time
183
- const currentFrameTime = performance.now();
184
- // Calculate the time difference between the current frame and the previous frame
185
- const deltaTime = currentFrameTime - this._previousFirstFrameTime;
186
- // Calculate the expected time of the current frame
187
- const expectedTime = (this._currentFrameCount * 1000) / this._renderingFps;
188
- (0, Utils_1.logDebug)(new Date().toLocaleTimeString(), 'currentFrameCount', this._currentFrameCount, 'expectedTime', expectedTime, 'deltaTime', deltaTime);
189
- if (this._rendererCaches.length === 0) {
190
- // If there is no renderer, stop rendering
191
- this.stopRendering();
192
- return;
193
- }
194
- // Render all renderers
195
- for (const rendererCache of this._rendererCaches) {
196
- this.doRendering(rendererCache);
197
- }
198
- if (this._currentFrameCount >= this.renderingFps) {
199
- this._previousFirstFrameTime = 0;
200
- }
201
- if (deltaTime < expectedTime) {
202
- // If the time difference between the current frame and the previous frame is less than the expected time, then wait for the difference
203
- this._renderingTimer = window.setTimeout(renderingLooper, expectedTime - deltaTime);
204
- }
205
- else {
206
- // If the time difference between the current frame and the previous frame is greater than the expected time, then render immediately
207
- renderingLooper();
208
- }
209
- };
210
- renderingLooper();
211
- }
212
- stopRendering() {
213
- if (this._renderingTimer) {
214
- window.clearTimeout(this._renderingTimer);
215
- this._renderingTimer = undefined;
216
- }
217
- }
218
- setRendererContext(context) {
219
- const checkedContext = this.precheckRendererContext(context);
220
- for (const rendererCache of this._rendererCaches) {
221
- const result = rendererCache.setRendererContext(checkedContext);
222
- if (result) {
223
- return true;
224
- }
225
- }
226
- return false;
227
- }
228
- }
229
- exports.IRendererManager = IRendererManager;
@@ -1,19 +0,0 @@
1
- # common.sh
2
- #!/bin/bash
3
-
4
- old_package_name='agora-electron-sdk'
5
- new_package_name='shengwang-electron-sdk'
6
-
7
- #./package.json
8
- old_name="\"name\": \"agora-electron-sdk\""
9
- new_name="\"name\": \"shengwang-electron-sdk\""
10
-
11
- old_description="\"description\": \"agora-electron-sdk\""
12
- new_description="\"description\": \"shengwang-electron-sdk\""
13
-
14
- old_yarn_link="yarn example link agora-electron-sdk"
15
- new_yarn_link="yarn example link shengwang-electron-sdk"
16
-
17
- # node_modules
18
- old_node_modules="node_modules/agora-electron-sdk"
19
- new_node_modules="node_modules/shengwang-electron-sdk"
@@ -1,22 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
- MY_PATH=$(realpath $(dirname "$0"))
4
- PROJECT_ROOT=$(realpath ${MY_PATH}/../..)
5
- . ${PROJECT_ROOT}/scripts/publishCN/common.sh
6
-
7
- change_file=${PROJECT_ROOT}/package.json
8
- sed "s/${old_name}/${new_name}/g" ${change_file} >tmp && mv tmp ${change_file}
9
- sed "s/${old_description}/${new_description}/g" ${change_file} >tmp && mv tmp ${change_file}
10
- sed "s/${old_yarn_link}/${new_yarn_link}/g" ${change_file} >tmp && mv tmp ${change_file}
11
-
12
- change_file=${PROJECT_ROOT}/tsconfig.json
13
- sed "s/${old_package_name}/${new_package_name}/g" ${change_file} >tmp && mv tmp ${change_file}
14
-
15
- change_file=${PROJECT_ROOT}/.github/workflows/publish.yml
16
- sed "s/${old_package_name}/${new_package_name}/g" ${change_file} >tmp && mv tmp ${change_file}
17
-
18
- change_file=${PROJECT_ROOT}/ci/packager-mac.sh
19
- sed "s#${old_node_modules}#${new_node_modules}#g" ${change_file} >tmp && mv tmp ${change_file}
20
-
21
- change_file=${PROJECT_ROOT}/ci/packager-win.ps1
22
- sed "s#${old_node_modules}#${new_node_modules}#g" ${change_file} >tmp && mv tmp ${change_file}
@@ -1,22 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
- MY_PATH=$(realpath $(dirname "$0"))
4
- PROJECT_ROOT=$(realpath ${MY_PATH}/../..)
5
- . ${PROJECT_ROOT}/scripts/publishCN/common.sh
6
-
7
- change_dir="${PROJECT_ROOT}/example/src"
8
-
9
- find "$change_dir" -type f | while read -r file; do
10
- sed -i.bak "s/${old_package_name}/${new_package_name}/g" "$file"
11
- echo "Replaced in $file"
12
- done
13
-
14
- change_file=${PROJECT_ROOT}/example/package.json
15
- sed "s/${old_package_name}/${new_package_name}/g" ${change_file} >tmp && mv tmp ${change_file}
16
-
17
- change_file=${PROJECT_ROOT}/example/webpack.renderer.additions.js
18
- sed "s/${old_package_name}/${new_package_name}/g" ${change_file} >tmp && mv tmp ${change_file}
19
-
20
- find "$change_dir" -name "*.bak" -type f -delete
21
-
22
- echo "All replacements completed successfully, and backup files have been deleted."
@@ -1,316 +0,0 @@
1
- import { VideoMirrorModeType, VideoViewSetupMode } from '../Private/AgoraBase';
2
- import {
3
- RenderModeType,
4
- VideoModulePosition,
5
- VideoSourceType,
6
- } from '../Private/AgoraMediaBase';
7
- import { RendererContext, RendererType } from '../Types';
8
- import { logDebug } from '../Utils';
9
-
10
- import { IRenderer } from './IRenderer';
11
- import { RendererCache, generateRendererCacheKey } from './RendererCache';
12
-
13
- /**
14
- * @ignore
15
- */
16
- export abstract class IRendererManager {
17
- /**
18
- * @ignore
19
- */
20
- private _renderingFps: number;
21
- /**
22
- * @ignore
23
- */
24
- private _currentFrameCount: number;
25
- /**
26
- * @ignore
27
- */
28
- private _previousFirstFrameTime: number;
29
- /**
30
- * @ignore
31
- */
32
- private _renderingTimer?: number;
33
- /**
34
- * @ignore
35
- */
36
- private _rendererCaches: RendererCache[];
37
- /**
38
- * @ignore
39
- */
40
- private _context: RendererContext;
41
-
42
- constructor() {
43
- this._renderingFps = 15;
44
- this._currentFrameCount = 0;
45
- this._previousFirstFrameTime = 0;
46
- this._rendererCaches = [];
47
- this._context = {
48
- renderMode: RenderModeType.RenderModeHidden,
49
- mirrorMode: VideoMirrorModeType.VideoMirrorModeDisabled,
50
- };
51
- }
52
-
53
- public set renderingFps(fps: number) {
54
- if (this._renderingFps !== fps) {
55
- this._renderingFps = fps;
56
- if (this._renderingTimer) {
57
- this.stopRendering();
58
- this.startRendering();
59
- }
60
- }
61
- }
62
-
63
- public get renderingFps(): number {
64
- return this._renderingFps;
65
- }
66
-
67
- public set defaultChannelId(channelId: string) {
68
- this._context.channelId = channelId;
69
- }
70
-
71
- public get defaultChannelId(): string {
72
- return this._context.channelId ?? '';
73
- }
74
-
75
- public get defaultRenderMode(): RenderModeType {
76
- return this._context.renderMode!;
77
- }
78
-
79
- public get defaultMirrorMode(): VideoMirrorModeType {
80
- return this._context.mirrorMode!;
81
- }
82
-
83
- public release(): void {
84
- this.stopRendering();
85
- this.clearRendererCache();
86
- }
87
-
88
- private precheckRendererContext(context: RendererContext): RendererContext {
89
- let {
90
- sourceType,
91
- uid,
92
- channelId,
93
- position,
94
- mediaPlayerId,
95
- renderMode = this.defaultRenderMode,
96
- mirrorMode = this.defaultMirrorMode,
97
- } = context;
98
- switch (sourceType) {
99
- case VideoSourceType.VideoSourceRemote:
100
- if (uid === undefined) {
101
- throw new Error('uid is required');
102
- }
103
- channelId = channelId ?? this.defaultChannelId;
104
- break;
105
- case VideoSourceType.VideoSourceMediaPlayer:
106
- if (mediaPlayerId === undefined) {
107
- throw new Error('mediaPlayerId is required');
108
- }
109
- channelId = '';
110
- uid = mediaPlayerId;
111
- break;
112
- case undefined:
113
- if (uid) {
114
- sourceType = VideoSourceType.VideoSourceRemote;
115
- }
116
- break;
117
- default:
118
- channelId = '';
119
- uid = 0;
120
- break;
121
- }
122
- if (!position) {
123
- position =
124
- VideoModulePosition.PositionPreEncoder |
125
- VideoModulePosition.PositionPreRenderer;
126
- }
127
- return {
128
- ...context,
129
- position,
130
- sourceType,
131
- uid,
132
- channelId,
133
- renderMode,
134
- mirrorMode,
135
- };
136
- }
137
-
138
- public addOrRemoveRenderer(
139
- context: RendererContext
140
- ): RendererCache | undefined {
141
- // To be compatible with the old API
142
- let { setupMode = VideoViewSetupMode.VideoViewSetupAdd } = context;
143
- if (!context.view) setupMode = VideoViewSetupMode.VideoViewSetupRemove;
144
- switch (setupMode) {
145
- case VideoViewSetupMode.VideoViewSetupAdd:
146
- return this.addRendererToCache(context);
147
- case VideoViewSetupMode.VideoViewSetupRemove:
148
- this.removeRendererFromCache(context);
149
- return undefined;
150
- case VideoViewSetupMode.VideoViewSetupReplace:
151
- this.removeRendererFromCache(context);
152
- return this.addRendererToCache(context);
153
- }
154
- }
155
-
156
- private addRendererToCache(
157
- context: RendererContext
158
- ): RendererCache | undefined {
159
- const checkedContext = this.precheckRendererContext(context);
160
-
161
- if (!checkedContext.view) return undefined;
162
-
163
- if (this.findRenderer(checkedContext.view)) {
164
- throw new Error('You have already added this view to the renderer');
165
- }
166
-
167
- let rendererCache = this.getRendererCache(checkedContext);
168
- if (!rendererCache) {
169
- rendererCache = new RendererCache(checkedContext);
170
- this._rendererCaches.push(rendererCache);
171
- }
172
- rendererCache.addRenderer(this.createRenderer(checkedContext));
173
- this.startRendering();
174
- return rendererCache;
175
- }
176
-
177
- public removeRendererFromCache(context: RendererContext): void {
178
- const checkedContext = this.precheckRendererContext(context);
179
-
180
- const rendererCache = this.getRendererCache(checkedContext);
181
- if (rendererCache) {
182
- if (checkedContext.view) {
183
- const renderer = rendererCache.findRenderer(checkedContext.view);
184
- if (!renderer) return;
185
- rendererCache.removeRenderer(renderer);
186
- } else {
187
- rendererCache.removeRenderer();
188
- }
189
- if (rendererCache.renderers.length === 0) {
190
- this._rendererCaches.splice(
191
- this._rendererCaches.indexOf(rendererCache),
192
- 1
193
- );
194
- }
195
- } else {
196
- this._rendererCaches = this._rendererCaches.filter((_rendererCache) => {
197
- const renderer = _rendererCache.findRenderer(checkedContext.view);
198
- if (renderer) {
199
- _rendererCache.removeRenderer(renderer);
200
- }
201
- return _rendererCache.renderers.length > 0;
202
- });
203
- }
204
- }
205
-
206
- public clearRendererCache(): void {
207
- for (const rendererCache of this._rendererCaches) {
208
- rendererCache.removeRenderer();
209
- }
210
- this._rendererCaches.splice(0);
211
- }
212
-
213
- public getRendererCache(context: RendererContext): RendererCache | undefined {
214
- return this._rendererCaches.find(
215
- (cache) => cache.key === generateRendererCacheKey(context)
216
- );
217
- }
218
-
219
- public getRenderers(context: RendererContext): IRenderer[] {
220
- return this.getRendererCache(context)?.renderers || [];
221
- }
222
-
223
- public findRenderer(view: Element): IRenderer | undefined {
224
- for (const rendererCache of this._rendererCaches) {
225
- const renderer = rendererCache.findRenderer(view);
226
- if (renderer) return renderer;
227
- }
228
- return undefined;
229
- }
230
-
231
- protected abstract createRenderer(
232
- context: RendererContext,
233
- rendererType?: RendererType
234
- ): IRenderer;
235
-
236
- public startRendering(): void {
237
- if (this._renderingTimer) return;
238
-
239
- const renderingLooper = () => {
240
- if (this._previousFirstFrameTime === 0) {
241
- // Get the current time as the time of the first frame of per second
242
- this._previousFirstFrameTime = performance.now();
243
- // Reset the frame count
244
- this._currentFrameCount = 0;
245
- }
246
-
247
- // Increase the frame count
248
- ++this._currentFrameCount;
249
-
250
- // Get the current time
251
- const currentFrameTime = performance.now();
252
- // Calculate the time difference between the current frame and the previous frame
253
- const deltaTime = currentFrameTime - this._previousFirstFrameTime;
254
- // Calculate the expected time of the current frame
255
- const expectedTime =
256
- (this._currentFrameCount * 1000) / this._renderingFps;
257
- logDebug(
258
- new Date().toLocaleTimeString(),
259
- 'currentFrameCount',
260
- this._currentFrameCount,
261
- 'expectedTime',
262
- expectedTime,
263
- 'deltaTime',
264
- deltaTime
265
- );
266
-
267
- if (this._rendererCaches.length === 0) {
268
- // If there is no renderer, stop rendering
269
- this.stopRendering();
270
- return;
271
- }
272
-
273
- // Render all renderers
274
- for (const rendererCache of this._rendererCaches) {
275
- this.doRendering(rendererCache);
276
- }
277
-
278
- if (this._currentFrameCount >= this.renderingFps) {
279
- this._previousFirstFrameTime = 0;
280
- }
281
-
282
- if (deltaTime < expectedTime) {
283
- // If the time difference between the current frame and the previous frame is less than the expected time, then wait for the difference
284
- this._renderingTimer = window.setTimeout(
285
- renderingLooper,
286
- expectedTime - deltaTime
287
- );
288
- } else {
289
- // If the time difference between the current frame and the previous frame is greater than the expected time, then render immediately
290
- renderingLooper();
291
- }
292
- };
293
- renderingLooper();
294
- }
295
-
296
- public abstract doRendering(rendererCache: RendererCache): void;
297
-
298
- public stopRendering(): void {
299
- if (this._renderingTimer) {
300
- window.clearTimeout(this._renderingTimer);
301
- this._renderingTimer = undefined;
302
- }
303
- }
304
-
305
- public setRendererContext(context: RendererContext): boolean {
306
- const checkedContext = this.precheckRendererContext(context);
307
-
308
- for (const rendererCache of this._rendererCaches) {
309
- const result = rendererCache.setRendererContext(checkedContext);
310
- if (result) {
311
- return true;
312
- }
313
- }
314
- return false;
315
- }
316
- }
@@ -1,56 +0,0 @@
1
- import { VideoMirrorModeType } from '../Private/AgoraBase';
2
- import { RenderModeType } from '../Private/AgoraMediaBase';
3
- import { RendererContext, RendererType } from '../Types';
4
- import { IRenderer } from './IRenderer';
5
- import { RendererCache } from './RendererCache';
6
- /**
7
- * @ignore
8
- */
9
- export declare abstract class IRendererManager {
10
- /**
11
- * @ignore
12
- */
13
- private _renderingFps;
14
- /**
15
- * @ignore
16
- */
17
- private _currentFrameCount;
18
- /**
19
- * @ignore
20
- */
21
- private _previousFirstFrameTime;
22
- /**
23
- * @ignore
24
- */
25
- private _renderingTimer?;
26
- /**
27
- * @ignore
28
- */
29
- private _rendererCaches;
30
- /**
31
- * @ignore
32
- */
33
- private _context;
34
- constructor();
35
- set renderingFps(fps: number);
36
- get renderingFps(): number;
37
- set defaultChannelId(channelId: string);
38
- get defaultChannelId(): string;
39
- get defaultRenderMode(): RenderModeType;
40
- get defaultMirrorMode(): VideoMirrorModeType;
41
- release(): void;
42
- private precheckRendererContext;
43
- addOrRemoveRenderer(context: RendererContext): RendererCache | undefined;
44
- private addRendererToCache;
45
- removeRendererFromCache(context: RendererContext): void;
46
- clearRendererCache(): void;
47
- getRendererCache(context: RendererContext): RendererCache | undefined;
48
- getRenderers(context: RendererContext): IRenderer[];
49
- findRenderer(view: Element): IRenderer | undefined;
50
- protected abstract createRenderer(context: RendererContext, rendererType?: RendererType): IRenderer;
51
- startRendering(): void;
52
- abstract doRendering(rendererCache: RendererCache): void;
53
- stopRendering(): void;
54
- setRendererContext(context: RendererContext): boolean;
55
- }
56
- //# sourceMappingURL=IRendererManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IRendererManager.d.ts","sourceRoot":"","sources":["../../ts/Renderer/IRendererManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,cAAc,EAGf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAE1E;;GAEG;AACH,8BAAsB,gBAAgB;IACpC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAS;IAC9B;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAS;IACnC;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAAS;IACxC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAkB;IACzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAkB;;IAalC,IAAW,YAAY,CAAC,GAAG,EAAE,MAAM,EAQlC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAE5C;IAED,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,IAAW,iBAAiB,IAAI,cAAc,CAE7C;IAED,IAAW,iBAAiB,IAAI,mBAAmB,CAElD;IAEM,OAAO,IAAI,IAAI;IAKtB,OAAO,CAAC,uBAAuB;IAkDxB,mBAAmB,CACxB,OAAO,EAAE,eAAe,GACvB,aAAa,GAAG,SAAS;IAgB5B,OAAO,CAAC,kBAAkB;IAqBnB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IA6BvD,kBAAkB,IAAI,IAAI;IAO1B,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,GAAG,SAAS;IAMrE,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE;IAInD,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IAQzD,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC/B,OAAO,EAAE,eAAe,EACxB,YAAY,CAAC,EAAE,YAAY,GAC1B,SAAS;IAEL,cAAc,IAAI,IAAI;aA4Db,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAExD,aAAa,IAAI,IAAI;IAOrB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAW7D"}