diff --git a/service-providers/agora-rtc/agora-rtc-electron/src/rtc-share-screen.ts b/service-providers/agora-rtc/agora-rtc-electron/src/rtc-share-screen.ts index 0c089311348..c2c53e5867f 100644 --- a/service-providers/agora-rtc/agora-rtc-electron/src/rtc-share-screen.ts +++ b/service-providers/agora-rtc/agora-rtc-electron/src/rtc-share-screen.ts @@ -120,7 +120,13 @@ export class AgoraRTCElectronShareScreen extends IServiceShareScreen { this.client.getScreenWindowsInfo(res), ); - const convertScreenInfo = (info: DisplayInfo | WindowInfo): IServiceShareScreenInfo => { + const convertScreenInfo = ( + info: DisplayInfo | WindowInfo, + ): IServiceShareScreenInfo | null => { + // There's a bug in agora SDK, the image may be missing on mirrored screen + if (!info.image) { + return null; + } if ("displayId" in info) { return { type: "display", @@ -143,7 +149,10 @@ export class AgoraRTCElectronShareScreen extends IServiceShareScreen { } }; - return [...displayList.map(convertScreenInfo), ...windowList.map(convertScreenInfo)]; + return compact([ + ...displayList.map(convertScreenInfo), + ...windowList.map(convertScreenInfo), + ]); } public override setScreenInfo(info: IServiceShareScreenInfo | null): void { @@ -232,3 +241,9 @@ export class AgoraRTCElectronShareScreen extends IServiceShareScreen { this._pTogglingShareScreen = undefined; } } + +type Truthy = T extends false | "" | 0 | null | undefined ? never : T; + +function compact(arr: T[]): Array> { + return arr.filter(Boolean) as Array>; +}