📜  exoplayer 如何在视频仍在加载时放置加载器 android java (1)

📅  最后修改于: 2023-12-03 15:00:39.843000             🧑  作者: Mango

ExoPlayer如何在视频仍在加载时放置加载器

在ExoPlayer中,我们可以使用进度条或加载器来通知用户视频正在加载。这也可以帮助用户知道视频播放的状态以及何时可以播放视频。

以下是在ExoPlayer中如何实现这一点的步骤。

步骤1:添加控件

添加一个ProgressBar或其他适当的控件来指示正在加载内容。在XML布局文件中添加您选择的控件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>
步骤2:隐藏ProgressBar

在开始播放视频之前,您需要隐藏ProgressBar。我们可以使用ExoPlayer的监听器来实现这一点。

ProgressBar progressBar = findViewById(R.id.progress_bar);
SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).build();
PlayerView playerView = findViewById(R.id.player_view);

// Add player to the player view
playerView.setPlayer(player);

// Create a data source factory
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
        Util.getUserAgent(this, getString(R.string.app_name)));

// Create a media source
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(Uri.parse("http://example.com/video.mp4"));

// Prepare the player
player.prepare(mediaSource);

// Hide progress bar when video is ready to play
player.addListener(new Player.EventListener() {
    @Override
    public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
        if (playbackState == Player.STATE_READY) {
            progressBar.setVisibility(View.GONE);
        }
    }
});
步骤3:显示ProgressBar

如果视频播放过程中出现缓冲问题,我们需要显示ProgressBar。我们也可以使用ExoPlayer的监听器来实现这一点。

player.addListener(new Player.EventListener() {
    @Override
    public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
        if (playbackState == Player.STATE_READY) {
            progressBar.setVisibility(View.GONE);
        } else if (playbackState == Player.STATE_BUFFERING) {
            progressBar.setVisibility(View.VISIBLE);
        }
    }
});
结论

使用这些步骤,您可以在ExoPlayer中添加一个ProgressBar或其他适当的控件来指示视频正在加载。这有助于向用户传递视频播放的状态,以及何时可以播放视频。