The surface has been released 异常
2012-07-05 20:16
459 查看
/article/4092178.html
=====================================
在使用surfaceView和MediaPlayer播放视频的时候出现了一个异常,纠结了很久,经过同事帮助,终于发现了问题的根源。
异常如下:
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()方法。
正确的播放流程应该是:
surfaceView = (SurfaceView) findViewById(R.id.PlaySurfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
mediaPlayer.setDisplay(surfaceHolder);
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已经做的很好了,自己再写这些确实费力,期望以后扩展会好点
相关文章推荐
- 使用MediaPlayer出现The surface has been released 异常处理方法,附代码
- The surface has been released 异常
- java.lang.Illegalargumentexception: the surface has been released
- 安卓:解决应用前后台切换报The surface has been released错误;PhoneStateListener实现通话状态的监听
- The surface has been released
- surfaceview setDisplay时IllegalArgumentException: The surface has been released
- The surface has been released错误原因(亲测有效)
- 数据库操作的异常Cannot perform this operation because the connection pool has been close
- C#解决微信支付Exception has been thrown by the target of an invocation(调用的目标发生了异常)的问题
- WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data
- 完美解决WebSocket 服务器 The WebSocket session [0] has been closed and no method...异常信息
- 数据库操作的异常Cannot perform this operation because the connection pool has been close
- android初学之Android异常之 Warning: Activity not started, its current task has been brought to the front
- 解决WebSocket 服务器 The WebSocket session [0] has been closed and no method...异常信息
- The MS .NET Framework 3.0 has been released
- AsyncTask时异常: Cannot execute task: the task has already been executed (a task can be executed only o
- 安装ORACLE 10g时出现An unexpected exception has been detected in native code outside the VM异常的解决方案
- Servlet 发生异常: Cannot call sendRedirect() after the response has been committed!
- Visual studio 2013打开报异常"Exception has been thrown by the target of an invocation"
- 【SSH异常系列】Cannot call sendError() after the response has been committed