使用YouTube Android Player API sample code(版本1.2.2),如果我将任何视频ID更改为我已上传的视频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上发布了潜在的错误报告。
答案 0 :(得分:2)
WebView似乎是一个很好的解决方案。因为我很急,需要快速修复,我使用了这个github项目的源代码:
https://github.com/theScrabi/NewPipe
此代码不依赖于Youtube API。它是纯粹的Web解析。我的所有视频都能像以前一样快速地使用该解决方案。
整个项目是一个功能性的应用程序,但你可以在里面潜水,并采取你需要的。我使用了嵌入视频缩略图和全屏播放器活动的片段。
赞赏该项目的作者。
答案 1 :(得分:0)
这似乎是一个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)));