2015-09-01 4 views
1

У меня есть файл 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(); 
+0

ли вы, наконец, решить эту проблему? – Patrick

+1

@Patrick его было некоторое время, но я думаю, что код, который я приложил к OP, был решением, шел по неправильному пути с неправильным кодом – FTLRalph

ответ

0

Это работает для меня ....

 DataSource videoFile = new FileDataSourceImpl(filePath); 

     Movie sor = MovieCreator.build(videoFile); 

     List<Track> videoTracks = sor.getTracks(); 
     Track h264Track = null; 

     for (Track t : videoTracks 
      ) { 
      if(t.getHandler().contains("vid")) 
      { 
       h264Track = t;