sannies / mp4parser

A Java API to read, write and create MP4 files
Apache License 2.0
2.76k stars 566 forks source link

NullPointerException on DefaultMp4Builder() #310

Open saeidaslami opened 6 years ago

saeidaslami commented 6 years ago

i find this code on github and get NullPointerException error

       private void doAppend() {
           try {
                File folder = new File(Environment.getExternalStorageDirectory() + File.separator + 
                           "Download/");

                List<File> fileList = new ArrayList<File>();
                List<Movie> movieList = new ArrayList<Movie>();
                for (int i = 0; i < filePaths.size(); i++) {
                    fileList.add(new File(filePaths.get(i)));
                    movieList.add(MovieCreator.build(new File(filePaths.get(i)).getAbsolutePath()));
                }

                // Create a media file name
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                String filename = folder.getPath() + File.separator + "TMP4_APP_OUT_" + timeStamp + ".mp4";

                LinkedList<Track> videoTracks = new LinkedList<Track>();
                LinkedList<Track> audioTracks = new LinkedList<Track>();
                long[] audioDuration = {0}, videoDuration = {0};
                for (Movie m : movieList) {
                    Log.i("saeid","is exist...");
                    for (Track t : m.getTracks()) {
                        if (t.getHandler().equals("soun")) {
                            for (long a : t.getSampleDurations()) audioDuration[0] += a;
                            audioTracks.add(t);
                        } else if (t.getHandler().equals("vide")) {
                            for (long v : t.getSampleDurations()) videoDuration[0] += v;
                            videoTracks.add(t);
                        }
                    }

                    adjustDurations(videoTracks, audioTracks, videoDuration, audioDuration);
                }

                //Result movie from putting the audio and video together from the two clips
                Movie result = new Movie();

                //Append all audio and video
                if (videoTracks.size() > 0)
                    result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));

                if (audioTracks.size() > 0)
                    result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));

                Container out = new DefaultMp4Builder().build(result);
                FileChannel fc = new RandomAccessFile(String.format(filename), "rw").getChannel();
                out.writeContainer(fc);
                fc.close();

                Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                File f = new File("file://" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
                Uri contentUri = Uri.fromFile(f);
                mediaScanIntent.setData(contentUri);
                mCxt.sendBroadcast(mediaScanIntent);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }catch (NullPointerException e){
                e.printStackTrace();
            }
        }

and this is error W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference W/System.err: at java.util.LinkedList.addAll(LinkedList.java:408) at java.util.LinkedList.addAll(LinkedList.java:387) at com.googlecode.mp4parser.authoring.tracks.AppendTrack.getSampleDependencies(AppendTrack.java:450) at com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder.createSdtp(DefaultMp4Builder.java:556) at com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder.createStbl(DefaultMp4Builder.java:358) at com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder.createTrackBox(DefaultMp4Builder.java:322) at com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder.createMovieBox(DefaultMp4Builder.java:226) at com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder.build(DefaultMp4Builder.java:117) at com.example.saeidaslami.footballever.AppendExample.doAppend(AppendExample.java:100) at com.example.saeidaslami.footballever.AppendExample.append(AppendExample.java:51) at com.example.saeidaslami.footballever.VideoCreate$1.onClick(VideoCreate.java:64) at android.view.View.performClick(View.java:5646) at android.view.View$PerformClick.run(View.java:22473) at android.os.Handler.handleCallback(Handler.java:761) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:156) at android.app.ActivityThread.main(ActivityThread.java:6523) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)

this error at:

           Container out = new DefaultMp4Builder().build(result);

please help me.