Surafce已经发布错误 [英] Surafce Has been Released Error

查看:175
本文介绍了Surafce已经发布错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正在创建一个媒体播放器,在线视频,但是当我试图运行它显示一个错误,表面已经发布。这里是我的代码:

 公共类VideoSample1扩展活动实现回调,
    在preparedListener,OnCompletionListener,
    OnClickListener,OnSeekCompleteListener,android.view.SurfaceHolder.Callback
    {
        公共字符串video_path =我的视频网址;
        私人SurfaceView surfaceViewFrame;
        私人的MediaPlayer播放器;
        私人SurfaceHolder持有人;
        私人捆绑临时演员;
        私有静态最后字符串变量=log_tag;
        私人布尔B = FALSE;

        @覆盖
        保护无效的onCreate(包savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.customvideoview);
            演员= getIntent()getExtras()。

            surfaceViewFrame =(SurfaceView)findViewById(R.id.surfaceViewFrame);
            surfaceViewFrame.setOnClickListener(本);
            surfaceViewFrame.setClickable(假);

            支架= surfaceViewFrame.getHolder();
            holder.addCallback(本);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

            球员=新的MediaPlayer();
            player.setOn preparedListener(本);
            player.setOnCompletionListener(本);

            player.setOnSeekCompleteListener(本);
            player.setScreenOnWhilePlaying(真正的);
            player.setDisplay(保持器);
        }
        @覆盖
        保护无效的onDestroy()
        {
            super.onDestroy();
            player.stop();
            player.release();
            球员= NULL;
            Toast.makeText(VideoSample1.this,后退,Toast.LENGTH_SHORT).show();
            完();
        }
        私人无效的playVideo()
        {

            新主题(新的Runnable()
            {
                公共无效的run()
                {
                    尝试
                    {

                        player.setDataSource(VideoSample1.this,Uri.parse(extras.getString(视频网址)));
                        。玩家prepareAsync();
                    }
                    赶上(抛出:IllegalArgumentException E)
                    {
                        Log.d(管理员,错误播放视频);
                        e.printStackTrace();
                        Log.i(TAG,标签+ e.getMessage());
                    }
                    赶上(IllegalStateException异常E)
                    {
                        Log.d(管理员,ERROR1同时播放的视频);
                        e.printStackTrace();
                        Log.i(TAG,标签+ e.getMessage());
                    }
                    赶上(IOException异常E)
                    {
                        e.printStackTrace();
                        Log.d(管理员,错误一边打video.Please,检查网络连接);
                        Log.i(TAG,标签+ e.getLocalizedMessage());
                    }
                }
            })。开始();
        }


        公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT)
        {

        }

        公共无效surfaceCreated(SurfaceHolder持有人)
        {
            的playVideo();
        }

        公共无效surfaceDestroyed(SurfaceHolder持有人)
        {

        }

        在prepared公共无效(MediaPlayer的熔点)
        {
            如果(!player.isPlaying())
            {
                B =真实;
                player.start();
            }

        }

        公共无效onCompletion(MediaPlayer的熔点)
        {
            mp.stop();

            完();
        }


        公共无效onSeekComplete(MediaPlayer的熔点)
        {

        }
        @覆盖
        公共无效invalidateDrawable(绘制对象是谁)
        {

        }

        @覆盖
        公共无效scheduleDrawable(绘制对象是谁,可运行什么,时长)
        {
    // TODO自动生成方法存根

        }

        @覆盖
        公共无效unscheduleDrawable(绘制对象是谁,可运行什么)
        {
    // TODO自动生成方法存根

        }


        @覆盖
        公共无效的onClick(视图v)
        {
    // TODO自动生成方法存根

        }

}
 

我称之为<一个href="http://stackoverflow.com/questions/16194941/the-surface-has-been-released-when-i-try-to-setdisplay-to-mediaplayer">this和其他堆栈溢出的网站,但没有跟我一起工作:-(。错误是近setdisplay(持有人)。 这里是我的logcat消息:

  10月八号至31日:18:01.512:E / AndroidRuntime(1162):致命异常:主要
10月八号至31日:18:01.512:E / AndroidRuntime(1162):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.msense.msenseplayer / com.msense.msenseplayer.VideoSample1}:java.lang.IllegalArgumentException:如果该面已被释放
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.os.Handler.dispatchMessage(Handler.java:99)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.os.Looper.loop(Looper.java:137)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread.main(ActivityThread.java:4429)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在java.lang.reflect.Method.invokeNative(本机方法)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在java.lang.reflect.Method.invoke(Method.java:511)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:795)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在dalvik.system.NativeStart.main(本机方法)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):java.lang.IllegalArgumentException异常:产生的原因,表面已被释放
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.media.MediaPlayer._setVideoSurface(本机方法)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.media.MediaPlayer.setDisplay(MediaPlayer.java:641)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在com.msense.msenseplayer.VideoSample1.onCreate(VideoSample1.java:53)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.Activity.performCreate(Activity.java:4578)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
10月八号至31日:18:01.512:E / AndroidRuntime(1162):11 ...更多
 

