/***************************************************************************** * DefMediaPlayer.java * https://github.com/tewilove/faplayer * * Modified: * - 2012-03-13 --bbcallen <bbcallen@gmail.com> * remove unused methods and fields ***************************************************************************** * Copyright © 2011-2012 tewilove <tewilove@gmail.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *****************************************************************************/ package tv.danmaku.media; import java.io.IOException; import tv.danmaku.android.BuildHelper; import tv.danmaku.android.util.DebugLog; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.text.TextUtils; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; public class DefMediaPlayer extends AbsMediaPlayer implements MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, MediaPlayer.OnInfoListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnSeekCompleteListener, MediaPlayer.OnVideoSizeChangedListener { public static final String TAG = DefMediaPlayer.class.getName(); private MediaPlayer mMediaPlayer = null; public static DefMediaPlayer create(Context context) { return new DefMediaPlayer(); } protected DefMediaPlayer() { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnErrorListener(this); mMediaPlayer.setOnInfoListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnSeekCompleteListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); } @Override public int getCurrentPosition() { try { return mMediaPlayer.getCurrentPosition(); } catch (IllegalStateException e) { e.printStackTrace(); return 0; } } @Override public int getDuration() { try { return mMediaPlayer.getDuration(); } catch (IllegalStateException e) { e.printStackTrace(); return 0; } } @Override public int getVideoHeight() { return mMediaPlayer.getVideoHeight(); } @Override public int getVideoWidth() { return mMediaPlayer.getVideoWidth(); } @Override public boolean isPlaying() { try { return mMediaPlayer.isPlaying(); } catch (IllegalStateException e) { e.printStackTrace(); return false; } } @Override public void start() throws IllegalStateException { mMediaPlayer.start(); } @Override public void stop() throws IllegalStateException { mMediaPlayer.stop(); } @Override public void pause() throws IllegalStateException { mMediaPlayer.pause(); } @Override public void prepareAsync() throws IllegalStateException { mMediaPlayer.prepareAsync(); } @Override public void release() { mMediaPlayer.release(); } @Override public void reset() { mMediaPlayer.reset(); } @Override public void seekTo(int msec) throws IllegalStateException { mMediaPlayer.seekTo(msec); } @Override public void setDataSource(String uri) throws IOException, IllegalArgumentException, IllegalStateException { if (BuildHelper.isApi11_HoneyCombOrLater()) { // uri is OK } else { // android 2.x only accepts httplive://......m3u8 Uri uriComponent = Uri.parse(uri); String lastSegment = uriComponent.getLastPathSegment(); if (!TextUtils.isEmpty(lastSegment) && lastSegment.contains(".m3u8")) { DebugLog.v(TAG, "def play use httplive for m3u8"); uri = uriComponent.buildUpon().scheme("httplive").toString(); } } DebugLog.v(TAG, "def play " + uri); mMediaPlayer.setDataSource(uri); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } @Override public void setDisplay(SurfaceHolder holder) { mMediaPlayer.setDisplay(holder); if (holder != null) holder.addCallback(mSurfaceCallback); } private SurfaceHolder.Callback mSurfaceCallback = new Callback() { public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceCreated(SurfaceHolder holder) { } public void surfaceDestroyed(SurfaceHolder holder) { if (mMediaPlayer != null) { mMediaPlayer.release(); } } }; @Override public void setAudioStreamType(int streamMusic) { mMediaPlayer.setAudioStreamType(streamMusic); } @Override public void setScreenOnWhilePlaying(boolean screenOn) { mMediaPlayer.setScreenOnWhilePlaying(screenOn); } @Override public void enableLog(boolean enable) { // not support } @Override public boolean isBufferingEnd() { return true; } @Override public ModuleInfo getModuleInfo() { return ModuleInfo.getAndroidModuleInfo(); } @Override public void onBufferingUpdate(MediaPlayer mp, int percent) { if (mOnBufferingUpdateListener != null) { mOnBufferingUpdateListener.onBufferingUpdate(this, percent); } } @Override public void onCompletion(MediaPlayer mp) { if (mOnCompletionListener != null) { mOnCompletionListener.onCompletion(this); } } @Override public boolean onError(MediaPlayer mp, int what, int extra) { if (mOnErrorListener != null) { return mOnErrorListener.onError(this, what, extra); } return false; } @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { if (mOnInfoListener != null) { return mOnInfoListener.onInfo(this, what, extra); } return true; } @Override public void onPrepared(MediaPlayer mp) { if (mOnPreparedListener != null) { mOnPreparedListener.onPrepared(this); } } @Override public void onSeekComplete(MediaPlayer mp) { if (mOnSeekCompleteListener != null) { mOnSeekCompleteListener.onSeekComplete(this); } } @Override public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { if (mOnVideoSizeChangedListener != null) { mOnVideoSizeChangedListener.onVideoSizeChanged(this, width, height); } } }