YouTubeAndroidPlayerAPI不能播放一些video

– 更新09/05/2016 17:10 – 问题似乎与video的发布date有关…在四月份的最后一周,我在YouTube上发布了很多video,这些video发布到四月的19:00 27正常工作,而在同一天21:15收费的人讨论这个问题,就好像在4月27日的19日至21日之间已经通过YouTube对video进行了一些更新或更改。 我试图加载一个新的video,这也有同样的问题。


我有一个奇怪的问题与YouTubeAndroidPlayerAPI ..我使用YouTubePlayerSupportFragment(但我有与YouTubePlayerFragment相同的问题)在我的应用程序中播放video,一些video播放完美,其他显示错误“有一个问题,而玩,点击重试。 ”。

当Android监视器发生这种情况时,我看到了YouTube API错误:

05-08 11:25:22.145 20521-20521/? E/YouTubeAndroidPlayerAPI: fmt.noneavailable oae: Video not supported/available at oab.a(SourceFile:212) at nvl.a(SourceFile:383) at nvl.a(SourceFile:706) at nvr.a(SourceFile:1144 at nsn.onPostExecute(SourceFile:2102) at android.os.AsyncTask.finish(AsyncTask.java:651) at android.os.AsyncTask.-wrap1(AsyncTask.java) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5443) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

如果我点击video中的YouTube图标在YouTube应用中播放,则video在官方应用中正确播放。

如果video的获利活跃,则广告video会正常显示,最后会显示错误。

我试过了:

  • 使用YouTubePlayerFragment而不是YouTubePlayerSupportFragment
  • 使用Activity而不是AppCompatActivity
  • 将videoembedded到HTML页面中,工作正常
  • 无效的货币化,没有任何变化
  • 不同的密钥,一个用于debugging,一个用于发布

非常感谢您的帮助!


更新11/05/2016这似乎是一个YouTube的bug; 目前唯一可行的解​​决方法似乎是在YouTube官方应用程序中打开video,或者用WebViewreplace播放器片段。 标准的WebView是非常有限的,不会显示button来使全屏video。 您需要创build一个扩展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中加载video:

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

Solutions Collecting From Web of "YouTubeAndroidPlayerAPI不能播放一些video"