在Android应用中通过WebView在WebRTC中没有音频

ted*_*ddy 3 audio android audio-streaming webview

我开发了一个简单的Android应用程序,它包装WebView以连接到apprtc.appspot.com.WebRTC会话成功建立,视频流显示在应用程序和对等设备(Mac上的Chrome浏览器)中,可以在应用程序上听到音频,但Mac不会收到任何音频.Chrome:// Mac上的Chrome浏览器上的webrtc-internals显示没有错误.从Android设备中的Chrome到Mac中的Chrome的WebRTC可以很好地处理音频.我还在应用程序中编写了一个测试活动,以使用成功捕获和播放音频的MediaRecorder和MediaPlayer.

我的权限设置看起来像

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.audio.low_latency" />
<uses-feature android:name="android.hardware.audio.pro" />
<uses-feature android:name="android.hardware.microphone" android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.front" android:required="true" />
Run Code Online (Sandbox Code Playgroud)

应用代码看起来像

    int permission;

    permission = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
    if (permission != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.RECORD_AUDIO)) {
            // Show an expanation to the user *asynchronously* -- don't block
        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.RECORD_AUDIO},
                    MY_PERMISSIONS_REQUEST_AUDIO);
        }
    }
    // ... similar camera permission request ...

    WebView webView = (WebView) findViewById(R.id.web_view);
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);
    settings.setDatabaseEnabled(true);
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onPermissionRequest(PermissionRequest request) {
            request.grant(request.getResources());
        }
    });
    webView.loadUrl("https://appr.tc/r/my-room");
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

小智 7

添加:

settings.setMediaPlaybackRequiresUserGesture(false);
Run Code Online (Sandbox Code Playgroud)


Sun*_*ama 6

添加<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />权限为我解决了问题.