– 更新09/05/2016 17:10 –
这个问题似乎与视频发布的日期有关…在4月的最后一个星期,我在YouTube上发布了许多视频,4月27日19:00发布的视频正常工作,而21:15在同一天有讨论的问题,好像在4月27日的19日和21日之间已经对YouTube的视频进行了一些更新或更改.我试图加载一个新的视频,这也有同样的问题.
这个问题似乎与视频发布的日期有关…在4月的最后一个星期,我在YouTube上发布了许多视频,4月27日19:00发布的视频正常工作,而21:15在同一天有讨论的问题,好像在4月27日的19日和21日之间已经对YouTube的视频进行了一些更新或更改.我试图加载一个新的视频,这也有同样的问题.
我有一个与YouTubeAndroidPlayerAPI的一个奇怪的问题.我使用YouTubePlayerSupportFragment(但我有与YouTubePlayerFragment相同的问题)在我的应用程序播放视频,一些视频播放完美,其他显示错误“播放时出现问题,点击重试. ”.
当在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)
如果我点击视频中的YouTube图标在YouTube应用中播放,则视频可以在官方应用中正确播放.
我试过了:
>使用YouTubePlayerFragment而不是YouTubePlayerSupportFragment
>使用活动而不是AppCompatActivity
>将视频嵌入HTML页面,它可以正常工作
>取消活动获利,没有变化
>不同的键,一个用于调试,一个用于释放
非常感谢您的帮助!
更新11/05/2016它似乎是一个YouTube错误;目前唯一可以通过的解决方法似乎是打开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)));
解决方法
尝试将您的YouTube应用程式更新为11.19.56版.