首页 文章

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

提问于
浏览
17

例如,此视频无法使用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

4 回答

  • 1

    对我来说,问题是我只能播放一次视频,但之后YouTubePlayer不播放任何视频,我希望many other people也面临与YouTubeAndroidPlayerAPI类似的问题 . 我觉得 the latest youtube app (version 10.37.58) and YouTubeAndroidPlayerAPI 1.2.1 are not compatible.

    据我所知 the only thing you can do currently to solve this problem is downgrade your youtube app installed on the device to 10.36.52 or below. (你可以从apk mirror获得)

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

    原因:我不确定,但我认为这与YouTubeAndroidPlayerAPI 1.2.1中YoutubePlayerSupport片段的巨大内存泄漏问题有关,该片段在_1758756中广为人知并报道 . 它最终在9月1日修复了(至少's what the current status says) after a year since it was reported (surprised to see what took google so long). However google hasn'推出了新版本的YouTubeAndroidPlayerAPI还有修复版 . 所以也许他们在9月份修复了youtube应用程序中的内存问题,其中一些内容如何破坏了YouTubeAndroidPlayerAPI 1.2的功能 . 1在某种程度上(因为YouTubeAndroidPlayerAPI直接取决于youtube应用程序工作) .

  • -1

    版权所有 1.2.2 的YouTube播放器API has just been released . 它可能会解决您遇到的视频播放问题 .

  • 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')
    

    希望这会有所帮助 . :)

  • 11

    这很奇怪!我只能建议你玩一些flags,看看是否有一些组合可以解决问题 . 我将从以下内容开始:

    youtubePlayer.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
    

相关问题