Я строю приложение для киоска с использованием WebView2 и пытаюсь получить доступ к камере из JavaScript. Я хочу автоматически разрешать разрешения на камеру и микрофона в событии, проведенном разрешенным, с использованием C ++. Стандартные запросы getUsermedia () работают нормально, но как только я добавляю ограничение масштабирования в видео -дорожку, WebView2 показывает подсказку «Использовать и перемещать камеру».EventRegistrationToken permissionToken;
webview->add_PermissionRequested(
Callback(
[](ICoreWebView2* sender, ICoreWebView2PermissionRequestedEventArgs* args) -> HRESULT
{
COREWEBVIEW2_PERMISSION_KIND kind;
args->get_PermissionKind(&kind);
// Automatically allow camera and microphone
if (kind == COREWEBVIEW2_PERMISSION_KIND_CAMERA ||
kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE)
{
args->put_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW);
OutputDebugString(L"Permission requested event\n");
}
else
{
args->put_State(COREWEBVIEW2_PERMISSION_STATE_DENY);
}
return S_OK;
}
).Get(),
&permissionToken
);
< /code>
Когда я прошу стандартную getusermedia () от js, это работает отлично, камера открывается без каких -либо подсказок. Но когда я добавляю ограничение масштабирования при создании медиастрема, появляется подсказка. < /P>
navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480, frameRate: { ideal: 30 }, zoom: 100 },
audio: false
});
< /code>
"Использовать и перемещать приглашение камеры" < /p>
CorewebView2_permission_kind Enum, по -видимому, не имеет определенного значения Перемещение камеры "разрешение. Есть ли способ программного предоставления разрешения для" использования и перемещения камеры "или подавлять эту конкретную подсказку в применении WebView2? C ++ и JS. < /p>
// compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c
#include
#include
#include
#include
#include
#include "WebView2.h"
using namespace Microsoft::WRL;
static TCHAR szWindowClass[] = _T("WebView2MRE");
static TCHAR szTitle[] = _T("WebView2 Camera MRE");
static wil::com_ptr webviewController;
static wil::com_ptr webview;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
WNDCLASSEX wcex = {};
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszClassName = szWindowClass;
if (!RegisterClassEx(&wcex)) return 1;
HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 1200, 900, NULL, NULL, hInstance, NULL);
if (!hWnd) return 1;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, nullptr,
Callback(
[hWnd](HRESULT, ICoreWebView2Environment* env) -> HRESULT {
env->CreateCoreWebView2Controller(hWnd,
Callback(
[hWnd](HRESULT, ICoreWebView2Controller* controller) -> HRESULT {
if (controller != nullptr) {
webviewController = controller;
webviewController->get_CoreWebView2(&webview);
}
wil::com_ptr settings;
webview->get_Settings(&settings);
settings->put_IsScriptEnabled(TRUE);
settings->put_AreDefaultScriptDialogsEnabled(TRUE);
settings->put_IsWebMessageEnabled(TRUE);
RECT bounds;
GetClientRect(hWnd, &bounds);
webviewController->put_Bounds(bounds);
EventRegistrationToken permissionToken;
webview->add_PermissionRequested(
Callback(
[](ICoreWebView2*, ICoreWebView2PermissionRequestedEventArgs* args) -> HRESULT {
COREWEBVIEW2_PERMISSION_KIND kind;
args->get_PermissionKind(&kind);
// Automatically allow camera and microphone
if (kind == COREWEBVIEW2_PERMISSION_KIND_CAMERA ||
kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE) {
args->put_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW);
}
else {
args->put_State(COREWEBVIEW2_PERMISSION_STATE_DENY);
}
return S_OK;
}).Get(), &permissionToken
);
// Localhost URL
webview->Navigate(L"http://localhost:5500/");
return S_OK;
}).Get());
return S_OK;
}).Get());
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_SIZE:
if (webviewController) {
RECT bounds;
GetClientRect(hWnd, &bounds);
webviewController->put_Bounds(bounds);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
< /code>
Start Camera
Start Camera with Zoom
const video = document.getElementById("video");
document.getElementById("btnNormal").onclick = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480 },
audio: false
});
video.srcObject = stream;
};
document.getElementById("btnZoom").onclick = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480, zoom: 100 },
audio: false
});
video.srcObject = stream;
};
Подробнее здесь: https://stackoverflow.com/questions/797 ... tusermedia
Приложение WebView2 показывает подсказку «Использовать и перемещать камеру» при добавлении Zoom в GetUsermedia ⇐ C++
Программы на C++. Форум разработчиков
1759216384
Anonymous
Я строю приложение для киоска с использованием WebView2 и пытаюсь получить доступ к камере из JavaScript. Я хочу автоматически разрешать разрешения на камеру и микрофона в событии, проведенном разрешенным, с использованием C ++. Стандартные запросы getUsermedia () работают нормально, но как только я добавляю ограничение масштабирования в видео -дорожку, WebView2 показывает подсказку «Использовать и перемещать камеру».EventRegistrationToken permissionToken;
webview->add_PermissionRequested(
Callback(
[](ICoreWebView2* sender, ICoreWebView2PermissionRequestedEventArgs* args) -> HRESULT
{
COREWEBVIEW2_PERMISSION_KIND kind;
args->get_PermissionKind(&kind);
// Automatically allow camera and microphone
if (kind == COREWEBVIEW2_PERMISSION_KIND_CAMERA ||
kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE)
{
args->put_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW);
OutputDebugString(L"Permission requested event\n");
}
else
{
args->put_State(COREWEBVIEW2_PERMISSION_STATE_DENY);
}
return S_OK;
}
).Get(),
&permissionToken
);
< /code>
Когда я прошу стандартную getusermedia () от js, это работает отлично, камера открывается без каких -либо подсказок. Но когда я добавляю ограничение масштабирования при создании медиастрема, появляется подсказка. < /P>
navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480, frameRate: { ideal: 30 }, zoom: 100 },
audio: false
});
< /code>
"Использовать и перемещать приглашение камеры" < /p>
CorewebView2_permission_kind Enum, по -видимому, не имеет определенного значения Перемещение камеры "разрешение. Есть ли способ программного предоставления разрешения для" использования и перемещения камеры "или подавлять эту конкретную подсказку в применении WebView2? C ++ и JS. < /p>
// compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c
#include
#include
#include
#include
#include
#include "WebView2.h"
using namespace Microsoft::WRL;
static TCHAR szWindowClass[] = _T("WebView2MRE");
static TCHAR szTitle[] = _T("WebView2 Camera MRE");
static wil::com_ptr webviewController;
static wil::com_ptr webview;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
WNDCLASSEX wcex = {};
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszClassName = szWindowClass;
if (!RegisterClassEx(&wcex)) return 1;
HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 1200, 900, NULL, NULL, hInstance, NULL);
if (!hWnd) return 1;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, nullptr,
Callback(
[hWnd](HRESULT, ICoreWebView2Environment* env) -> HRESULT {
env->CreateCoreWebView2Controller(hWnd,
Callback(
[hWnd](HRESULT, ICoreWebView2Controller* controller) -> HRESULT {
if (controller != nullptr) {
webviewController = controller;
webviewController->get_CoreWebView2(&webview);
}
wil::com_ptr settings;
webview->get_Settings(&settings);
settings->put_IsScriptEnabled(TRUE);
settings->put_AreDefaultScriptDialogsEnabled(TRUE);
settings->put_IsWebMessageEnabled(TRUE);
RECT bounds;
GetClientRect(hWnd, &bounds);
webviewController->put_Bounds(bounds);
EventRegistrationToken permissionToken;
webview->add_PermissionRequested(
Callback(
[](ICoreWebView2*, ICoreWebView2PermissionRequestedEventArgs* args) -> HRESULT {
COREWEBVIEW2_PERMISSION_KIND kind;
args->get_PermissionKind(&kind);
// Automatically allow camera and microphone
if (kind == COREWEBVIEW2_PERMISSION_KIND_CAMERA ||
kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE) {
args->put_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW);
}
else {
args->put_State(COREWEBVIEW2_PERMISSION_STATE_DENY);
}
return S_OK;
}).Get(), &permissionToken
);
// Localhost URL
webview->Navigate(L"http://localhost:5500/");
return S_OK;
}).Get());
return S_OK;
}).Get());
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_SIZE:
if (webviewController) {
RECT bounds;
GetClientRect(hWnd, &bounds);
webviewController->put_Bounds(bounds);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
< /code>
Start Camera
Start Camera with Zoom
const video = document.getElementById("video");
document.getElementById("btnNormal").onclick = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480 },
audio: false
});
video.srcObject = stream;
};
document.getElementById("btnZoom").onclick = async () => {
const stream = await navigator.mediaDevices.getUserMedia({
video: { width: 640, height: 480, zoom: 100 },
audio: false
});
video.srcObject = stream;
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79777849/webview2-app-shows-use-and-move-camera-prompt-when-adding-zoom-to-getusermedia[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия