WebView WebRTC не работает

Я пытаюсь показать WebRTC общаться в WebView, Связанные с этой документацией WebView v36 опоры WebRTC, Для моего теста я использую устройство с Chrome/39.0.0.0 и добавил permissins, чтобы манифест:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<user-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

но при входе в чат просмотрите ошибку хрома в журнале (устройство ничего не показывает \ переводит, только индикатор загрузки)

W/AudioManagerAndroid: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO
W/AudioManagerAndroid: No audio device will be available for recording
E/chromium: [ERROR:web_contents_delegate.cc(178)] WebContentsDelegate::CheckMediaAccessPermission: Not supported.
E/chromium: [ERROR:web_contents_delegate.cc(178)] WebContentsDelegate::CheckMediaAccessPermission: Not supported.
W/AudioManagerAndroid: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO
W/AudioManagerAndroid: No audio device will be available for recording
D/ChromiumCameraInfo: Camera enumerated: front

протестировано на реальном устройстве, Android 5.1.1

5 ответов

Решение

Требуется дополнительный запрос на разрешения

webView.setWebChromeClient(new WebChromeClient(){
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
                request.grant(request.getResources());
        }
    });

обновление, но оно не работает для захвата звука

ОБНОВЛЕНИЕ нашел рабочий код google здесь

Эти разрешения необходимы для доступа к камере и микрофону.

      <uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

// don't miss this one
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

Затем вам нужно предоставить разрешения вашему веб-просмотру, проверьте эту ссылку для получения дополнительной информации:

      webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onPermissionRequest(PermissionRequest request) {
            runOnUiThread(() -> {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    String[] PERMISSIONS = {
                            PermissionRequest.RESOURCE_AUDIO_CAPTURE,
                            PermissionRequest.RESOURCE_VIDEO_CAPTURE
                    };
                    request.grant(PERMISSIONS);
                }
            });
        }
    });

Если воспроизведение звука не работает, используйте это:

      webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

Мой опыт с этим в 2022 году:

  1. Разрешения CAMERA и RECORD_AUDIO должны быть объявлены в манифесте.
  2. setWebChromeClient.onPermissionRequestследует проверить, были ли уже предоставлены эти разрешения. Если нет, используйтеregisterForActivityResult(new RequestMultiplePermissions())чтобы попросить пользователя предоставить их.

не работает в версии Android 28 ошибка хром: [ОШИБКА:web_contents_delegate.cc(218)] WebContentsDelegate::CheckMediaAccessPermission: не поддерживается.

в основном это ошибка при перезагрузке веб-просмотра, потому что, когда мы запрашиваем аудио, разрешение камеры на веб-просмотр, после принятия разрешения нам нужно обновить веб-страницу.

         if (permission.equals("android.webkit.resource.AUDIO_CAPTURE")) {
                        demandForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
                    } else {
                        myRequest.grant(request.getResources());
                    }

Я также застрял с этой проблемой в течение многих дней, но после приведенного ниже кода ссылки 100% рабочий код Android Webview

Другие вопросы по тегам