http://dingran.iteye.com/blog/1442502
java
=====================================android
在使用surfaceView和MediaPlayer播放视频的时候出现了一个异常,纠结了好久,通过同事帮助,终于发现了问题的根源。ide
异常以下:this
E/AndroidRuntime( 1765): Caused by: java.lang.IllegalArgumentException: The surface has been released
E/AndroidRuntime( 1765): at android.media.MediaPlayer._setVideoSurface(Native Method)
E/AndroidRuntime( 1765): at android.media.MediaPlayer.setDisplay(MediaPlayer.java:633)视频
缘由是在surfaceHolder还没准备好的时候,我就调用了MediaPlayer的start()方法。blog
正确的播放流程应该是:get
surfaceView = (SurfaceView) findViewById(R.id.PlaySurfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);it
mediaPlayer.setDisplay(surfaceHolder);io
try {
mediaPlayer.setDataSource(this, Uri.parse("/sdcard/bianxing.ts"));
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});扩展
这样就能够正常播放了,唉,不容易啊,感谢同事的帮助。
其实对Medialayer的封装来讲,VideoView已经作的很好了,本身再写这些确实费力,指望之后扩展会好点