我正在创建一个播放rstp视频流的流媒体应用。问题是,当用户移动到另一个活动时,我需要视频继续在后台播放(仅限音频)。
为了实现这一点,我创建了一个播放流的静态MediaPlayer对象。如果我没有调用mediaPlayer.setDisplay(holder)函数,后台播放工作正常。但是一旦我设置了SurfaceHolder,我似乎无法在没有MediaPlayer暂停的情况下将其设置为null。这是我使用SurfaceView的Activity中的代码。
@Override
public void surfaceCreated(SurfaceHolder holder) {
StaticMediaPlayer.setHolder(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
StaticMediaPlayer.setHolder(null);
//I've tried to do StaticMediaPlayer.setHolder(holder);
//This actually continues the playing, but the mediaPlayer can no longer attach
//Also, the console is flooded with errors.
}
set holder函数只是一个setDisplay包装函数
public static void setHolder(SurfaceHolder holder) {
mediaPlayer.setDisplay(holder);
//I've even tried to put mediaPlayer.start() here but it doesn't continue.
}
问题是当我将持有者设置为null时,视频流暂停。如果我稍后再回到活动,它会恢复正常。
我记录了mediaPlayer.getCurrentPosition()和mediaPlayer.isPlaying()值,以确保它仍在播放。
这是正常播放时的样子
pos: 113623 playing: true
pos: 114518 playing: true
pos: 115582 playing: true
pos: 116590 playing: true
这就是SurfaceView被销毁时的样子。
pos: 117917 playing: true //This shows that the mediaplayer is still playing.
pos: 117917 playing: true //But for some reason the position isn't progressing
pos: 117917 playing: true
pos: 117917 playing: true
即使SurfaceHolder设置为null,如何让MediaPlayer继续播放?