Skip to content

Commit fe50880

Browse files
fix: jira CSD-61288 renderer issue (#1114)
* [AUTO] Update dependencies * chore: wip * ci: keep yarn version while setup * chore: wip * chore: wip * fix: jira CSD-61288 CSD-60920 renderer issue * chore: release 4.2.6-rc.1 * chore(example): update example to install [email protected] --------- Co-authored-by: LichKing-2234 <[email protected]> Co-authored-by: Arthas <[email protected]> Co-authored-by: HUI <[email protected]>
1 parent 52e9e64 commit fe50880

File tree

15 files changed

+679
-575
lines changed

15 files changed

+679
-575
lines changed

.eslintrc

+4
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,12 @@
8484
"document": false,
8585
"HTMLElement": false,
8686
"HTMLDivElement": false,
87+
"RenderingContext": false,
88+
"WebGLRenderingContext": false,
8789
"WebGL2RenderingContext": false,
8890
"WebGLTexture": false,
91+
"WebGLBuffer": false,
92+
"WebGLProgram": false,
8993
"HTMLCanvasElement": false,
9094
"ResizeObserver": false,
9195
"name": false,

.github/actions/setup/action.yml

+5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ runs:
99
with:
1010
node-version-file: .nvmrc
1111

12+
- name: Setup Yarn
13+
run:
14+
15+
shell: bash
16+
1217
- name: Set up Python
1318
uses: actions/setup-python@v4
1419
with:

.github/workflows/build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,4 @@ jobs:
113113
needs: [ build-windows, build-mac ]
114114
steps:
115115
- run: |
116-
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${{ secrets.WECHAT_KEY }}" -d '{"msgtype":"text","text":{"content":"Electron Example:\n${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"}}'
116+
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${{ secrets.WECHAT_KEY }}" -d '{"msgtype":"text","text":{"content":"Electron Example:\n${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\nDownload Link:\nhttps://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}"}}'

CHANGELOG.md

+14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11

22

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+
317
## [4.2.4](https://github.com/AgoraIO-Extensions/Electron-SDK/compare/v4.2.3...v4.2.4) (2023-10-24)
418

519

example/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
]
7171
},
7272
"dependencies": {
73-
"agora-electron-sdk": "4.2.4",
73+
"agora-electron-sdk": "4.2.6-rc.1",
7474
"antd": "^4.20.3",
7575
"download": "^8.0.0",
7676
"ffi-napi": "^4.0.3",

example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx

+49-15
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,20 @@ import {
1212
VideoSourceType,
1313
createAgoraRtcEngine,
1414
} from 'agora-electron-sdk';
15-
import { ReactElement } from 'react';
15+
import React, { ReactElement } from 'react';
1616

1717
import {
1818
BaseComponent,
1919
BaseVideoComponentState,
2020
} from '../../../components/BaseComponent';
21-
import { AgoraDropdown } from '../../../components/ui';
21+
import { AgoraButton, AgoraDropdown, AgoraView } from '../../../components/ui';
2222
import Config from '../../../config/agora.config';
2323
import { arrayToItems } from '../../../utils';
2424
import { askMediaAccess } from '../../../utils/permissions';
2525

26-
interface State extends BaseVideoComponentState {}
26+
interface State extends BaseVideoComponentState {
27+
selectedUser?: number;
28+
}
2729

2830
export default class JoinChannelVideo
2931
extends BaseComponent<{}, State>
@@ -178,21 +180,53 @@ export default class JoinChannelVideo
178180
}
179181

180182
protected renderConfiguration(): ReactElement | undefined {
181-
const { joinChannelSuccess, remoteUsers } = this.state;
183+
const { joinChannelSuccess, remoteUsers, selectedUser } = this.state;
182184
return (
183185
<>
184186
{joinChannelSuccess ? (
185-
<AgoraDropdown
186-
title={'Append renderer to remote users'}
187-
items={arrayToItems(remoteUsers)}
188-
onValueChange={(value) => {
189-
this.setState((prev) => {
190-
return {
191-
remoteUsers: [...prev.remoteUsers, value],
192-
};
193-
});
194-
}}
195-
/>
187+
<>
188+
<AgoraDropdown
189+
title={'Append renderer to remote users'}
190+
items={arrayToItems(Array.from(new Set(remoteUsers)))}
191+
value={selectedUser}
192+
onValueChange={(value) => {
193+
this.setState({ selectedUser: value });
194+
}}
195+
/>
196+
<AgoraView>
197+
<AgoraButton
198+
title="Add"
199+
onPress={() => {
200+
if (selectedUser !== undefined) {
201+
this.setState((prev) => {
202+
return {
203+
remoteUsers: [...prev.remoteUsers, selectedUser],
204+
};
205+
});
206+
}
207+
}}
208+
/>
209+
<AgoraButton
210+
title="Remove"
211+
onPress={() => {
212+
if (selectedUser !== undefined) {
213+
this.setState((prev) => {
214+
const predicate = (it: number) => it === selectedUser;
215+
const firstIndex = prev.remoteUsers.findIndex(predicate);
216+
const lastIndex =
217+
prev.remoteUsers.findLastIndex(predicate);
218+
if (firstIndex !== lastIndex) {
219+
prev.remoteUsers.splice(lastIndex, 1);
220+
}
221+
return {
222+
remoteUsers: prev.remoteUsers,
223+
};
224+
});
225+
}
226+
}}
227+
/>
228+
</AgoraView>
229+
</>
196230
) : undefined}
197231
</>
198232
);

example/src/renderer/global.d.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
export {};
2+
3+
declare global {
4+
interface Array<T> {
5+
findLastIndex(
6+
predicate: (value: T, index: number, obj: T[]) => unknown,
7+
thisArg?: any
8+
): number;
9+
}
10+
}

example/yarn.lock

+4-4
Original file line numberDiff line numberDiff line change
@@ -1783,10 +1783,10 @@ aggregate-error@^3.0.0:
17831783
clean-stack "^2.0.0"
17841784
indent-string "^4.0.0"
17851785

1786-
1787-
version "4.2.4"
1788-
resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.4.tgz#14b4cfdccf3297bc35aa27ab1ce2a377290af78f"
1789-
integrity sha512-qPkh+oF0HxESgRpITh5Gudyy2Z1lJ+LWWOP7p1HUWRxAPt+/Lyrr3sfdU5MUKKMSoaB41HT8cjC1HgfhnrN+Zg==
1786+
1787+
version "4.2.6-rc.1"
1788+
resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.6-rc.1.tgz#39c03dbbe34e5b7bf5c7e94c4efe0629757a3dcf"
1789+
integrity sha512-AuxWSWUpYysR0jYaF5ZpbXJbmXGKtunjcaVV4E/sf2Pd07uBQ7pXUZq8U2gptd9bD3Bd6gKMZx6MOpmxmVU7cg==
17901790
dependencies:
17911791
buffer "^6.0.3"
17921792
cross-env "^7.0.3"

package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "agora-electron-sdk",
3-
"version": "4.2.4",
3+
"version": "4.2.6-rc.1",
44
"description": "agora-electron-sdk",
55
"main": "js/AgoraSdk",
66
"types": "types/AgoraSdk.d.ts",
@@ -135,7 +135,7 @@
135135
"yuv-canvas": "1.2.6"
136136
},
137137
"agora_electron": {
138-
"iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.6-build.2_DCG_Windows_Video_20231109_1040.zip",
139-
"iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.6-build.2_DCG_Mac_Video_20231109_1040.zip"
138+
"iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.6-build.3_DCG_Windows_Video_20231116_0243.zip",
139+
"iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.6-build.3_DCG_Mac_Video_20231116_0243.zip"
140140
}
141141
}

