zoukankan      html  css  js  c++  java
  • The surface has been released 异常

    http://dingran.iteye.com/blog/1442502

    =====================================

    在使用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已经做的很好了,自己再写这些确实费力,期望以后扩展会好点


    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    hibernate 报query result offset is not supported
    MAC下 mySQL及workbench安装
    FC105 FC106 Scale功能块使用说明
    报错!!!Servlet.service() for servlet [action] in context with path [/myssh] threw exception [java.lang.NullPointerException] with root cause java.lang.NullPointerException
    PLC300寻址指令
    vscode 配置
    Integrate Intellij with Cygwin
    Configure VSCode
    Linux下安装gradle
    Linux下安装nodejs-源码安装
  • 原文地址:https://www.cnblogs.com/iplus/p/4467404.html
Copyright © 2011-2022 走看看