WebView WebRTC无法正常工作

Sia*_*hei 10 android android-webview webrtc android-permissions webviewchromium

我正试图在WebRTC聊天中显示WebView.与本文档 相关的WebView v36支持WebRTC.对于我的测试,我正在使用设备,Chrome/39.0.0.0并添加了许可表示:

<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" />
Run Code Online (Sandbox Code Playgroud)

但是当进入聊天时,在日志中看到铬错误(设备没有显示\翻译任何内容,只有'加载'进度条):

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
Run Code Online (Sandbox Code Playgroud)

在真实设备上测试,Android 5.1.1

Sia*_*hei 20

需要额外的权限请求

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

更新,但它不适用于音频捕获

UPDATE这里找到了工作谷歌示例代码

  • @NikolaLukic:你能告诉我你是如何解决的吗?我在我的项目中尝试了同样的方法,但它不起作用。 (3认同)

Muh*_*uja 10

您需要这些权限才能访问相机和麦克风

<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" /> 
Run Code Online (Sandbox Code Playgroud)

接下来,您需要向您的 webview 授予权限,请查看此链接以了解更多详细信息:

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);
                }
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果音频播放不起作用,请使用以下命令:

webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
Run Code Online (Sandbox Code Playgroud)