使用Youtube播放器API播放不同的Youtube视频。

4

我正在使用Youtube Player API for Android来播放视频,通过在listview中选择其中一个视频(视频是通过解析json等方式获取的)。问题出现在当我只能播放我选择的listview中的第一个视频时,因为当我在listView中的不同元素上单击时,播放器视图不会更改。以下是重要代码:

 lista.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> pariente, View view, 
                    int posicion, long id) {

                Video chosen = (Video)pariente.getItemAtPosition(posicion); 
                String urlVideo = chosen.getUrl();
                String aux = getYoutubeVideoId(urlVideo);
                URL_VIDEO = aux;

                youTubeView.initialize(KEY_DEVELOPER, new YouTubePlayer.OnInitializedListener() {

                    @Override
                    public void onInitializationFailure(Provider arg0,
                            YouTubeInitializationResult arg1) {
                        // TODO Auto-generated method stub
                        Log.d("DEPURANDO: ERROR AL VISUALIZAR", URL_VIDEO);

                    }

                    @Override
                    public void onInitializationSuccess(Provider arg0,
                            YouTubePlayer player, boolean wasRestored) {
                        // TODO Auto-generated method stub
                        if(!wasRestored){       
                            Log.d("YOUTUBE", "URL: " + URL_VIDEO);
                            player.cueVideo(URL_VIDEO);
                        }
                    }
                });
            }

我理解问题是由于播放器不能被初始化两次,所以执行仅进入OnInitializationSucess一次(我进行了测试),因此仅播放第一个视频。如何解决这个问题?


我曾尝试在listview类型的应用程序中制作播放器,但失败了。当您在listview中播放第一个视频时,是否尝试滚动列表?在我的手机上,当我滚动时,它会在listview中的任何地方留下黑色矩形,您也遇到同样的问题吗? - Chor Wai Chun
嗯,不,我没有遇到同样的错误,在点击视频后,列表视图仍然正常工作! - Rafag
4个回答

6
你只需要初始化一次,并在你的类中存储该播放器。
@Override
public void onInitializationSuccess(Provider arg0, YouTubePlayer player, boolean wasRestored) {
     if(!wasRestored){       
         mPlayer = player;
     }
}

此后,您可以通过调用函数在mPlayer上播放任何Youtube URL。

public void playVideo(String url) {
     if( mPlayer != null ) {
          mPlayer.cueVideo(url);
     }
}

谢谢,这对我很有帮助,我会在评论中发布我的代码。 - Deepanshu Mishra
非常有用,搜索了很多才找到它。 - Panache

3

这个教程对我很有帮助,Cristiana214,希望它也能帮到你:http://androiddev101.com/episode-12-youtube-it-all-night-long/ - Rafag

0

点击时,只需滚动列表到指定位置(position),如果该项是列表中的最后一项,则可以通过计算该项顶部来给出填充。或者使用YouTubeStandalonePlayer播放视频。

Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) mContext, YOU_TUBE_API_KEY, VideoID[getLayoutPosition()], 100, false, true);

mContext.startActivity(intent);

0

我知道这已经很老了,但是这篇文章之后的人可以参考以下解决方案。

首先初始化YoutubePlayerView并将YoutubePlayer对象存储在类变量中。

youTubeView.initialize(KEY_DEVELOPER, new YouTubePlayer.OnInitializedListener() {

                @Override
                public void onInitializationFailure(Provider arg0,
                        YouTubeInitializationResult arg1) {
                    // TODO Auto-generated method stub
                    Log.d("DEPURANDO: ERROR AL VISUALIZAR", URL_VIDEO);

                }

                @Override
                public void onInitializationSuccess(Provider arg0,
                        YouTubePlayer player, boolean wasRestored) {
                    youtubePlayer = player;
                }
            });

这里的"youtubePlayer"是YoutubePlayer类的一个变量。

现在在onclick监听器中加载您的视频到youtubePlayer中。

lista.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> pariente, View view, 
                int posicion, long id) {

            Video chosen = (Video)pariente.getItemAtPosition(posicion); 
            String urlVideo = chosen.getUrl();
            String aux = getYoutubeVideoId(urlVideo);
            URL_VIDEO = aux;
            youtubePlayer.load(URL_VIDEO);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接