2016-12-14 3 views
1

私はアンドロイドプロジェクトにyoutube player(フラグメント)を実装しました。私は自分のプレーヤーコントロールを実装しながら、クロムのないプレーヤースタイルでビデオを再生しようとしています。再生ボタンと一時停止ボタンは正常に機能していますが、ビデオが進行中でもシークバーは動かない。しかし、私はそれを介してビデオをスキップすることができます(ビデオを先に再生する)が、シークバーはそれ自身で動いていない。どこで私は間違えましたか?youtubeビデオがアンドロイドで再生されているときにシークバーが動かないのはなぜですか?

@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 Building Audio Playerに関するものです。ここでは、再生、一時停止、前方、後方、次、前、再生リスト、およびシークバーなどの基本的なコントロールを備えたシンプルなオーディオプレーヤーを構築する方法について説明します。

ハンドラを使用してバックグラウンドで実行されるバックグラウンドスレッドで実装されたプログレスバータイマーの更新方法についてチュートリアルで説明するコードを確認してください。 seekbarの実装方法をここで確認できます。

詳細は、SO questionを参照してください。

関連する問題