【问题标题】:Netflix in Android WebViewAndroid WebView 中的 Netflix
【发布时间】:2016-02-09 06:53:08
【问题描述】:

因此,让我先说下载 Netflix App 不是一种选择。所以我的想法是制作一个包装应用程序,在 WebView 中加载 netflix 网站。这适用于登录/导航;但是,每当您点击播放按钮开始播放视频时,logcat 中没有响应并且没有输出。我正在寻找一种从 WebView 中查看更多调试消息的方法或一种让视频播放的方法。顺便用Android 4.4.4。

View layout = LayoutInflater.from(mActivity).inflate(R.layout.main_layout, vContentAreaContainer, false);

WebView webView = (WebView) layout.findViewById(R.id.main_web_view);
            webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());

webView.loadUrl("http://www.netflix.com");
vContentAreaContainer.addView(layout);

【问题讨论】:

  • Netflix 使用 html 5,所以我认为最好的方法是找到一些关于 webview 及其 html 5 支持的信息,尤其是视频流
  • 我对此进行了一些调查。似乎要使 HTML 5 视频正常工作,您需要做的就是启用硬件加速。我已经做到了,但仍然没有运气。

标签: android android-webview


【解决方案1】:

这是一个老问题,但在这里留下这个答案,希望它可以帮助其他人。

TL;DR: Netflix 内容无法在 Android-Webviews 中播放,因为 Android-Webviews 不支持播放 Netflix 视频所需的 Widevine 许可证安全级别。

详情:

  • HTML5 播放器使用加密媒体扩展 API 来检查 Android-Webview 的 Widewine CDM 支持的安全级别(稳健性)。

  • 用于查找受支持的 Widevine 配置的导航器 API 是 requestMediaKeySystemAccess。我们在 netflix 网站上看到 akira.js 播放器正在使用这个 API。这里添加断点我们看到传递给requestMediaKeySystemAccess的参数是:

      [{
        "distinctiveIdentifier": "not-allowed",
        "initDataTypes": [
          "cenc"
        ],
        "persistentState": "required",
        "videoCapabilities": [
          {
            "contentType": "video/mp4; codecs=\"avc1.640028\"",
            "robustness": "HW_SECURE_DECODE"
          },
          {
            "contentType": "video/mp4; codecs=\"avc1.640028\"",
            "robustness": "SW_SECURE_DECODE"
          }
        ]
      },
      {
        "distinctiveIdentifier": "not-allowed",
        "initDataTypes": [
          "cenc"
        ],
        "persistentState": "required"
      }]
    
  • Netflix 视频播放所需的最低稳健性级别为 SW_SECURE_DECODE,如上所述。

  • 如果我们打开 Android WebView 控制台并检查 NetFlix 视频所需的稳健性级别,我们会看到以下错误:unsupported keySystem or supportedConfiguration

【讨论】:

  • 我在 Android 问题跟踪器上提出了一个错误,他们澄清说 WebView 将不支持 L3 之后的 Widevine,从而有效地使 WebView 视频在 Netflix 上播放变得不可能。
  • 谷歌回复Status: Won't Fix (Infeasible) Unfortunately WebView just does not currently support Widevine beyond L3 as it requires a more complex rendering mechanism to be implemented, and this is not currently on our roadmap as far as I am aware. Apps which need more advanced video capabilities on Android typically use ExoPlayer from the embedding app code.
【解决方案2】:

您可以在 Android Webview 中加载 Netflix,但无法播放 Netflix 视频,因为:

  • 如果用户代理是移动设备,Netflix 将使用基于意图的 url 架构。此意图由 Netflix 应用程序处理,如果设备没有安装 Netflix 来处理它们,则会显示“安装 Netflix 屏幕”。

  • 如果您手动将用户代理设置为桌面,则 Netflix 将要求安装仅适用于 Mac 和 Windows 的 Microsoft Silverlight 插件。所以你又会走到死胡同。

         webView.setScrollbarFadingEnabled(false)
    
         val newUA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) 
             AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50"
    
        webView.getSettings().setUserAgentString(newUA)
    

【讨论】:

  • Rave 等应用如何让您在 Android 上播放 Netflix 视频?
  • @PrashantSharma 你找到解决办法了吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2014-11-05
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多