Android mp4解析器-示例描述框条目不同

Android mp4解析器-示例描述框条目不同,android,video-editing,mp4parser,Android,Video Editing,Mp4parser,[我在stackoverflow上找到了下面的链接,但它不符合我的要求。我试图通过向用户提供一个自定义图库来附加视频,其中显示SD卡中存储的所有视频,用户必须选择任意数量的视频,最后按“附加”按钮后,视频被合并/附加,在许多情况下效果良好b但在某些情况下它会失败。我不理解这个错误以及如何解决它。上面的链接用于为从应用程序本身录制的视频设置videocodec,我不这么做。如何更改已经可用的mp4视频的videocodec 这是我在追加时遇到的日志错误。我还打印了示例框描述条目以获得帮助,但没有效

[我在stackoverflow上找到了下面的链接,但它不符合我的要求。我试图通过向用户提供一个自定义图库来附加视频,其中显示SD卡中存储的所有视频,用户必须选择任意数量的视频,最后按“附加”按钮后,视频被合并/附加,在许多情况下效果良好b但在某些情况下它会失败。我不理解这个错误以及如何解决它。上面的链接用于为从应用程序本身录制的视频设置videocodec,我不这么做。如何更改已经可用的mp4视频的videocodec

这是我在追加时遇到的日志错误。我还打印了示例框描述条目以获得帮助,但没有效果,我可以看到示例框描述条目是相同的,并且没有Isoparser库的文档可以帮助我。我正在使用
Isoparser-1.0-RC-2.jar
aspectjrt-1.8.0.jar
由于最新的isoparser库不适用于我:-(

09-03 11:53:43.390:I/MERGE\u VIDEO\u活动(28345):样本描述框[AudioSampleEntry]
09-03 11:53:43.390:I/MERGE_VIDEO_活动(28345):SampleDescriptionBox[com.coremedia.iso.box.sampleentry。VisualSampleEntry@42118240]
09-03 11:53:43.390:I/MERGE_VIDEO_活动(28345):样本描述框[音频样本输入]
09-03 11:53:43.390:I/MERGE_VIDEO_活动(28345):SampleDescriptionBox[com.coremedia.iso.box.sampleentry。VisualSampleEntry@41f08c60]
09-03 11:53:43.400:W/System.err(28345):java.io.IOException:无法追加com.googlecode.mp4parser.authoring。Mp4TrackImpl@42008d78转到com.googlecode.mp4parser.authoring。Mp4TrackImpl@41ef5d90因为它们的示例描述框不同
09-03 11:53:43.400:W/System.err(28345):位于com.googlecode.mp4parser.authoring.tracks.AppendTrack.(AppendTrack.java:48)
09-03 11:53:43.400:W/System.err(28345):位于com.spec.videoeditingdemo.service.asynctasks.MergeVideos.doInBackground(MergeVideos.java:113)
09-03 11:53:43.400:W/System.err(28345):位于com.spec.videoeditingdemo.service.asynctasks.MergeVideos.doInBackground(MergeVideos.java:1)
09-03 11:53:43.400:W/System.err(28345):在android.os.AsyncTask$2.call(AsyncTask.java:288)
09-03 11:53:43.400:W/System.err(28345):位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-03 11:53:43.400:W/System.err(28345):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-03 11:53:43.400:W/System.err(28345):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-03 11:53:43.400:W/System.err(28345):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-03 11:53:43.400:W/System.err(28345):at java.lang.Thread.run(Thread.java:841)

-提前谢谢。如果有人能帮我解决这个问题,我将非常高兴。

错误消息非常准确。示例描述框(=编解码器初始化)不同。因此您无法附加这些曲目-请记住:mp4parser无法重新编码文件-它只是附加已有的内容。 有时差异可以忽略,但在大多数情况下不能忽略。例如,如果不重新编码,您将无法附加两个具有不同分辨率或帧速率的视频


那么:您的情况如何?两个源视频是否使用相同的编码器设置进行编码?

这就是我要问的问题。是否有任何方法可以找到SD卡中已可用视频的视频编解码器。因此,是否有任何方法可以在传递它们进行合并之前以相同的格式对它们进行重新编码,这样这些问题就不会继续存在。请注意:所有这些视频不是从cel phone的摄像头录制的,而是一些不同的mp4文件,如歌曲/卡通mp4视频。如果你需要重新编码,我建议你最好使用ffmpeg或MediaCodec API(Android 4.x)与mp4parser一起。嘿,Sebastian,你能告诉我我需要强制检查哪些属性,以查看是否可以附加两个视频吗?这样我可以预先通知用户当前选择的视频不能附加到以前选择的视频。
09-03 11:53:43.390: I/MERGE_VIDEO_ACTIVITY(28345): SampleDescriptionBox[AudioSampleEntry]
09-03 11:53:43.390: I/MERGE_VIDEO_ACTIVITY(28345): SampleDescriptionBox[com.coremedia.iso.boxes.sampleentry.VisualSampleEntry@42118240]
09-03 11:53:43.390: I/MERGE_VIDEO_ACTIVITY(28345): SampleDescriptionBox[AudioSampleEntry]
09-03 11:53:43.390: I/MERGE_VIDEO_ACTIVITY(28345): SampleDescriptionBox[com.coremedia.iso.boxes.sampleentry.VisualSampleEntry@41f08c60]
09-03 11:53:43.400: W/System.err(28345): java.io.IOException: Cannot append com.googlecode.mp4parser.authoring.Mp4TrackImpl@42008d78 to com.googlecode.mp4parser.authoring.Mp4TrackImpl@41ef5d90 since their Sample Description Boxes differ
09-03 11:53:43.400: W/System.err(28345):    at com.googlecode.mp4parser.authoring.tracks.AppendTrack.<init>(AppendTrack.java:48)
09-03 11:53:43.400: W/System.err(28345):    at com.spec.videoeditingdemo.service.asynctasks.MergeVideos.doInBackground(MergeVideos.java:113)
09-03 11:53:43.400: W/System.err(28345):    at com.spec.videoeditingdemo.service.asynctasks.MergeVideos.doInBackground(MergeVideos.java:1)
09-03 11:53:43.400: W/System.err(28345):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-03 11:53:43.400: W/System.err(28345):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-03 11:53:43.400: W/System.err(28345):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-03 11:53:43.400: W/System.err(28345):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-03 11:53:43.400: W/System.err(28345):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-03 11:53:43.400: W/System.err(28345):    at java.lang.Thread.run(Thread.java:841)