Agora 屏幕在 electron 中与 react 共享,授予权限被拒绝
Agora screen sharing in electron with react, Gives permission denied
我正在使用 Agora 构建一个用于通话的电子反应应用程序。我正在尝试实现屏幕共享功能。
如以下文档中所述,我尝试请求屏幕共享。
https://docs.agora.io/en/video/screensharing_web_ng?platform=Web#screen-sharing-on-electron
但是我收到以下错误
AgoraRTCError PERMISSION_DENIED: NotAllowedError: Permission denied
我尝试在 React 和 Electron 中调用相同的函数 AgoraRTC.createScreenVideoTrack
但结果是一样的。
electron中如何获取分享屏幕权限给agora?
经过一番研究,我找到了电子方式。
- 首先我请求共享屏幕。
const turnScreenSharingOn = async () => {
const sources = await window.electron.media.getDesktopSources();
setScreenSources(sources);
setScreenSharePopupVisible(true);
};
window.electron.media.getDesktopSources()
是一个电子预加载函数,用于获取屏幕源。
getDesktopSources: async () =>
await desktopCapturer
.getSources({
types: ['window', 'screen'],
})
.then((sources) =>
sources.map((source) => ({
id: source.id,
name: source.name,
appIconUrl: source?.appIcon?.toDataURL(),
thumbnailUrl: source?.thumbnail
?.resize({ height: 160 })
.toDataURL(),
}))
)
- 获得源后,我会显示弹出窗口,从中选择源并将源 ID 传递给下一个函数。
const onScreenChoose = async (sourceId: string, cb?: () => void) => {
const stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sourceId,
},
} as MediaTrackConstraints,
});
const track = stream.getVideoTracks()[0];
const screenTrack = AgoraRTC.createCustomVideoTrack({
mediaStreamTrack: track,
});
window.agora.screenTrack?.setEnabled(false);
window.agora.screenTrack = screenTrack;
setScreenTrack(screenTrack);
await screenShareClient.publish(screenTrack);
setScreenSharePopupVisible(false);
cb?.();
};
我正在使用 Agora 构建一个用于通话的电子反应应用程序。我正在尝试实现屏幕共享功能。
如以下文档中所述,我尝试请求屏幕共享。 https://docs.agora.io/en/video/screensharing_web_ng?platform=Web#screen-sharing-on-electron
但是我收到以下错误
AgoraRTCError PERMISSION_DENIED: NotAllowedError: Permission denied
我尝试在 React 和 Electron 中调用相同的函数 AgoraRTC.createScreenVideoTrack
但结果是一样的。
electron中如何获取分享屏幕权限给agora?
经过一番研究,我找到了电子方式。
- 首先我请求共享屏幕。
const turnScreenSharingOn = async () => {
const sources = await window.electron.media.getDesktopSources();
setScreenSources(sources);
setScreenSharePopupVisible(true);
};
window.electron.media.getDesktopSources()
是一个电子预加载函数,用于获取屏幕源。
getDesktopSources: async () =>
await desktopCapturer
.getSources({
types: ['window', 'screen'],
})
.then((sources) =>
sources.map((source) => ({
id: source.id,
name: source.name,
appIconUrl: source?.appIcon?.toDataURL(),
thumbnailUrl: source?.thumbnail
?.resize({ height: 160 })
.toDataURL(),
}))
)
- 获得源后,我会显示弹出窗口,从中选择源并将源 ID 传递给下一个函数。
const onScreenChoose = async (sourceId: string, cb?: () => void) => {
const stream = await navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: sourceId,
},
} as MediaTrackConstraints,
});
const track = stream.getVideoTracks()[0];
const screenTrack = AgoraRTC.createCustomVideoTrack({
mediaStreamTrack: track,
});
window.agora.screenTrack?.setEnabled(false);
window.agora.screenTrack = screenTrack;
setScreenTrack(screenTrack);
await screenShareClient.publish(screenTrack);
setScreenSharePopupVisible(false);
cb?.();
};