在Exoplayer中显示视频的剩余持续时间

时间:2017-10-25 09:30:48

标签: android android-video-player exoplayer

我正在使用SimpleExoPlayer使用默认控件播放原始文件夹中的视频。一切正常,但是,我想在控制栏的右角显示剩余持续时间而不是总持续时间。我可以使用播放器的getDuration方法和player.getDuration() - player.getCurrentPosition()的剩余持续时间获得总持续时间。但我不知道如何每秒更新剩余的持续时间并显示在视图上。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

这是一个如何每秒实施更新进度的简单示例 在播放器未播放时您仍应使用Handler.removeCallbacks(updateProgressAction)(您可以从ExoPlayer.addListener(Player.EventListener);获取活动)以及暂停/销毁Activity时。

   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);
        }
    }