android - 在基于Chromium的 float WebView中播放YouTube视频时出现音频滞后或断断续续的情况

标签 android webview youtube chromium

我正在使用带有 float WebView的Android应用程序,该WebView使用Youtube的IFrame API播放Youtube视频。 float View 是作为服务实现的,在用户浏览应用程序的不同 Activity 时,它始终处于打开状态;当应用程序最小化时,它也 float 。

现在存在的问题是,在 Activity 中渲染 View 组件时,视频声音滞后或停滞。这是我已经完成的故障排除:

  • 我做了两个简单的 Activity ,没有网络工作,只是布局中有一堆Button。导航到这些 Activity 或返回时,声音会被剪切一秒钟或更长时间。
  • 我已经在应用程序和WebView上设置了硬件加速属性。这些是我用来将WebView添加到WindowManager的参数
    int flags = WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED | WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            flags,
            PixelFormat.TRANSLUCENT);
    
  • 我已将setLayerType设置为LAYER_TYPE_HARDWARE的WebView。以下是WebView的安装代码
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);
    settings.setDatabaseEnabled(true);
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    
    AndroidInterface javascriptInterface = new AndroidInterface(this);
    webView.addJavascriptInterface(javascriptInterface,         "AndroidFunction");
    webView.setWebChromeClient(new WebChromeClient());
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setVerticalScrollBarEnabled(false);
    webView.setHorizontalScrollBarEnabled(false);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    } else {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    
  • 我也尝试过关闭应用程序的硬件加速,但是WebView需要它来播放视频。
  • 我已经加载了Youtube视频,但未使用其IFrame API,并且遇到了同样的问题。
  • 这很有趣,如果我加载Vimeo视频,则不会发生此问题。
  • 此问题发生在Nexus 5(Android版本6.0.1)中,但在Samsung Galaxy S3 mini(Android版本4.2.2)中没有发生。这使我认为该问题与Chromium有关,因为WebView在所有4.4之前的设备上都使用WebKit,而不使用Chromium。

  • 有人遇到过这个问题吗?任何想法都会有用!

    提前致谢。

    最佳答案

    最后,我找到了解决此问题的方法。我在另一个进程中声明了服务(在Android Manifest文件中指定了android:process属性)。这两个服务之间的通信必须使用带有Messenger的IPC(Android进程间通信)来完成。

    关于android - 在基于Chromium的 float WebView中播放YouTube视频时出现音频滞后或断断续续的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36858738/

    相关文章:

    android - 如何将 R.java 中的 int 值转换为 String

    java - 在 Android 中实现 SOAP API

    android - 在 WebView 中缓存渐进式 Web 应用程序

    android - 具有三个字段的 ListView

    android - 安卓版 HTTrack!或类似的东西

    cocoa - 通过 stringByEvaluatingJavaScriptFromString 将文本从文件传递到 webview :

    android - Ajax 不能在 android webview 中工作

    javascript - PhoneGap 构建嵌入 YouTube 视频

    javascript - 将鼠标悬停或悬停在 YouTube 嵌入式播放器上

    Android Youtube 应用程序 -> GoogleTV 配对