`
mickey_hou
  • 浏览: 238347 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android的MediaPlayer—1

阅读更多
public class PlayerVideo implements OnBufferingUpdateListener,OnCompletionListener,OnPreparedListener,Callback
{

    private int videoWidth,videoHeight;
   
    private SeekBar skbProgress; //进度条
   
    public MediaPlayer mediaPlayer; //播放器
   
    private SurfaceHolder surfaceHolder;
   
    private Timer mTimer = new Timer(); 

    public PlayerVideo(SurfaceView surfaceView,SeekBar skbProgress)
    {
        this.skbProgress = skbProgress;
        this.surfaceHolder = surfaceView.getHolder();
        this.surfaceHolder.addCallback(this);
        this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        this.mTimer.schedule(mTimerTask, 0, 1000);
    }

    private TimerTask mTimerTask = new TimerTask()
    {
        @Override
        public void run()
        {
            if (null == mediaPlayer)
            {
                return;
            }
              
            if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false)
            {
                handleProgress.sendEmptyMessage(0);
            }
        }
    };

    private Handler handleProgress = new Handler()
    {
        public void handleMessage(Message msg)
        {
            int position = mediaPlayer.getCurrentPosition();
            int duration = mediaPlayer.getDuration();
           
            if (duration > 0)
            {
                long pos = skbProgress.getMax() * position / duration;
                skbProgress.setProgress((int) pos);
            }
        };
    };
    public void play()
    {
        this.mediaPlayer.start();
    }
   
    public void playUrl(String videoUrl)
    {
        try
        {
            this.mediaPlayer.reset();
            this.mediaPlayer.setDataSource(videoUrl);
            this.mediaPlayer.prepare();//prepare之后自动播放 
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
   
    public void pause()
    {
        if (null != this.mediaPlayer)
        {
            if (this.mediaPlayer.isPlaying())
            {
                this.mediaPlayer.pause();
            }
            else  
            { 
                this.mediaPlayer.start(); 
            } 
        }
    }
   
    public void stop()
    {
        if (null != this.mediaPlayer)
        {
            this.mediaPlayer.stop();
            this.mediaPlayer.release();
            this.mediaPlayer = null;
        }
    }
   
    public void onBufferingUpdate(MediaPlayer mp, int bufferingProgress)
    {
        this.skbProgress.setSecondaryProgress(bufferingProgress); 
        int currentProgress = this.skbProgress.getMax() * this.mediaPlayer.getCurrentPosition() / this.mediaPlayer.getDuration(); 
        Log.e(currentProgress+"% play", bufferingProgress + "% buffer");
    }
    public void onCompletion(MediaPlayer mp)
    {
    }
    public void onPrepared(MediaPlayer mp)
    {
        this.videoWidth = this.mediaPlayer.getVideoWidth();
        this.videoHeight = this.mediaPlayer.getVideoHeight();
       
        //频是android播放器不能播放的,不能播放时videoHeight=0,videoWidth=0,以此来判断是否播放视频
        if (this.videoWidth != 0 && this.videoHeight != 0)
        {
            mp.start();
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
    {
    }

    public void surfaceCreated(SurfaceHolder holder)
    {
        this.mediaPlayer = new MediaPlayer();
        this.mediaPlayer.setDisplay(this.surfaceHolder);
        this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        this.mediaPlayer.setOnBufferingUpdateListener(this);
        this.mediaPlayer.setOnPreparedListener(this);
    }

    public void surfaceDestroyed(SurfaceHolder holder)
    {
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics