用 exoplayer 第二次播放显示没有视频 window
Second playback with exoplayer displays no video window
我有一个简单的基于文件的播放实现,第一次就可以正常工作。但是,当我再次实例化它时,我只听到音频,但没有视频(只是黑屏)。感谢任何帮助
我研究了很多示例代码,但到目前为止没有任何帮助
private void initiateFilePlayback(Uri uri)
{
closePlayer();
mDataSourceFactory = new DefaultDataSourceFactory(mContext, mAppName);
mExtractorsFactory = new DefaultExtractorsFactory();
mExoPlayer = ExoPlayerFactory.newSimpleInstance(this, new DefaultRenderersFactory(this), new DefaultTrackSelector(), new DefaultLoadControl());
mExoPlayer.clearVideoSurface();
mPlayerView = (PlayerView)findViewById(R.id.videoWindow);
mPlayerView.setVisibility(View.VISIBLE);
mPlayerView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
mPlayerView.setPlayer(mExoPlayer);
mMediaSource = new ExtractorMediaSource.Factory(mDataSourceFactory).setExtractorsFactory(mExtractorsFactory).createMediaSource(uri);
mExoPlayer.prepare(mMediaSource);
mExoPlayer.setPlayWhenReady(true);
}
private void closePlayer()
{
if (mExoPlayer != null)
{
mPlayerView.removeAllViews();
mExoPlayer.stop();
mExoPlayer.release();
mExoPlayer.removeMetadataOutput(null);
mPlayerView.setVisibility(View.INVISIBLE | View.GONE);
mPlayerView = null;
mMediaSource = null;
mDataSourceFactory = null;
mExtractorsFactory = null;
mExoPlayer = null;
}
}
这是我的布局:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/videoWindow"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
第二次播放只显示黑色window,背景有音频
我的问题是删除视图,所以不得不注释掉这一行:
mPlayerView.removeAllViews();
而且我还决定让我的播放器 activity 存活到应用 运行。这也避免了频繁的 start/finish activity 调用。通过此更改,我现在可以毫无问题地在音频和视频播放之间切换
我有一个简单的基于文件的播放实现,第一次就可以正常工作。但是,当我再次实例化它时,我只听到音频,但没有视频(只是黑屏)。感谢任何帮助
我研究了很多示例代码,但到目前为止没有任何帮助
private void initiateFilePlayback(Uri uri)
{
closePlayer();
mDataSourceFactory = new DefaultDataSourceFactory(mContext, mAppName);
mExtractorsFactory = new DefaultExtractorsFactory();
mExoPlayer = ExoPlayerFactory.newSimpleInstance(this, new DefaultRenderersFactory(this), new DefaultTrackSelector(), new DefaultLoadControl());
mExoPlayer.clearVideoSurface();
mPlayerView = (PlayerView)findViewById(R.id.videoWindow);
mPlayerView.setVisibility(View.VISIBLE);
mPlayerView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
mPlayerView.setPlayer(mExoPlayer);
mMediaSource = new ExtractorMediaSource.Factory(mDataSourceFactory).setExtractorsFactory(mExtractorsFactory).createMediaSource(uri);
mExoPlayer.prepare(mMediaSource);
mExoPlayer.setPlayWhenReady(true);
}
private void closePlayer()
{
if (mExoPlayer != null)
{
mPlayerView.removeAllViews();
mExoPlayer.stop();
mExoPlayer.release();
mExoPlayer.removeMetadataOutput(null);
mPlayerView.setVisibility(View.INVISIBLE | View.GONE);
mPlayerView = null;
mMediaSource = null;
mDataSourceFactory = null;
mExtractorsFactory = null;
mExoPlayer = null;
}
}
这是我的布局:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/videoWindow"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
第二次播放只显示黑色window,背景有音频
我的问题是删除视图,所以不得不注释掉这一行:
mPlayerView.removeAllViews();
而且我还决定让我的播放器 activity 存活到应用 运行。这也避免了频繁的 start/finish activity 调用。通过此更改,我现在可以毫无问题地在音频和视频播放之间切换