Java RuntimeException:";同步采样数不为';“与剧照数量不匹配”;使用mp4parser从图像制作视频时

Java RuntimeException:";同步采样数不为';“与剧照数量不匹配”;使用mp4parser从图像制作视频时,java,android,mp4parser,Java,Android,Mp4parser,我想使用mp4parser从多个图像创建视频。我从这个链接中找到了答案: 我用下面的代码试过了 DataSource videoFile = new FileDataSourceImpl(new File(Environment.getExternalStorageDirectory() + File.separator + "myvideo.mp4")); Movie sor = MovieCreator.build(videoFile);

我想使用mp4parser从多个图像创建视频。我从这个链接中找到了答案:

我用下面的代码试过了

DataSource videoFile = new FileDataSourceImpl(new File(Environment.getExternalStorageDirectory() + File.separator + "myvideo.mp4"));

                Movie sor = MovieCreator.build(videoFile);
                List<Track> videoTracks = sor.getTracks();

                Track referenceTrack = null;
                for (Track candidate : sor.getTracks()) {
                    if (candidate.getSyncSamples() != null && "vide".equals(candidate.getHandler()) && candidate.getSyncSamples().length > 0) {
                        referenceTrack = candidate;

                        OneJpegPerIframe oneJpegPerIframe = null;
                        try {
                            oneJpegPerIframe = new OneJpegPerIframe("eng", arr,referenceTrack);  
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        Movie movie = new Movie();
                        movie.addTrack(oneJpegPerIframe);

                        Container out = new DefaultMp4Builder().build(movie);
                        FileOutputStream fos = null;
                        try {
                            fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + File.separator + "output.mp4"));
                            out.writeContainer(fos.getChannel());
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
DataSource videoFile=new FileDataSourceImpl(新文件(Environment.getExternalStorageDirectory()+File.separator+“myvideo.mp4”);
Movie sor=MovieCreator.build(视频文件);
List videoTracks=sor.getTracks();
Track referenceTrack=null;
对于(跟踪候选:sor.getTracks()){
if(candidate.getSyncSamples()!=null&&“vide”.equals(candidate.getHandler())&&candidate.getSyncSamples().length>0){
referenceTrack=候选人;
OneJpegPerIframe OneJpegPerIframe=null;
试一试{
oneJpegPerIframe=新的oneJpegPerIframe(“eng”,arr,referenceTrack);
}捕获(IOE异常){
e、 printStackTrace();
}
电影=新电影();
movie.addTrack(oneJpegPerIframe);
Container out=new DefaultMp4Builder().build(电影);
FileOutputStream=null;
试一试{
fos=新文件输出流(新文件(Environment.getExternalStorageDirectory()+File.separator+“output.mp4”);
out.writeContainer(fos.getChannel());
fos.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
但我得到了类似“java.lang.RuntimeException:同步样本数与静止图像数不匹配(30对4)”的错误,我在下面显示了这一错误:

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { (has extras) }} to activity {orafox.videomaker/orafox.videomaker.activity.MainActivity}: java.lang.RuntimeException: Number of sync samples doesn't match the number of stills (30 vs. 4)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3367)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
at android.app.ActivityThread.access$1100(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Number of sync samples doesn't match the number of stills (30 vs. 4)
at com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe.<init>(OneJpegPerIframe.java:39)
at activity.MainActivity.onActivityResult(MainActivity.java:135)
at android.app.Activity.dispatchActivityResult(Activity.java:5322)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3363)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410) 
at android.app.ActivityThread.access$1100(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime:致命异常:主
java.lang.RuntimeException:未能将结果ResultInfo{who=null,request=100,result=-1,data=Intent{(有额外数据)}}传递到活动{orafox.videomaker/orafox.videomaker.activity.MainActivity}:java.lang.RuntimeException:同步样本数与静止数不匹配(30对4)
在android.app.ActivityThread.deliverResults(ActivityThread.java:3367)上
位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
在android.app.ActivityThread.access$1100(ActivityThread.java:141)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5103)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:737)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.RuntimeException:同步样本数与静止图像数不匹配(30对4)
在com.googlecode.mp4parser.authoring.tracks.mjpeg.OneJpegPerIframe.(OneJpegPerIframe.java:39)
位于activity.MainActivity.onActivityResult(MainActivity.java:135)
位于android.app.Activity.dispatchActivityResult(Activity.java:5322)
位于android.app.ActivityThread.deliverResults(ActivityThread.java:3363)
位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
在android.app.ActivityThread.access$1100(ActivityThread.java:141)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5103)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:525)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:737)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在dalvik.system.NativeStart.main(本机方法)
我不想使用“ffmpeg”库

如果有人知道如何解决这个问题,请帮助我。提前谢谢