package com.eighteengray.procameralibrary.video;
import java.io.IOException;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class VideoPlayerView extends SurfaceView implements IVideoPlayerOperation
{
private final static String TAG = "VideoSurfaceView";
private MediaPlayer mMediaPlayer;
public VideoPlayerView(Context context)
{
super(context);
init();
}
public VideoPlayerView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
/**
* 初始化
*/
private void init()
{
mMediaPlayer = new MediaPlayer();
// 初始化容器
getHolder().addCallback(callback);
}
/**
* 设置播放器监听函数
* @param listener
*/
protected void setPalyerListener(PlayerListener listener)
{
mMediaPlayer.setOnCompletionListener(listener);
mMediaPlayer.setOnSeekCompleteListener(listener);
mMediaPlayer.setOnPreparedListener(listener);
}
/**
* 获取当前播放器是否在播放状态
* @return
*/
@Override
public boolean isPlaying()
{
return mMediaPlayer.isPlaying();
}
/**
* 获取当前播放时间,单位毫秒
* @return
*/
@Override
public int getCurrentPosition()
{
if (isPlaying())
return mMediaPlayer.getCurrentPosition();
return 0;
}
@Override
public void pausedPlay()
{
mMediaPlayer.pause();
}
@Override
public void resumePlay()
{
mMediaPlayer.start();
}
/**
* 设置当前播放位置
*/
@Override
public void seekPosition(int position)
{
if (isPlaying())
mMediaPlayer.pause();
// 当设置的时间值大于视频最大长度时,停止播放
if (position < 0 || position > mMediaPlayer.getDuration())
{
mMediaPlayer.stop();
return;
}
// 设置时间
mMediaPlayer.seekTo(position);
}
/**
* 停止播放
*/
@Override
public void stopPlay()
{
mMediaPlayer.stop();
mMediaPlayer.reset();
}
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mMediaPlayer.setDisplay(getHolder());
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
if (mMediaPlayer.isPlaying())
mMediaPlayer.stop();
mMediaPlayer.reset();
}
};
@Override
public void playVideo(String path) throws IllegalArgumentException,
SecurityException, IllegalStateException, IOException
{
if (mMediaPlayer != null && mMediaPlayer.isPlaying())
{
mMediaPlayer.stop();
}
mMediaPlayer.reset(); // reset重新设置播放器引擎
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
}
/**
* @ClassName: PlayerListener
* @Description: 集合接口,container实现该接口
* @author LinJ
* @date 2015-1-23 下午3:09:15
*
*/
public interface PlayerListener extends OnCompletionListener,
OnSeekCompleteListener, OnPreparedListener
{
}
}