안드로이드 개발 질문/답변
(글 수 45,052)
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만 바꿔서 재생하는방법이 있나요?




현재 영상이 재생될 때 스레드에선 다음에 재생할 영상을 다 로드해놓으면 됩니다.
구글 애드몹이 이런 방식을 주로 쓰지요