beginners
beginners

Reputation: 283

how to recreate surfaceview for video play when restart()?

I'm tying to make a video player. below code is working when i run the app. but if i click home key and come back to the activity, sound is coming but video is gone. I think it's becuz of surfaceview is destoryed.

I tried several ways to recreate the serfaceView, but not worked. every time just sound is coming out.

please see my code and help me~!

I'm now making some custom UI.. so I can't use videoview and mediacontroller. please suggest only for the case of MediaPlayer..

Thank you!

public class AndroidVideoPlayerActivity extends Activity implements SurfaceHolder.Callback{
SurfaceView surface;
SurfaceHolder sh;
MediaPlayer mp;
String web_video = "http://xxx.mp4";  //some address
Button startB, stopB;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    startB = (Button)findViewById(R.id.startB);
    stopB = (Button)findViewById(R.id.stopB);
    surface = (SurfaceView)findViewById(R.id.surfaceView1);
    sh = surface.getHolder();
    sh.addCallback(this);
    sh.setFixedSize(400, 300);
    sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    mp = new MediaPlayer();
    mp.setDisplay(surface.getHolder());



    startB.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            playVideo();
        }
    });

    stopB.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            stopVideo();
        }
    });

}//onCreate

@Override
protected void onPause() {
    super.onPause();
    mp.pause();
}

@Override
protected void onRestart() {
    super.onRestart();
    mp.start();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mp.stop();
    mp.release();
    mp = null;
}

private void playVideo(){
    try{
        mp.setDataSource(web_video);
        mp.prepare();
        mp.start();

    }catch(Exception e){
        Log.d("ERROR", e+"");
    }



}

private void stopVideo(){
    mp.stop();
    mp.release();
    mp = null;
}

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

@Override
public void surfaceCreated(SurfaceHolder holder) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}

}

Upvotes: 3

Views: 6424

Answers (1)

beginners
beginners

Reputation: 283

i answer myself.

i put two lines in the surfaceCreated, and it worked.

public void surfaceCreated(SurfaceHolder holder) {
    if(mp == null)mp = new MediaPlayer();
    mp.setDisplay(holder);

}

Upvotes: 1

Related Questions