无法使用YouTube Android Player API播放一些Youtube视频

时间:2015-09-25 14:42:25

标签: android youtube-api android-youtube-api youtube-data-api

例如,此视频无法使用Youtube播放器API播放:https://www.youtube.com/watch?v=OLK1efdt3n8(搜索响应中的其他视频无效)

我收到以下消息:

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

5 个答案:

答案 0 :(得分:11)

对我来说问题是我只能播放一次视频,但之后YouTubePlayer没有播放任何视频,我希望有many other people人也面临与YouTubeAndroidPlayerAPI类似的问题。我认为最新的YouTube应用程序(版本10.37.58)和YouTubeAndroidPlayerAPI 1.2.1不兼容。

据我所知目前您唯一能解决此问题的方法是将设备上安装的YouTube应用降级到10.36.52或更低。 (你可以从apk mirror)获得它

我在使用YouTubeAndroidPlayerAPI时注意到的是,使用youtube版本10.36.52,它会抛出警告消息" 无法加载现代控件UI。升级到最新版本的Android YouTube API。"我每次尝试播放视频时都会在logcat上运行,但工作正常。对于版本10.35.53及以下版本,不会抛出此类警告消息。

原因:我不确定,但我认为这与YouTubeAndroidPlayerAPI 1.2.1中YoutubePlayerSupport片段的巨大内存泄漏问题有关,该片段在google data api issue tracker中广为人知并有报道。它在上个月9月1日(至少是当前状态所说的)最终在报告一年之后得到了解决(惊讶地看到谷歌这么长时间)。然而谷歌还没有推出新版本的YouTubeAndroidPlayerAPI。所以也许他们在9月的youtube应用程序中解决了内存问题,其中一些如何以某种方式破坏了YouTubeAndroidPlayerAPI 1.2.1的功能(因为YouTubeAndroidPlayerAPI直接取决于youtube应用程序的工作)。

答案 1 :(得分:1)

YouTube播放器API的{strong> 1.2.2 版本has just been released。它可能会解决您遇到的视频播放问题。

答案 2 :(得分:1)

android:screenOrientation =“风景” >

如果不添加方向将不起作用。方向是必须的。否则将显示为正在加载,不会播放!

答案 3 :(得分:0)

嘿,这就是我在我的应用程序中实现的管视频播放

    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>

并在build.gradle中使用公开提供的Youtube jar lib:

compile files('libs/YouTubeAndroidPlayerApi.jar')
希望这会有所帮助。 :)

答案 4 :(得分:-1)

这太奇怪了!我只能建议你玩一些flags并查看某些组合是否能解决问题。我将从以下开始:

youtubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);