提交 b4575a94 编写于 作者: Z Zhang Rui

ijkmediaplayer: AndroidMediaPlayer: attach android.media.MediaPlayer

上级 135b5fec
......@@ -175,44 +175,45 @@ public abstract class AbstractMediaPlayer {
mOnInfoListener = null;
}
protected final void notifyOnPrepared(AbstractMediaPlayer mp) {
if (mOnPreparedListener != null)
mOnPreparedListener.onPrepared(mp);
protected static final void notifyOnPrepared(AbstractMediaPlayer mp) {
if (mp != null && mp.mOnPreparedListener != null)
mp.mOnPreparedListener.onPrepared(mp);
}
protected final void notifyOnCompletion(AbstractMediaPlayer mp) {
if (mOnCompletionListener != null)
mOnCompletionListener.onCompletion(mp);
protected static final void notifyOnCompletion(AbstractMediaPlayer mp) {
if (mp != null && mp.mOnCompletionListener != null)
mp.mOnCompletionListener.onCompletion(mp);
}
protected final void notifyOnBufferingUpdate(AbstractMediaPlayer mp,
protected static final void notifyOnBufferingUpdate(AbstractMediaPlayer mp,
int percent) {
if (mOnBufferingUpdateListener != null)
mOnBufferingUpdateListener.onBufferingUpdate(mp, percent);
if (mp != null && mp.mOnBufferingUpdateListener != null)
mp.mOnBufferingUpdateListener.onBufferingUpdate(mp, percent);
}
protected final void notifyOnSeekComplete(AbstractMediaPlayer mp) {
if (mOnSeekCompleteListener != null)
mOnSeekCompleteListener.onSeekComplete(mp);
protected static final void notifyOnSeekComplete(AbstractMediaPlayer mp) {
if (mp != null && mp.mOnSeekCompleteListener != null)
mp.mOnSeekCompleteListener.onSeekComplete(mp);
}
protected final void notifyOnVideoSizeChanged(AbstractMediaPlayer mp,
int width, int height) {
if (mOnVideoSizeChangedListener != null)
mOnVideoSizeChangedListener.onVideoSizeChanged(mp, width, height);
protected static final void notifyOnVideoSizeChanged(
AbstractMediaPlayer mp, int width, int height) {
if (mp != null && mp.mOnVideoSizeChangedListener != null)
mp.mOnVideoSizeChangedListener
.onVideoSizeChanged(mp, width, height);
}
protected final boolean notifyOnError(AbstractMediaPlayer mp, int what,
int extra) {
if (mOnErrorListener != null)
return mOnErrorListener.onError(mp, what, extra);
protected static final boolean notifyOnError(AbstractMediaPlayer mp,
int what, int extra) {
if (mp != null && mp.mOnErrorListener != null)
return mp.mOnErrorListener.onError(mp, what, extra);
return false;
}
protected final boolean notifyOnInfo(AbstractMediaPlayer mp, int what,
int extra) {
if (mOnInfoListener != null)
return mOnInfoListener.onInfo(mp, what, extra);
protected static final boolean notifyOnInfo(AbstractMediaPlayer mp,
int what, int extra) {
if (mp != null && mp.mOnInfoListener != null)
return mp.mOnInfoListener.onInfo(mp, what, extra);
return false;
}
}
......@@ -20,17 +20,21 @@
package tv.danmaku.ijk.media.player;
import java.io.IOException;
import java.lang.ref.WeakReference;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.Surface;
import android.view.SurfaceHolder;
public class AndroidMediaPlayer extends AbstractMediaPlayer {
public final class AndroidMediaPlayer extends AbstractMediaPlayer {
private MediaPlayer mInternalMediaPlayer;
private MediaPlayerListenerAdapter mInternalListenerAdapter;
public AndroidMediaPlayer() {
mInternalMediaPlayer = new MediaPlayer();
mInternalListenerAdapter = new MediaPlayerListenerAdapter(this);
attachInternalListeners();
}
@Override
......@@ -112,15 +116,85 @@ public class AndroidMediaPlayer extends AbstractMediaPlayer {
@Override
public void release() {
mInternalMediaPlayer.release();
resetListeners();
attachInternalListeners();
}
@Override
public void reset() {
mInternalMediaPlayer.reset();
resetListeners();
attachInternalListeners();
}
@Override
public void setAudioStreamType(int streamtype) {
mInternalMediaPlayer.setAudioStreamType(streamtype);
}
/*--------------------
* Listeners adapter
*/
private final void attachInternalListeners() {
mInternalMediaPlayer.setOnPreparedListener(mInternalListenerAdapter);
mInternalMediaPlayer
.setOnBufferingUpdateListener(mInternalListenerAdapter);
mInternalMediaPlayer.setOnCompletionListener(mInternalListenerAdapter);
mInternalMediaPlayer
.setOnSeekCompleteListener(mInternalListenerAdapter);
mInternalMediaPlayer
.setOnVideoSizeChangedListener(mInternalListenerAdapter);
mInternalMediaPlayer.setOnErrorListener(mInternalListenerAdapter);
mInternalMediaPlayer.setOnInfoListener(mInternalListenerAdapter);
}
private static class MediaPlayerListenerAdapter implements
MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener,
MediaPlayer.OnBufferingUpdateListener,
MediaPlayer.OnSeekCompleteListener,
MediaPlayer.OnVideoSizeChangedListener,
MediaPlayer.OnErrorListener, MediaPlayer.OnInfoListener {
public WeakReference<AndroidMediaPlayer> mWeakMediaPlayer;
public MediaPlayerListenerAdapter(AndroidMediaPlayer mp) {
mWeakMediaPlayer = new WeakReference<AndroidMediaPlayer>(mp);
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
return notifyOnInfo(mWeakMediaPlayer.get(), what, extra);
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return notifyOnError(mWeakMediaPlayer.get(), what, extra);
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
notifyOnVideoSizeChanged(mWeakMediaPlayer.get(), width, height);
}
@Override
public void onSeekComplete(MediaPlayer mp) {
notifyOnSeekComplete(mWeakMediaPlayer.get());
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
notifyOnBufferingUpdate(mWeakMediaPlayer.get(), percent);
}
@Override
public void onCompletion(MediaPlayer mp) {
notifyOnCompletion(mWeakMediaPlayer.get());
}
@Override
public void onPrepared(MediaPlayer mp) {
notifyOnPrepared(mWeakMediaPlayer.get());
}
}
}
......@@ -33,7 +33,7 @@ import android.os.PowerManager;
import android.view.Surface;
import android.view.SurfaceHolder;
public class IjkMediaPlayer extends AbstractMediaPlayer {
public final class IjkMediaPlayer extends AbstractMediaPlayer {
private final static String TAG = IjkMediaPlayer.class.getName();
static {
......@@ -332,33 +332,30 @@ public class IjkMediaPlayer extends AbstractMediaPlayer {
}
switch (msg.what) {
case MEDIA_PREPARED:
mIjkMediaPlayer.notifyOnPrepared(mIjkMediaPlayer);
notifyOnPrepared(mIjkMediaPlayer);
return;
case MEDIA_PLAYBACK_COMPLETE:
mIjkMediaPlayer.notifyOnCompletion(mIjkMediaPlayer);
notifyOnCompletion(mIjkMediaPlayer);
mIjkMediaPlayer.stayAwake(false);
return;
case MEDIA_BUFFERING_UPDATE:
mIjkMediaPlayer.notifyOnBufferingUpdate(mIjkMediaPlayer,
msg.arg1);
notifyOnBufferingUpdate(mIjkMediaPlayer, msg.arg1);
return;
case MEDIA_SEEK_COMPLETE:
mIjkMediaPlayer.notifyOnSeekComplete(mIjkMediaPlayer);
notifyOnSeekComplete(mIjkMediaPlayer);
return;
case MEDIA_SET_VIDEO_SIZE:
mIjkMediaPlayer.notifyOnVideoSizeChanged(mIjkMediaPlayer,
msg.arg1, msg.arg2);
notifyOnVideoSizeChanged(mIjkMediaPlayer, msg.arg1, msg.arg2);
return;
case MEDIA_ERROR:
DebugLog.e(TAG, "Error (" + msg.arg1 + "," + msg.arg2 + ")");
if (!mIjkMediaPlayer.notifyOnError(mIjkMediaPlayer, msg.arg1,
msg.arg2)) {
mIjkMediaPlayer.notifyOnCompletion(mIjkMediaPlayer);
if (!notifyOnError(mIjkMediaPlayer, msg.arg1, msg.arg2)) {
notifyOnCompletion(mIjkMediaPlayer);
}
mIjkMediaPlayer.stayAwake(false);
return;
......@@ -367,8 +364,7 @@ public class IjkMediaPlayer extends AbstractMediaPlayer {
if (msg.arg1 != MEDIA_INFO_VIDEO_TRACK_LAGGING) {
DebugLog.i(TAG, "Info (" + msg.arg1 + "," + msg.arg2 + ")");
}
mIjkMediaPlayer.notifyOnInfo(mIjkMediaPlayer, msg.arg1,
msg.arg2);
notifyOnInfo(mIjkMediaPlayer, msg.arg1, msg.arg2);
// No real default action so far.
return;
case MEDIA_TIMED_TEXT:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册