【问题标题】:Youtube HTML5 Video Stopped Working in AndroidYoutube HTML5 视频在 Android 中停止工作
【发布时间】:2011-11-18 07:32:33
【问题描述】:

大约一周前,不知何故 Youtube HTML5 视频对我停止了工作。我不知道为什么。这是上周工作的代码(嗯,不是真正的代码,而是我能做的最小的例子):

public class VideoTestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webView = new WebView(this);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setPluginState(PluginState.OFF);
        webView.setWebChromeClient(new TestWebChromeClient());

        setContentView(webView);

        // Try with http://player.vimeo.com/video/24158845 and it works.
        webView.loadUrl("http://www.youtube.com/embed/e2UIg3Ddfp0");
    }

    private class TestWebChromeClient extends WebChromeClient {
        @Override
        public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
            super.onShowCustomView(view, callback);
            VideoTestActivity.this.setContentView(view);
        }
    }
}

这在我的手机或模拟器上不起作用。疯狂的部分是 Vimeo 仍然很好用。我尝试设置 iPhone 用户代理,但没有奏效,而且我没有想法。看起来 Youtube 确实改变了一些东西......

【问题讨论】:

  • 我昨晚在这方面工作,但没有运气。这很奇怪。我能够使用默认控件获取 youtube,但似乎某处仍然存在 js 错误,
  • 顺便说一句,上面的代码现在似乎可以工作了。假设 Google 已经修复了 javascript 错误
  • 是的,他们就是这样做的,所以这又不是问题了。

标签: java android youtube


【解决方案1】:

Youtube 可能已更改其嵌入页面中的某些内容,这很可能导致WebView 内部出现问题,这就是它不再工作的原因。

您还在和以前一样在同一设备上测试您的应用吗?

我不认为使用这个解决方案是一个好习惯,因为你不能相信你今天从Youtube 显示的内容并且它有效,几天后也将是相同的,它会仍然可以工作,就像您现在遇到的那样。我对videosYoutube 的内容也有类似的问题,它可以在一台设备上运行,而在其他一些设备上根本不行。也是Flash的内容,很多安卓设备没有Flash,无法播放内容。

一种解决方案是创建一个Intent 来播放视频:

      Intent videoIntent=new Intent(Intent.ACTION_VIEW, 
                                     Uri.parse("http://www.youtube.com/my_url"));
      startActivity(videoIntent);

但我建议按照Supported Media Formats 中的建议对Android 的视频进行编码,并在可能的情况下将它们存储在您自己的服务器上。

编辑: 他们明确地改变了一些东西,因为那里有一个 js 错误。您可以使用WebChromeClient 跟踪它们:

  mWebView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onConsoleMessage(String message, int lineNumber,
                String sourceID) {
            super.onConsoleMessage(message, lineNumber, sourceID);
            Log.i("VIDEO VIEW",message);
        }
 }

这是我收到的消息错误:

TypeError: Result of expression 'a' [undefined] is not an object.line 78sourcehttp://www.youtube.com/embed/e2UIg3Ddfp0

不知道对你有没有帮助,我稍后再看看,看看能找到什么。

【讨论】:

  • 感谢您的帮助。我从来没有想过要监听 JS 错误。该应用程序的全部目的是观看视频,主要来自 Youtube,所以我想如果这永远不会在 Youtube 方面得到解决,我将不得不看看我是否可以以某种方式拦截源并修复它,或者使用意图。 Intent 解决方案有点糟糕,因为它将人们带到一个新应用程序并让他们在浏览器和 Youtube 应用程序之间进行选择,但是,如果这是唯一的选择,我想这就是你所能做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 2011-05-16
  • 2011-10-04
相关资源
最近更新 更多