2017-10-25 19 views
0

SimpleExoPlayer을 사용하여 기본 폴더에서 동영상을 재생합니다. 모든 것이 정상적으로 작동하지만, 전체 지속 시간 대신 컨트롤 막대의 오른쪽 구석에 남은 지속 시간을 표시하고 싶습니다. 나는 플레이어의 getDuration 방법으로 총 지속 시간을 얻을 수 있으며 나머지 지속 시간은 player.getDuration() - player.getCurrentPosition()입니다. 그러나 매 초 남은 시간을 업데이트하고보기에 표시하는 방법은 없습니다.Exoplayer에서 동영상의 남은 재생 시간 표시

어떻게하면됩니까?

답변

0

이것은 매 초마다 업데이트 진행 상황을 구현하는 간단한 예입니다.
플레이어가 재생되지 않는 동안 (ExoPlayer.addListener(Player.EventListener);에서 이벤트를받을 수 있음) 및 Activity이 일시 중지/삭제 된 경우에도 Handler.removeCallbacks(updateProgressAction)을 사용해야합니다.

public class MainActivity extends AppCompatActivity { 
     private final Runnable updateProgressAction = new Runnable() { 
      @Override 
      public void run() { 
       updateProgress(); 
      } 
     }; 
     private TextView mTextView; 
     private Handler mHandler; 
     private SimpleExoPlayer mSimpleExoPlayer; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      mTextView = findViewById(R.id.my_text); 
      SimpleExoPlayerView simpleExoPlayerView = findViewById(R.id.player_view); 
      mSimpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector(new DefaultBandwidthMeter())); 
      simpleExoPlayerView.setPlayer(mSimpleExoPlayer); 
      Uri uri = Uri.parse("https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8"); 
      String userAgent = Util.getUserAgent(this, "appName"); 
      HlsMediaSource mediaSource = new HlsMediaSource(uri, new DefaultDataSourceFactory(this, userAgent), null, null); 
      mSimpleExoPlayer.prepare(mediaSource); 
      mSimpleExoPlayer.setPlayWhenReady(true); 
      mHandler = new Handler(); 
      mHandler.post(updateProgressAction); 
     } 

     private void updateProgress() { 
      mTextView.setText("calculate time and format"); 
      long delayMs = TimeUnit.SECONDS.toMillis(1); 
      mHandler.postDelayed(updateProgressAction, delayMs); 
     } 
    }