解决方案

你好我终于解决了我的错误。它的简单,我加入player.setdisplay下surfacecreated方法,像

 公共无效surfaceCreated(SurfaceHolder持有人)
{
的playVideo();
player.setDisplay(保持器);
}
 

这解决了我的问题。

Am creating one media player for online videos, but when am trying to run it is showing an error that surface has released. Here is my coding:

public class VideoSample1 extends Activity implements  Callback, 
    OnPreparedListener, OnCompletionListener, 
    OnClickListener, OnSeekCompleteListener, android.view.SurfaceHolder.Callback
    {
        public String video_path = "My video URL";
        private SurfaceView surfaceViewFrame;
        private MediaPlayer player;
        private SurfaceHolder holder;
        private Bundle extras;
        private static final String TAG = "log_tag";
        private boolean b =false;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.customvideoview);
            extras = getIntent().getExtras();

            surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);
            surfaceViewFrame.setOnClickListener(this);
            surfaceViewFrame.setClickable(false);

            holder = surfaceViewFrame.getHolder();
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

            player = new MediaPlayer();
            player.setOnPreparedListener(this);
            player.setOnCompletionListener(this);

            player.setOnSeekCompleteListener(this);
            player.setScreenOnWhilePlaying(true);
            player.setDisplay(holder);
        }
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
            player.stop();
            player.release();
            player = null;
            Toast.makeText(VideoSample1.this, "back",Toast.LENGTH_SHORT).show();
            finish();
        }
        private void playVideo()
        {

            new Thread(new Runnable() 
            {
                public void run() 
                {
                    try
                    {

                        player.setDataSource(VideoSample1.this, Uri.parse(extras.getString("Video URL")));
                        player.prepareAsync();
                    }
                    catch (IllegalArgumentException e) 
                    {
                        Log.d("admin","Error while playing video");
                        e.printStackTrace();
                        Log.i(TAG,"tag"+ e.getMessage());
                    } 
                    catch (IllegalStateException e) 
                    {
                        Log.d("admin","Error1 while playing video");
                        e.printStackTrace();
                        Log.i(TAG, "tag"+e.getMessage());
                    } 
                    catch (IOException e) 
                    {
                        e.printStackTrace();
                        Log.d("admin","Error while playing video.Please, check your network connection");
                        Log.i(TAG, "tag"+e.getLocalizedMessage());
                    }
                }
            }).start();
        }


        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
        {

        }

        public void surfaceCreated(SurfaceHolder holder) 
        {
            playVideo();
        }

        public void surfaceDestroyed(SurfaceHolder holder) 
        {

        }

        public void onPrepared(MediaPlayer mp)
        {
            if (!player.isPlaying())
            {
                b = true;
                player.start();
            }

        }

        public void onCompletion(MediaPlayer mp)
        {
            mp.stop();

            finish();
        }


        public void onSeekComplete(MediaPlayer mp)
        {

        }
        @Override
        public void invalidateDrawable(Drawable who) 
        {

        }

        @Override
        public void scheduleDrawable(Drawable who, Runnable what, long when)
        {
    // TODO Auto-generated method stub

        }

        @Override
        public void unscheduleDrawable(Drawable who, Runnable what) 
        {
    // TODO Auto-generated method stub

        }


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

        }

}

I referred this , and other stack overflow sites but nothing worked with me :-(. Error is near setdisplay(holder). And here is my Logcat messages:

08-31 10:18:01.512: E/AndroidRuntime(1162): FATAL EXCEPTION: main
08-31 10:18:01.512: E/AndroidRuntime(1162): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.msense.msenseplayer/com.msense.msenseplayer.VideoSample1}: java.lang.IllegalArgumentException: The surface has been released
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.os.Looper.loop(Looper.java:137)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.main(ActivityThread.java:4429)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at java.lang.reflect.Method.invokeNative(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at java.lang.reflect.Method.invoke(Method.java:511)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at dalvik.system.NativeStart.main(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162): Caused by: java.lang.IllegalArgumentException: The surface has been released
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.media.MediaPlayer._setVideoSurface(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.media.MediaPlayer.setDisplay(MediaPlayer.java:641)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.msense.msenseplayer.VideoSample1.onCreate(VideoSample1.java:53)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.Activity.performCreate(Activity.java:4578)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-31 10:18:01.512: E/AndroidRuntime(1162):     ... 11 more

解决方案

Hi finally i resolved my error. Its simple that i added player.setdisplay under surfacecreated method like

public void surfaceCreated(SurfaceHolder holder) 
{ 
playVideo(); 
player.setDisplay(holder); 
} 

and this solved my issue.

这篇关于Surafce已经发布错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