を使用して rtsp ビデオ ストリームを再生MediaPlayer
し、SurfaceView
. で MediaPlayer の初期作業をActivity.onResume()
行い、 でリリースしActivity.onPause()
ます。通常のアクティビティにジャンプして( と呼ばれるonPause
)、戻る(と呼ばれる)と正常に動作しonResume
ます。
問題は、ビデオの再生中に、ダイアログのようなアクティビティにジャンプして戻ると、ビデオを更新できず (ビデオ フレームがフリーズする)、オーディオは問題ないことです。この状況でビデオ ストリームを正常に再生するにはどうすればよいですか? SurfaceView を更新するには?
皆さん、ありがとうございました。
ps: 上記のように、通常の Activityはウィンドウ全体を埋める Activity であり、ダイアログのような Activityは AlertDialog のように見える Activity であり、通常はandroid:theme="@android:style/Theme.Dialog"
GoogleVoice アプリのようにテーマを持つ Activity です。この種類のアクティビティがフォアグラウンドの場合、バックグラウンド アクティビティの一部を見ることができます。
編集:私のコードは少し複雑で、キーのスニペットを貼り付けます:
@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();
}