简体   繁体   English

视频播放完后媒体播放器崩溃

[英]Media player crashes after video finished

I worked on this problem for a week, but didn't find any. 我在这个问题上工作了一个星期,但没有发现任何问题。 Please, help me. 请帮我。 Anyone. 任何人。 Everything is welcome. 一切都欢迎。 App runs, plays 1st video, then crashes. 应用运行,播放第一个视频,然后崩溃。 It works fine in the emulator (andoid 3.2), HTC phone with android 2.3, but crashes on Dreambook w7 with android 2.2. 它可以在具有Android 2.3的仿真器(andoid 3.2),HTC手机中正常工作,但是在具有Android 2.2的Dreambook w7上崩溃。

I suggest this is becouse of some difference in VideoView class between android version 2.2 and later. 我建议这是因为Android 2.2及更高版本之间的VideoView类有所不同。 May by someone knows where I can find VideoView source code? 可能有人知道我在哪里可以找到VideoView源代码? I'll include it into my project. 我将其包含在我的项目中。 Or may be there is some open source video players, based NOT on VideoView? 还是可能有一些不是基于VideoView的开源视频播放器?

Here is my code: 这是我的代码:

@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.main);
        video=(VideoView)findViewById(R.id.video);

        /*some code for downloading playlist and missed videos here*/

        /*Then, launches some background theards for updating tham*/

        /*Then, downloading some picture from URL and setting it to image view*/

        /*Then, setting up another background theard for setting current time to text view*/

        //So, here is player: 
      File clip=new File(Environment.getExternalStorageDirectory(),
                playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4");     
                if (FLReady[FLcurrentVideo]==1) {

                    video.setVideoPath(clip.getAbsolutePath());
                    video.requestFocus();
                    video.start();
                    sendLog();     //send some info to web server
                }
                else {   //if video didn't exists
                    if (FLReady[FLcurrentVideo] == 0) {
                        new CheckOutVideos(false).execute(FLcurrentVideo);
                    }
                }


              /*Setting completion, for starting play next video after previous done...*/


              video.setOnCompletionListener(new OnCompletionListener(){
                @Override
                public void onCompletion(MediaPlayer mp) {
                    Log.d ("111", "on Completion"); //... but, this NEVER colled
                    int FL = 1;
                    while (FL == 1) {
                    if (FLcurrentVideo<count-1) FLcurrentVideo++;
                    else FLcurrentVideo = 0;
                    File clip=new File(Environment.getExternalStorageDirectory(),
                            playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4");

                            if (FLReady[FLcurrentVideo]==1) {

                                FL=0;
                                video=(VideoView)findViewById(R.id.video);
                                video.setVideoPath(clip.getAbsolutePath());
                                video.requestFocus();
                                video.start();

                            }
                            else {
                                FL = 1;
                                if (FLReady[FLcurrentVideo] == 0) {
                                new CheckOutVideos(false).execute(FLcurrentVideo);
                                }
                            }
                    }

                }
              });

    }

there is "null pointer exception" after colling OnCompletion: 整理OnCompletion后,存在“空指针异常”:

09-22 11:50:54.553: ERROR/AndroidRuntime(4529): FATAL EXCEPTION: main
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): java.lang.NullPointerException
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at android.widget.VideoView$3.onCompletion(VideoView.java:347)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1304)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at android.os.Looper.loop(Looper.java:123)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at java.lang.reflect.Method.invokeNative(Native Method)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at java.lang.reflect.Method.invoke(Method.java:521)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529):     at dalvik.system.NativeStart.main(Native Method)

In your OnComplition just remove this line 在您的OnComplition中,删除此行

video=(VideoView)findViewById(R.id.video);

simply pass the absolute path to the old videoView which you have created onCreate() 只需将绝对路径传递到您在onCreate()中创建的旧videoView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM