Without magazines, two sentences:
- try implementing
SurfaceHolder.Callback.surfaceCreated() . - try using
MediaPlayer.create() which accepts a SurfaceHolder
Details (1)
Your surface may not have been created yet when you call start() . You should use MediaPlayer.setDisplay() and MediaPlayer.start() only after surface is created. To do this, you should add override MediaPlayer.start() only after surface is created. To do this, you should add override SurfaceHolder.Callback.surfaceCreated () `. For example, your code might look like this.
public class MediaPlayerActivity extends Activity implements SurfaceHolder.Callback { MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.video_player); SurfaceView v = (SurfaceView) findViewById(R.id.surface_video); SurfaceHolder holder = v.getHolder(); holder.setFixedSize(400,300); holder.addCallback(this). mp = MediaPlayer.create(this, Uri.parse("http://stream-url.com/playlist.m3u8")); @Override public void surfaceCreated(SurfaceHolder holder) { mp.setDisplay(holder); try { mp.start(); } catch (IllegalStateException e) { e.printStackTrace(); } } }
Details (2)
It seems that there is another MediaPlayer.create() that takes SurfaceHolder as one of the arguments - you can try: http://developer.android.com/reference/android/media/MediaPlayer.html#create(android.content.Context, android.net.Uri, android.view.SurfaceHolder)
vArDo source share