android ExoPlayer停止/暂停不起作用

iecba09b  于 2022-11-27  发布在  Android
关注(0)|答案(8)|浏览(469)

我已经在其中一个活动中添加了ExoPlayer来播放视频,并且它工作正常。但是当视频正在播放并且用户按下后退按钮时,视频仍然在后台继续播放。我希望它停止。我尝试捕获后退按钮并尝试暂停视频,但它不工作。除非你杀死该活动,视频一直播放到完成。是bug还是这就是库应该如何工作?
下面是expPlayr的工作代码

String url = getIntent().getStringExtra("videoURL");
    String title = getIntent().getStringExtra("title");
    exoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exo_player_id);

    BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();

    TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));

    exoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector);

    DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory(title);
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    MediaSource m = new HlsMediaSource(Uri.parse(url), dataSourceFactory, null,null);

    exoPlayerView.setPlayer(exoPlayer);
    exoPlayer.prepare(m);
    exoPlayer.setPlayWhenReady(true);

这是我试图用来阻止视频的代码。

@Override
    public void onBackPressed(){
        try{
            exoPlayer.stop();

        }catch(Exception e){
            e.printStackTrace();
        }
    }

我在调试模式下查看代码,并执行了此语句,但仍然没有停止视频。

uwopmtnx

uwopmtnx1#

试试这个

if (exoPlayer != null) {
    exoPlayer.setPlayWhenReady(false);
    exoPlayer.stop();
    exoPlayer.seekTo(0);
}
wfveoks0

wfveoks02#

我在我的项目中也遇到了同样的问题。我遇到的问题是- Exoplayer在屏幕加载时初始化了两次,当我们调用realeseExoplayer时释放了一个示例()在暂停或恢复中()。即使Activity关闭,第二个示例也会继续在后台播放。因此,请求仔细检查Exoplayer是否初始化了两次。如果初始化了多次,进行必要的更改以初始化它一次。

w1e3prcc

w1e3prcc3#

我的程式码可用于声音活动:

public void release() {

    if (exoPlayer != null) {
        exoPlayer.removeListener(eventListener);
        exoPlayer.release();
        exoPlayer = null;
        dataSpec =null;
        assetDataSource = null;
        factory = null;
        audioSource =null;
    }
}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    setPlayPause(false);
    release();

    finish();
}
omqzjyyz

omqzjyyz4#

我建议在Activity的生命周期方法中初始化和发布播放器。如果你做得很好,你就不需要onBackPressed方法,因为你的代码是在生命周期方法中执行的。
PlayerActivity of the ExoPlayer demo application on Github基本上具有以下生命周期方法:

@Override
public void onStart() {
  super.onStart();
  if (Util.SDK_INT > 23) {
    initializePlayer();
  }
}

@Override
public void onResume() {
  super.onResume();
  if (Util.SDK_INT <= 23 || player == null) {
    initializePlayer();
  }
}

@Override
public void onPause() {
  super.onPause();
  if (Util.SDK_INT <= 23) {
    releasePlayer();
  }
}

@Override
public void onStop() {
  super.onStop();
  if (Util.SDK_INT > 23) {
    releasePlayer();
  }
}
e7arh2l6

e7arh2l65#

你可以使用exoplayer的例子,releasePlayer方法:

private void releasePlayer() {
        if (player != null) {
            updateResumePosition();
            player.removeListener(this);
            player.stop();
            player.release();
            player = null;
            trackSelector = null;
            trackSelectionHelper = null;
            eventLogger = null;
        }
    }

请参阅ExoPlayer演示中的PlayerActivity类。

x8goxv8g

x8goxv8g6#

这是一个例子,你可以如何实现什么纳温露说。

@Override
public void onDestroyView() {
    super.onDestroyView();
    if (exoPlayer != null) {
        exoPlayer.setPlayWhenReady(false);
        exoPlayer.stop();
        exoPlayer.seekTo(0);
    }
}
h9a6wy2h

h9a6wy2h7#

下面的代码对我来说很好:

@Override 
    public void onPause() {
        super.onPause()
        exoPlayer.setPlayWhenReady(false);
    }

    @Override 
    public void onResume() {
        super.onResume()
        exoPlayer.setPlayWhenReady(true);
    }
5cnsuln7

5cnsuln78#

我刚遇到这个问题,这里的解决方案都没有帮助。希望它能帮助到某人。
那么,还有什么可能是错误的呢?在Player.STATE_READY中调用exoPlayer.play()是程序错误。从回调中删除exoPlayer.play()。如果你想在播放器准备好后立即播放视频文件,请在Player.STATE_READY处创建一个标志,并使用处理程序检查它是否准备好,然后播放。我希望这会有所帮助。

相关问题