Приложение WebView2 показывает подсказку «Использовать и перемещать камеру» при добавлении Zoom в GetUsermediaC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Приложение WebView2 показывает подсказку «Использовать и перемещать камеру» при добавлении Zoom в GetUsermedia

Сообщение 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;
};






Подробнее здесь: https://stackoverflow.com/questions/797 ... tusermedia
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»