我使用MediaPlayer
播放rtsp视频流并将其显示在SurfaceView
中。我在Activity.onResume()
中执行MediaPlayer初始作品,并在Activity.onPause()
中发布。跳转到正常活动(称为onPause
)然后返回(称为onResume
)时,它可以正常工作。
问题是,在播放视频时,跳转到类似对话框的活动并返回,视频无法刷新(视频帧已冻结)但音频很好。在这种情况下,我该怎么做才能正常播放视频流?如何刷新SurfaceView?
谢谢大家。
ps:如上所述,普通活动是一个填满整个窗口的活动,而类似对话框的活动是一个看起来像AlertDialog的活动,通常具有android:theme="@android:style/Theme.Dialog"
主题的活动,就像GoogleVoice应用一样。当这种活动是前景时,我们可以看到部分背景活动。
编辑:我的代码有点复杂,我粘贴了代码段:
@Override
protected void onCreate(Bundle savedInstanceState) {
//....
mPreview = (SurfaceView) this.findViewById(R.id.playerView);
mHolder = mPreview.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onResume() {
mPath = "rtsp://10.10.20.42/Viral.mp4";
// Create a new media player and set the listeners
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(mPath);
// mMediaPlayer.setDisplay(holder);
mMediaPlayer.setScreenOnWhilePlaying(true);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setOnErrorListener(this);
super.onResume();
}
@Override
protected void onPause() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
super.onPause();
}
答案 0 :(得分:2)
SurfaceHolder
的{{1}}(致电MediaPlayer
)。
这是我的代码:
mMediaPlayer.setDisplay(SurfaceHolder holder)