Ceelos
Ceelos

Reputation: 1126

MediaPlayer: start called in state 0 error

This is what the code looks like, logcat keeps stating "start called in state 0" I tried different ways to start the video. What am I missing? I also tried a OnPreparedListener but it kept giving me the same errors.

package com.example.videoplaybacktests;

import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements SurfaceHolder.Callback{

MediaPlayer mediaPlayer;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;;

String stringPath = "/drawable/visource.mp4";
public String RTSP = "rtsp://v2.cache7.c.youtube.com/CjYLENy73wIaLQkFPOlBtC4qExMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYJeOw_HjwJ6bUQw=/0/0/0/video.3gp"; 
public Uri vidURI = Uri.parse(RTSP);
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     Button buttonPlayVideo = (Button)findViewById(R.id.playvideoplayer);
     Button buttonPauseVideo = (Button)findViewById(R.id.pausevideoplayer);

     getWindow().setFormat(PixelFormat.UNKNOWN);
     surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
     surfaceHolder = surfaceView.getHolder();
     surfaceHolder.addCallback(this);
     surfaceHolder.setFixedSize(176, 144);
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     mediaPlayer = new MediaPlayer();

     buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
 // TODO Auto-generated method stub
 pausing = false;

 if(mediaPlayer.isPlaying()){
  mediaPlayer.reset();
 }

 mediaPlayer.setDisplay(surfaceHolder);

 try {
     mediaPlayer.setDataSource(RTSP);
     mediaPlayer.prepare();

 } catch (IllegalArgumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IllegalStateException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
mediaPlayer.start();

}});


     buttonPauseVideo.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
 // TODO Auto-generated method stub
 if(pausing){
  pausing = false;
  mediaPlayer.start();
 }
 else{
  pausing = true;
  mediaPlayer.pause();
 }
}});

 }



@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}
}

Upvotes: 0

Views: 6130

Answers (2)

Pranav Jadav
Pranav Jadav

Reputation: 773

package com.example.videoplaybacktests;

import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements SurfaceHolder.Callback{

MediaPlayer mediaPlayer;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;;

String stringPath = "/drawable/visource.mp4";
public String RTSP = "rtsp://v2.cache7.c.youtube.com/CjYLENy73wIaLQkFPOlBtC4qExMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYJeOw_HjwJ6bUQw=/0/0/0/video.3gp"; 
public Uri vidURI = Uri.parse(RTSP);
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     Button buttonPlayVideo = (Button)findViewById(R.id.playvideoplayer);
     Button buttonPauseVideo = (Button)findViewById(R.id.pausevideoplayer);

     getWindow().setFormat(PixelFormat.UNKNOWN);
     surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
     surfaceHolder = surfaceView.getHolder();
     surfaceHolder.addCallback(this);
     surfaceHolder.setFixedSize(176, 144);
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     mediaPlayer = new MediaPlayer();

     buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
 // TODO Auto-generated method stub


 if(mediaPlayer.isPlaying()){
  mediaPlayer.stop();
 }

 mediaPlayer.setDisplay(surfaceHolder);

 try {
     mediaPlayer.setDataSource(RTSP);
     mediaPlayer.prepare();

 } catch (IllegalArgumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IllegalStateException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }

}});


     buttonPauseVideo.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
 // TODO Auto-generated method stub
 if(mediaPlayer==null)
return;
else if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}else{
mediaPlayer.start();
}
}});

 }



@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mediaPlayer.start();


}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}
}

Upvotes: 1

Lazy Ninja
Lazy Ninja

Reputation: 22537

You can not call start without the mediaPlayer being prepared! Thats the reason you get the error
Use prepareAsync instead

   try {
         mediaPlayer.setDataSource(RTSP);
         mediaPlayer.prepareAsync();

     } catch (IllegalArgumentException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IllegalStateException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }

and start playback on onPrepared():

public void onPrepared(MediaPlayer mp) {
     mediaPlayer.start();  
}

If it still doesnt start on onVideoSizeChanged

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
  mediaPlayer.start();
}

Upvotes: 1

Related Questions