У меня есть файл MP4, который я создаю с помощью jcodec.Muxing MP4 и AAC (jcodec, MP4Parser)
У меня тогда есть файл AAC, который я создаю с помощью MediaCodec от Android.
Я хочу объединить их в один файл, и поскольку я не хочу слишком сильно ограничивать свой Android API, я выбираю MP4Parser.
Вот мой текущий код:
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl("input.mp4"));
AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl("input.aac"));
Movie movie = new Movie();
movie.addTrack(h264Track);
movie.addTrack(aacTrack);
Container mp4file = new DefaultMp4Builder().build(movie);
FileOutputStream fileOutputStream = new FileOutputStream(new File("output.mp4"));
FileChannel fc = fileOutputStream.getChannel();
mp4file.writeContainer(fc);
fileOutputStream.close();
код падает на линии:
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl("input.mp4"));
При этом в качестве трассировки стека:
09-01 18:46:40.611: E/AndroidRuntime(14115): FATAL EXCEPTION: GLThread 1260
09-01 18:46:40.611: E/AndroidRuntime(14115): Process: package.app, PID: 14115
09-01 18:46:40.611: E/AndroidRuntime(14115): java.lang.RuntimeException: Sequence parameter set extension is not yet handled. Needs TLC.
09-01 18:46:40.611: E/AndroidRuntime(14115): at com.googlecode.mp4parser.authoring.tracks.H264TrackImpl.readSamples(H264TrackImpl.java:362)
09-01 18:46:40.611: E/AndroidRuntime(14115): at com.googlecode.mp4parser.authoring.tracks.H264TrackImpl.parse(H264TrackImpl.java:108)
09-01 18:46:40.611: E/AndroidRuntime(14115): at com.googlecode.mp4parser.authoring.tracks.H264TrackImpl.<init>(H264TrackImpl.java:90)
09-01 18:46:40.611: E/AndroidRuntime(14115): at com.googlecode.mp4parser.authoring.tracks.H264TrackImpl.<init>(H264TrackImpl.java:96)
09-01 18:46:40.611: E/AndroidRuntime(14115): at com.googlecode.mp4parser.authoring.tracks.H264TrackImpl.<init>(H264TrackImpl.java:100)
09-01 18:46:40.611: E/AndroidRuntime(14115): at ...
(Катастрофа происходит в this function at this line.)
Так что я не совсем уверен, что это значит? Выпускает ли jcodec файл MP4 (который работает во всех видеопроигрывателях), который не совместим с MP4Parser?
Что я должен изучать, чтобы исправить это?
Цените любой совет.
Редактировать
Собиралась об этом неправильный путь, это работало
Movie movie = MovieCreator.build(_videoFile.getAbsolutePath());
AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl(_aacFile));
CroppedTrack aacCroppedTrack = new CroppedTrack(aacTrack, 1, aacTrack.getSamples().size());
movie.addTrack(aacCroppedTrack);
Container mp4file = new DefaultMp4Builder().build(movie);
FileOutputStream fileOutputStream = new FileOutputStream(_outputFile);
FileChannel fc = fileOutputStream.getChannel();
mp4file.writeContainer(fc);
fileOutputStream.close();
ли вы, наконец, решить эту проблему? – Patrick
@Patrick его было некоторое время, но я думаю, что код, который я приложил к OP, был решением, шел по неправильному пути с неправильным кодом – FTLRalph