【问题标题】:YouTube Android Player API INTERNAL_ERROR for multiple videos多个视频的 YouTube Android Player API INTERNAL_ERROR
【发布时间】:2016-08-29 17:22:06
【问题描述】:

使用YouTube Android Player API sample code(版本 1.2.2),如果我将任何视频 ID 更改为我上传的一个(例如“QVikru_w2hQ”或“u1n6E81rm80”),缩略图会加载到播放器中,但点击播放时,播放器会使用 YouTubePlayer.ErrorReason.INTERNAL_ERROR 进入 onError 函数。将显示一条消息“播放时出现问题。点击重试”。在 YouTube 网站或我们的 iOS 应用程序上播放这些视频没有问题。使用我的开发者密钥可以正常播放原始示例视频。

我在多个设备上都遇到了这个问题,包括我的 Nexus 5X (android 6.0.1),YouTube 应用版本目前为 11.13.56。

有没有其他人遇到过类似的问题?

我还在google data api issue tracker 上发布了一个潜在的错误报告。

【问题讨论】:

  • 这适用于任何设备吗?
  • @VivekMishra : Galaxy S4, 5.0.1, 11.10.60 -- 编号 HTC One M8, 6.0, 11.10.60 -- 编号 HTC Desire 610, 4.4.2, 11.13.56 - - 没有。我还没有找到。
  • 我也尝试了示例代码,它肯定不适用于您提供的视频 ID,但它适用于我从您的试管中挑选的许多随机视频 ID,并且工作正常。我认为这可能与可访问性问题有关
  • @JonG :同样的问题。我在各种 youtube 频道上托管了 +900 个视频,其中大多数不再在许多 Android 设备上播放。虽然它们在 iOS 上都可以正常运行。奇怪的是,有些视频有效,有些则无效。这一切都发生在几天前。你找到解决办法了吗?
  • @jonG 同样的问题在这里。新视频无法播放,但之前上传的视频可以正常播放。

标签: android youtube android-youtube-api


【解决方案1】:

WebView 似乎是一个很好的解决方案。因为我很着急,需要快速修复,所以我使用了这个 github 项目的源代码:

https://github.com/theScrabi/NewPipe

此代码不依赖于 Youtube API。它是纯网络解析。我所有的视频都可以正常使用该解决方案,和以前一样快。

整个项目是一个功能性应用程序,但您可以深入了解并获取所需的内容。我使用了嵌入视频缩略图和全屏播放器活动的片段。

感谢项目的作者。

【讨论】:

    【解决方案2】:

    这似乎是一个 YouTube 错误,查看YouTubeAndroidPlayerAPI can't play some videos 了解我收集的详细信息。

    目前唯一可行的解​​决方法似乎是在 YouTube 官方应用中有意打开视频或将播放器片段替换为 WebView。我更喜欢第二种解决方案。

    标准的 WebView 非常有限,不会显示使视频全屏的按钮。您需要创建一个扩展 WebChromeClient 的类:

    public class MyWebChromeClient extends WebChromeClient {
    
        FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
    
        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            if (mCustomView != null) {
                callback.onCustomViewHidden();
                return;
            }
            mContentView = (LinearLayout) findViewById(R.id.scheda_video_activity);
            mContentView.setVisibility(View.GONE);
            mCustomViewContainer = new FrameLayout(SchedaVideoActivity.this);
            mCustomViewContainer.setLayoutParams(LayoutParameters);
            mCustomViewContainer.setBackgroundResource(android.R.color.black);
            view.setLayoutParams(LayoutParameters);
            mCustomViewContainer.addView(view);
            mCustomView = view;
            mCustomViewCallback = callback;
            mCustomViewContainer.setVisibility(View.VISIBLE);
            setContentView(mCustomViewContainer);
        }
    
        @Override
        public void onHideCustomView() {
            if (mCustomView == null) {
                return;
            } else {
                mCustomView.setVisibility(View.GONE);
                mCustomViewContainer.removeView(mCustomView);
                mCustomView = null;
                mCustomViewContainer.setVisibility(View.GONE);
                mCustomViewCallback.onCustomViewHidden();
                mContentView.setVisibility(View.VISIBLE);
                setContentView(mContentView);
            }
        }
    }
    

    然后初始化WebView:

    WebView myWebView = (WebView)findViewById(R.id.webview);
    MyWebChromeClient mWebChromeClient = new MyWebChromeClient();
    myWebView.setWebChromeClient(mWebChromeClient);
    myWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    

    最后,在 WebView 中加载视频:

    myWebView.loadUrl("https://www.youtube.com/embed/"+youtube_id);
    

    如果您想使 WebView 尺寸适应 YouTube 播放器,您可以这样做:

    Point size = new Point();
    getWindowManager().getDefaultDisplay().getSize(size);
    myWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)Math.round(size.x/1.77)));
    

    【讨论】:

    • 您是否使用此方法获得了自动播放功能?我还没有成功。 setMediaPlaybackRequiresUserGesture(false) 似乎没有帮助。
    • 不,你不能用这个简单的代码自动播放视频......用户必须点击“播放”按钮。
    猜你喜欢
    • 2017-10-12
    • 2013-01-21
    • 2015-12-31
    • 2017-08-20
    • 2023-03-23
    • 2015-12-23
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多