ExoPlayer stop/pause 不工作
ExoPlayer stop/pause not working
我在其中一个 activity 中添加了 ExoPlayer 来播放视频,它工作正常。但是当视频正在播放并且用户按下后退按钮时,视频仍会继续在后台播放。我想让它停止。我尝试捕获后退按钮并尝试暂停视频,但它不起作用。除非你杀死 activity,否则视频会一直播放直到结束。这是一个错误还是图书馆应该如何工作?
这是 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();
}
}
我在调试模式下查看代码并执行了这条语句,但仍然没有停止视频。
试试这个...
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(false);
exoPlayer.stop();
exoPlayer.seekTo(0);
}
可以使用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 class。
我建议在 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();
}
}
我的代码适用于音频 activity:
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();
}
我在项目中也遇到了同样的问题。我遇到的问题是 - Exoplayer 在屏幕加载时初始化两次,当我们根据 SDK 版本在 onPause 或 onResume() 中调用 realeseExoplayer() 时释放一个实例。即使 activity 关闭,第二个实例也会继续在后台播放。所以请求仔细检查 Exoplayer 是否被初始化了两次。如果多次初始化,则进行必要的更改以将其初始化一次。
以下代码对我来说工作正常:
@Override
public void onPause() {
super.onPause()
exoPlayer.setPlayWhenReady(false);
}
@Override
public void onResume() {
super.onResume()
exoPlayer.setPlayWhenReady(true);
}
这是一个示例,您可以如何实现 Naveen Dew 所说的内容。
@Override
public void onDestroyView() {
super.onDestroyView();
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(false);
exoPlayer.stop();
exoPlayer.seekTo(0);
}
}
我在其中一个 activity 中添加了 ExoPlayer 来播放视频,它工作正常。但是当视频正在播放并且用户按下后退按钮时,视频仍会继续在后台播放。我想让它停止。我尝试捕获后退按钮并尝试暂停视频,但它不起作用。除非你杀死 activity,否则视频会一直播放直到结束。这是一个错误还是图书馆应该如何工作?
这是 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();
}
}
我在调试模式下查看代码并执行了这条语句,但仍然没有停止视频。
试试这个...
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(false);
exoPlayer.stop();
exoPlayer.seekTo(0);
}
可以使用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 class。
我建议在 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();
}
}
我的代码适用于音频 activity:
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();
}
我在项目中也遇到了同样的问题。我遇到的问题是 - Exoplayer 在屏幕加载时初始化两次,当我们根据 SDK 版本在 onPause 或 onResume() 中调用 realeseExoplayer() 时释放一个实例。即使 activity 关闭,第二个实例也会继续在后台播放。所以请求仔细检查 Exoplayer 是否被初始化了两次。如果多次初始化,则进行必要的更改以将其初始化一次。
以下代码对我来说工作正常:
@Override
public void onPause() {
super.onPause()
exoPlayer.setPlayWhenReady(false);
}
@Override
public void onResume() {
super.onResume()
exoPlayer.setPlayWhenReady(true);
}
这是一个示例,您可以如何实现 Naveen Dew 所说的内容。
@Override
public void onDestroyView() {
super.onDestroyView();
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(false);
exoPlayer.stop();
exoPlayer.seekTo(0);
}
}