Fixed bugs in the media player api demo application
- release the MediaPlayer object when onPause - use onVideoSizeChanged listener to make sure that correct video size is known before starting playback
This commit is contained in:
@@ -9,6 +9,8 @@ import android.media.AudioManager;
|
|||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.media.MediaPlayer.OnBufferingUpdateListener;
|
import android.media.MediaPlayer.OnBufferingUpdateListener;
|
||||||
import android.media.MediaPlayer.OnCompletionListener;
|
import android.media.MediaPlayer.OnCompletionListener;
|
||||||
|
import android.media.MediaPlayer.OnPreparedListener;
|
||||||
|
import android.media.MediaPlayer.OnVideoSizeChangedListener;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
@@ -21,7 +23,7 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
public class MediaPlayerDemo_Video extends Activity implements
|
public class MediaPlayerDemo_Video extends Activity implements
|
||||||
OnBufferingUpdateListener, OnCompletionListener,
|
OnBufferingUpdateListener, OnCompletionListener,
|
||||||
MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
|
OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback {
|
||||||
|
|
||||||
private static final String TAG = "MediaPlayerDemo";
|
private static final String TAG = "MediaPlayerDemo";
|
||||||
private int mVideoWidth;
|
private int mVideoWidth;
|
||||||
@@ -37,6 +39,8 @@ public class MediaPlayerDemo_Video extends Activity implements
|
|||||||
private static final int RESOURCES_AUDIO = 3;
|
private static final int RESOURCES_AUDIO = 3;
|
||||||
private static final int LOCAL_VIDEO = 4;
|
private static final int LOCAL_VIDEO = 4;
|
||||||
private static final int STREAM_VIDEO = 5;
|
private static final int STREAM_VIDEO = 5;
|
||||||
|
private boolean mIsVideoSizeKnown = false;
|
||||||
|
private boolean mIsVideoReadyToBePlayed = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -54,6 +58,7 @@ public class MediaPlayerDemo_Video extends Activity implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void playVideo(Integer Media) {
|
private void playVideo(Integer Media) {
|
||||||
|
doCleanUp();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
switch (Media) {
|
switch (Media) {
|
||||||
@@ -109,6 +114,7 @@ public class MediaPlayerDemo_Video extends Activity implements
|
|||||||
mMediaPlayer.setOnBufferingUpdateListener(this);
|
mMediaPlayer.setOnBufferingUpdateListener(this);
|
||||||
mMediaPlayer.setOnCompletionListener(this);
|
mMediaPlayer.setOnCompletionListener(this);
|
||||||
mMediaPlayer.setOnPreparedListener(this);
|
mMediaPlayer.setOnPreparedListener(this);
|
||||||
|
mMediaPlayer.setOnVideoSizeChangedListener(this);
|
||||||
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||||
|
|
||||||
|
|
||||||
@@ -126,15 +132,26 @@ public class MediaPlayerDemo_Video extends Activity implements
|
|||||||
Log.d(TAG, "onCompletion called");
|
Log.d(TAG, "onCompletion called");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPrepared(MediaPlayer mediaplayer) {
|
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
|
||||||
Log.d(TAG, "onPrepared called");
|
Log.v(TAG, "onVideoSizeChanged called");
|
||||||
mVideoWidth = mMediaPlayer.getVideoWidth();
|
if (width == 0 || height == 0) {
|
||||||
mVideoHeight = mMediaPlayer.getVideoHeight();
|
Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
|
||||||
if (mVideoWidth != 0 && mVideoHeight != 0) {
|
return;
|
||||||
holder.setFixedSize(mVideoWidth, mVideoHeight);
|
}
|
||||||
mMediaPlayer.start();
|
mIsVideoSizeKnown = true;
|
||||||
|
mVideoWidth = width;
|
||||||
|
mVideoHeight = height;
|
||||||
|
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
|
||||||
|
startVideoPlayback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onPrepared(MediaPlayer mediaplayer) {
|
||||||
|
Log.d(TAG, "onPrepared called");
|
||||||
|
mIsVideoReadyToBePlayed = true;
|
||||||
|
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
|
||||||
|
startVideoPlayback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
|
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
|
||||||
@@ -148,22 +165,43 @@ public class MediaPlayerDemo_Video extends Activity implements
|
|||||||
|
|
||||||
|
|
||||||
public void surfaceCreated(SurfaceHolder holder) {
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
Log.d(TAG, "surfaceCreated called");
|
Log.d(TAG, "surfaceCreated called");
|
||||||
playVideo(extras.getInt(MEDIA));
|
playVideo(extras.getInt(MEDIA));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
releaseMediaPlayer();
|
||||||
|
doCleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
// TODO Auto-generated method stub
|
releaseMediaPlayer();
|
||||||
|
doCleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void releaseMediaPlayer() {
|
||||||
if (mMediaPlayer != null) {
|
if (mMediaPlayer != null) {
|
||||||
mMediaPlayer.release();
|
mMediaPlayer.release();
|
||||||
mMediaPlayer = null;
|
mMediaPlayer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void doCleanUp() {
|
||||||
|
mVideoWidth = 0;
|
||||||
|
mVideoHeight = 0;
|
||||||
|
mIsVideoReadyToBePlayed = false;
|
||||||
|
mIsVideoSizeKnown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startVideoPlayback() {
|
||||||
|
Log.v(TAG, "startVideoPlayback");
|
||||||
|
holder.setFixedSize(mVideoWidth, mVideoHeight);
|
||||||
|
mMediaPlayer.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user