例如,这个视频不能播放与Youtube播放器API: https://www.youtube.com/watch?v=OLK1efdt3n8(其他视频从搜索响应工作ok)
我得到以下消息:
09-25 17:18:50.226 24280-24280/com.mypackagename W/YouTubeAndroidPlayerAPI﹕ Cannot load modern controls UI. Upgrade to the latest version of the Android YouTube API.
09-25 17:19:05.911 24280-24280/com.mypackagename E/YoutubePlayerFragment﹕ video error : INTERNAL_ERROR
YouTubePlayer API版本:1.2.1(最新)
设备上的YouTube应用程序是最新的,能够播放此视频
视频参数:videoEmbeddable=true videoSyndicated=true
对我来说,问题是我只能播放一次视频,但之后YouTubePlayer不播放任何视频,我希望还有许多其他人也面临着与YouTubeAndroidPlayerAPI类似的问题。我认为最新的youtube应用程序(版本10.37.58)和YouTubeAndroidPlayerAPI 1.2.1不兼容。
据我所知,目前解决这个问题的唯一方法是将安装在设备上的youtube应用程序降级到10.36.52或以下。(你可以从apk镜像获取)
从我在使用YouTubeAndroidPlayerAPI时注意到的是,与youtube版本10.36.52一起,它抛出警告消息"无法加载现代控件UI。升级到最新版本的Android YouTube API。"每次我尝试播放视频,但其他工作正常。在10.35.53及以下版本中,不会抛出这样的警告消息。
原因:我不确定,但我认为这与YouTubeAndroidPlayerAPI 1.2.1中的YoutubePlayerSupport片段的巨大内存泄漏问题有关,这是众所周知的,并在谷歌数据api问题跟踪器中报告。这一问题终于在上个月的9月1日得到了解决(至少目前的状态是这样的),而在这一问题被报道一年后(惊讶地发现谷歌花了这么长时间)。然而,谷歌还没有推出带有修复功能的新版YouTubeAndroidPlayerAPI。所以也许他们在9月份修复了youtube应用中的内存问题,这在某种程度上破坏了YouTubeAndroidPlayerAPI 1.2.1的功能(因为YouTubeAndroidPlayerAPI直接依赖于youtube应用的工作)。
版本1.2.2的YouTube播放器api刚刚发布。它可能会解决您遇到的视频播放问题。
activity android:name=".ui.activity. playeractivity; android: screenOrientation ="landscape" 在
如果你没有添加方向将无法工作。定向是必须的。否则将显示为正在加载,将不播放!
嘿,这就是我在我的应用程序中实现的视频播放
public class Youtubevideo extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener
{
public static final String API_KEY = "Use Your API key For youtube api";
//http://youtu.be/<VIDEO_ID>
//sample video id
public String VIDEO_ID = "abcdefgh";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** attaching layout xml **/
setContentView(R.layout.youtubevideo);
Intent dataReceived = getIntent();
if(dataReceived != null)
{
VIDEO_ID = dataReceived.getStringExtra("url");
}
/** Initializing YouTube player view **/
YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
youTubePlayerView.initialize(API_KEY, this);
}
@Override
public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) {
Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show();
}
@Override
public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {
/** add listeners to YouTubePlayer instance **/
//player.setPlayerStateChangeListener(playerStateChangeListener);
//player.setPlaybackEventListener(playbackEventListener);
player.setFullscreen(true);
player.setShowFullscreenButton(true);
/** Start buffering **/
if (!wasRestored) {
player.cueVideo(VIDEO_ID);
}
}
private PlaybackEventListener playbackEventListener = new PlaybackEventListener() {
@Override
public void onBuffering(boolean arg0) {
}
@Override
public void onPaused() {
}
@Override
public void onPlaying() {
}
@Override
public void onSeekTo(int arg0) {
}
@Override
public void onStopped() {
}
};
private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() {
@Override
public void onAdStarted() {
}
@Override
public void onError(ErrorReason arg0) {
}
@Override
public void onLoaded(String arg0) {
}
@Override
public void onLoading() {
}
@Override
public void onVideoEnded() {
}
@Override
public void onVideoStarted() {
}
};
}
和XML将像:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/youtube_player"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:padding="5dp" />
</LinearLayout>
和在构建中。gradle使用公开的Youtube jar库:
compile files('libs/YouTubeAndroidPlayerApi.jar')
希望这对你有帮助。:)
这太奇怪了!我只能建议您使用一些标志,看看是否有一些组合可以解决问题。我将从下面开始:
youtubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);