ts/Renderer/IRenderer.ts

+30-17
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
1-
import { EventEmitter } from 'events';
2-
31
import { RenderModeType } from '../Private/AgoraMediaBase';
42
import { RendererOptions, ShareVideoFrame } from '../Types';
53

6-
export type RenderFailCallback =
7-
| ((obj: { error: string }) => void)
8-
| undefined
9-
| null;
10-
114
export abstract class IRenderer {
125
parentElement?: HTMLElement;
6+
container?: HTMLElement;
137
canvas?: HTMLCanvasElement;
14-
event?: EventEmitter;
15-
contentMode = RenderModeType.RenderModeFit;
8+
contentMode = RenderModeType.RenderModeHidden;
169
mirror?: boolean;
1710

1811
public snapshot(fileType = 'image/png') {
@@ -23,20 +16,40 @@ export abstract class IRenderer {
2316
}
2417

2518
public bind(element: HTMLElement) {
26-
if (!element) {
27-
throw new Error('You have pass a element');
28-
}
2919
this.parentElement = element;
20+
this.container = document.createElement('div');
21+
Object.assign(this.container.style, {
22+
width: '100%',
23+
height: '100%',
24+
display: 'flex',
25+
justifyContent: 'center',
26+
alignItems: 'center',
27+
overflow: 'hidden',
28+
});
29+
this.parentElement.appendChild(this.container);
30+
this.canvas = document.createElement('canvas');
31+
this.container.appendChild(this.canvas);
3032
}
3133

32-
abstract unbind(): void;
34+
public unbind() {
35+
if (this.container && this.canvas?.parentNode === this.container) {
36+
this.container.removeChild(this.canvas);
37+
}
38+
if (
39+
this.parentElement &&
40+
this.container?.parentNode === this.parentElement
41+
) {
42+
this.parentElement.removeChild(this.container);
43+
}
44+
45+
this.canvas = undefined;
46+
this.container = undefined;
47+
this.parentElement = undefined;
48+
}
3349

3450
public equalsElement(element: Element): boolean {
35-
if (!element) {
36-
throw new Error('You have pass a element');
37-
}
3851
if (!this.parentElement) {
39-
throw new Error('parentElement is null');
52+
console.error('parentElement is null');
4053
}
4154
return element === this.parentElement;
4255
}

0 commit comments

Comments
 (0)