2016-12-14 97 views
1

我在我的android项目中实现了一个youtube播放器(片段)。我试图以无铬播放器的风格播放视频,同时自己实施播放器控制。播放和暂停按钮工作正常,但是当视频正在播放时,seekbar不会移动。虽然,我可以通过它跳过视频(提前播放视频),但搜索栏并没有独立运行。我哪里做错了?为什么youtube视频不能在android中播放?

@Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { 
      if (!b) { 
       YPlayer = youTubePlayer; 
       displayCurrentTime();  // It displays current progress of video in --:-- format. It's working fine... 
       YPlayer.loadVideo(id);  // id -> YouTube video id 
       YPlayer.play(); 
       YPlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS); 
       YPlayer.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() { 
        @Override 
        public void onLoading() { 
        } 

        @Override 
        public void onLoaded(String s) { 
        } 

        @Override 
        public void onAdStarted() { 
        } 

        @Override 
        public void onVideoStarted() { 
         seekBar.setMax(YPlayer.getDurationMillis()/1000); 
        } 

        @Override 
        public void onVideoEnded() { 
        } 

        @Override 
        public void onError(YouTubePlayer.ErrorReason errorReason) { 
        } 
       }); 

       YPlayer.setPlaybackEventListener(new YouTubePlayer.PlaybackEventListener() { 
        @Override 
        public void onPlaying() { 
         handler.postDelayed(runnable, 100); //Handler's instance initialized as instance variable 
         displayCurrentTime(); 
        } 

        @Override 
        public void onPaused() { 
         handler.removeCallbacks(runnable); 
        } 

        @Override 
        public void onStopped() { 
        } 

        @Override 
        public void onBuffering(boolean b) { 
         handler.postDelayed(runnable, 1000); 
        } 

        @Override 
        public void onSeekTo(int i) { 
         handler.removeCallbacks(runnable); 
        } 
       }); 
       playerControl.setVisibility(View.VISIBLE); //Layout with play (and pause) button, Seekbar (which isn't moving along with the video), and timer (string being returned by the above displayCurrentTime() method) 
      } 
     } 

     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
     } 
    }); 
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      long lengthPlayed = (YPlayer.getDurationMillis() * progress)/100; 
      YPlayer.seekToMillis((int) lengthPlayed); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      while(YPlayer != null && seekBar.getMax() > YPlayer.getCurrentTimeMillis()) 
      { 
       int videoProgressed = 0; 
       try 
       { 
        Thread.sleep(1000); 
        videoProgressed = YPlayer.getCurrentTimeMillis(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
       seekBar.setProgress(videoProgressed); 
      } 
     } 
    }); 


    private void displayCurrentTime() { 
     if (YPlayer != null) { 
      String formattedTime = formatTime(YPlayer.getCurrentTimeMillis()); 
      playTime.setText(formattedTime); 
     } 
    } 

    private String formatTime(int millis) { 
     int seconds = millis/1000; 
     int minutes = seconds/60; 

     return String.format("%02d:%02d", minutes % 60, seconds % 60); 
    } 

    private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      if(YPlayer != null) { 
       displayCurrentTime(); 
      } 
      handler.postDelayed(this, 1000); 
     } 
    }; 
+0

嗯...你好吗?任何人?请!!! –

回答

0

检查此tutorial如果它可以帮助你。本教程是关于Android建筑音频播放器的。这里讨论如何构建一个简单的音频播放器,如播放,暂停,前进,后退,下一首,上一首,播放列表和搜索栏等基本控件。

只需检查教程解释如何更新在使用Handler在后台运行的后台线程中实现的进度条计时器的代码。您可以在这里查看如何实施搜索栏。

欲了解更多相关信息,请检查相关SO question