JavaScript 以编程方式检查是否正在使用相机
JavaScript programatically check if camera is being used
我正在为视频聊天应用编写功能测试。
我想确保当用户离开会议时摄像头会关闭。所以,我正在尝试检查是否正在使用相机。
有没有办法以编程方式做到这一点?我在 navigator.MediaDevices
上找不到任何显示“嘿,您的相机正在使用中”的方法。
您可以使用 navigator.mediaDevices.getUserMedia
方法获取用户相机的访问权限,用户 active
值检查相机是否已激活。
如果用户阻止了对相机的权限,您将收到一条错误消息。
希望这对你有用。
以下是我在 TestCafe 中通过“监视”getUserMedia
解决它的方法:
const overWriteGetUserMedia = ClientFunction(() => {
const realGetUserMedia = navigator.mediaDevices.getUserMedia;
const allRequestedTracks = [];
navigator.mediaDevices.getUserMedia = constraints =>
realGetUserMedia(constraints).then(stream => {
stream.getTracks().forEach(track => {
allRequestedTracks.push(track);
});
return stream;
});
return allRequestedTracks;
});
test('leaving a meeting should end streams', async t => {
const allRequestedTracks = await overWriteGetUserMedia();
await t.wait(5000); // wait for streams to start;
await t.click(screen.getByLabelText(/leave/i));
await t.click(screen.getByLabelText(/yes, leave the meeting/i));
await t.wait(1000); // wait for navigation;
const actual = !allRequestedTracks.some(track => !track.ended);
const expected = true;
await t.expect(actual).eql(expected);
});
我正在为视频聊天应用编写功能测试。
我想确保当用户离开会议时摄像头会关闭。所以,我正在尝试检查是否正在使用相机。
有没有办法以编程方式做到这一点?我在 navigator.MediaDevices
上找不到任何显示“嘿,您的相机正在使用中”的方法。
您可以使用 navigator.mediaDevices.getUserMedia
方法获取用户相机的访问权限,用户 active
值检查相机是否已激活。
如果用户阻止了对相机的权限,您将收到一条错误消息。
希望这对你有用。
以下是我在 TestCafe 中通过“监视”getUserMedia
解决它的方法:
const overWriteGetUserMedia = ClientFunction(() => {
const realGetUserMedia = navigator.mediaDevices.getUserMedia;
const allRequestedTracks = [];
navigator.mediaDevices.getUserMedia = constraints =>
realGetUserMedia(constraints).then(stream => {
stream.getTracks().forEach(track => {
allRequestedTracks.push(track);
});
return stream;
});
return allRequestedTracks;
});
test('leaving a meeting should end streams', async t => {
const allRequestedTracks = await overWriteGetUserMedia();
await t.wait(5000); // wait for streams to start;
await t.click(screen.getByLabelText(/leave/i));
await t.click(screen.getByLabelText(/yes, leave the meeting/i));
await t.wait(1000); // wait for navigation;
const actual = !allRequestedTracks.some(track => !track.ended);
const expected = true;
await t.expect(actual).eql(expected);
});