停止 exoplayer 在后台播放视频
Stop exoplayer playing video in background
我正在使用 exoplayer 在 recyclerview 中播放视频。我从 firebase 检索视频并在 exoplayer 中播放。但我面临的问题是所有视频在后台同时播放并搞砸了。它还消耗大量数据。如果一旦视频完成播放,它就不会重新开始。我怎样才能阻止他们在后台播放。这是我的代码
val uri = Uri.parse(contentDTOs[p1].videourl)
val view = viewholder.findViewById<SimpleExoPlayerView>(R.id.detailviewitem_video_contents)
val exoplayer= ExoPlayerFactory.newSimpleInstance(context,trackSelector)
val datasourcefactory = DefaultHttpDataSourceFactory("exoplayer")
val extractorsFactory=DefaultExtractorsFactory()
val media = ExtractorMediaSource(uri,datasourcefactory,extractorsFactory,null,null)
view.player = exoplayer
exoplayer.prepare(media)
exoplayer.playWhenReady = true
val loopingSource = LoopingMediaSource(media)
exoplayer.playWhenReady = true
exoplayer.prepare(loopingSource)
override fun onPause() {
super.onPause()
exoplayer.stop()
}
override fun onStop() {
super.onStop()
exoplayer.stop()
}
尝试将设置 playWhenReady = true
的行移动到 onResume()
。不过,在 onResume()
中使用 .play()
而不是 playWhenReady = true
可能更安全(对于您的用例而言,错误更少)。
你应该释放你的播放器。发布 exoPlayer:
private void releasePlayer() {
if (player != null) {
player.release();
player = null;
}
}
并调用 releasePlayer
方法形成生命周期方法,如下所示:
@Override
public void onPause() {
super.onPause();
if (Util.SDK_INT < 24) {
releasePlayer();
}
}
@Override
public void onStop() {
super.onStop();
if (Util.SDK_INT >= 24) {
releasePlayer();
}
}
我正在使用 exoplayer 在 recyclerview 中播放视频。我从 firebase 检索视频并在 exoplayer 中播放。但我面临的问题是所有视频在后台同时播放并搞砸了。它还消耗大量数据。如果一旦视频完成播放,它就不会重新开始。我怎样才能阻止他们在后台播放。这是我的代码
val uri = Uri.parse(contentDTOs[p1].videourl)
val view = viewholder.findViewById<SimpleExoPlayerView>(R.id.detailviewitem_video_contents)
val exoplayer= ExoPlayerFactory.newSimpleInstance(context,trackSelector)
val datasourcefactory = DefaultHttpDataSourceFactory("exoplayer")
val extractorsFactory=DefaultExtractorsFactory()
val media = ExtractorMediaSource(uri,datasourcefactory,extractorsFactory,null,null)
view.player = exoplayer
exoplayer.prepare(media)
exoplayer.playWhenReady = true
val loopingSource = LoopingMediaSource(media)
exoplayer.playWhenReady = true
exoplayer.prepare(loopingSource)
override fun onPause() {
super.onPause()
exoplayer.stop()
}
override fun onStop() {
super.onStop()
exoplayer.stop()
}
尝试将设置 playWhenReady = true
的行移动到 onResume()
。不过,在 onResume()
中使用 .play()
而不是 playWhenReady = true
可能更安全(对于您的用例而言,错误更少)。
你应该释放你的播放器。发布 exoPlayer:
private void releasePlayer() {
if (player != null) {
player.release();
player = null;
}
}
并调用 releasePlayer
方法形成生命周期方法,如下所示:
@Override
public void onPause() {
super.onPause();
if (Util.SDK_INT < 24) {
releasePlayer();
}
}
@Override
public void onStop() {
super.onStop();
if (Util.SDK_INT >= 24) {
releasePlayer();
}
}