【问题标题】:No audio in WebRTC over WebView in Android app在 Android 应用程序中,WebRTC 中没有通过 WebView 的音频
【发布时间】:2016-10-17 07:36:09
【问题描述】:

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

应用代码如下所示

    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");

出了什么问题?

【问题讨论】:

    标签: android audio webview audio-streaming


    【解决方案1】:

    在权限中添加&lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&gt; 为我解决了这个问题。

    【讨论】:

      【解决方案2】:

      添加:

      settings.setMediaPlaybackRequiresUserGesture(false);
      

      【讨论】:

      • 这拯救了我的一天
      【解决方案3】:

      对于这个问题,你必须做这些级别:

      1)定义一个字符串:

      private static final String DESKTOP_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36";
      

      2)

      myWebView.getSettings().setUserAgentString(DESKTOP_USER_AGENT);
      

      3)

      myWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 2021-02-09
        • 2015-04-13
        相关资源
        最近更新 更多