public class VideoCtrl implements SurfaceHolder.Callback,OnSeekCompleteListener,OnCompletionListener {
    MediaPlayer mPlayer;
    SurfaceHolder mHolder;
    
    private String baseVideoPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/mov/";
    
    public VideoCtrl(SurfaceHolder holder){
        mHolder = holder;
        mHolder.addCallback(this);
    }

    
    public void playAction(String actionName){
        
        try{
//            mPlayer.setDataSource(baseVideoPath);
            
            FileInputStream fs = new FileInputStream(new File(baseVideoPath+actionName));
            FileDescriptor fd = fs.getFD();
            

            MediaPlayer player = new MediaPlayer();
//            if(mPlayer==null){
//                mPlayer=new MediaPlayer();
//            }else{
//                mPlayer.reset();
//            }
            player.setDataSource(fd);
            player.setDisplay(mHolder);
            player.prepare();
            player.setOnCompletionListener(this);
            player.setLooping(true);
            player.start();
            
            
            if (mPlayer!=null){
                mPlayer.release();
                mPlayer = null;
            }
            mPlayer = player;
            
//            if(mPlayer.isPlaying()==false){
//                mPlayer.start();
//            }else{
//                mPlayer.pause();
//            }
        }catch(Exception e){
//            Toast.makeText(SexyMainActivity.this, "error : "+e.getMessage(), Toast.LENGTH_SHORT).show();
            Log.d("heo", e.getMessage());
        }
    }
    
    @Override
    public void onSeekComplete(MediaPlayer mp) {
        // TODO Auto-generated method stub
//            mp.start();
        Log.d("heo","onSeekComplete");
    }
    
    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        if(!mbPlayDef)
            playAction("default");
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mHolder = holder;
        playAction("default");
    }
    
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        
    }
    
    public void destroy(){
        if(mPlayer!=null){
            mPlayer.release();
        }
    }
}


짧게 분리된 동영상파일 여러개를

MediaPlayer를 이용하여 모두 재생해야하는 상황인데,

playAction 메소드를 이용해 넘겨진 영상파일명을 이어서 재생시켜주는 소스입니다.

근데 영상파일 교체시에 깜빡임을 없앨수가 없더라구요.. 

정리하자면, 끊김없이 여러동영상 파일을 마치 하나의 동영상보듯이 재생시키는것이 목표입니다.


MediaPlayer를 reset하거나, release하지 않고

setdatasource.. 그러니까 datasource만 바꿔서 재생하는방법이 있나요?

아니면 다른방법이라도 조언부탁드려요~