微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android MP4parser 问题:android java.lang.IndexOutOfBoundsException:没有这样的设备

如何解决Android MP4parser 问题:android java.lang.IndexOutOfBoundsException:没有这样的设备

我正在尝试在 Android Studio 中使用 MP4parser 合并音频和视频,并根据视频裁剪音轨。 PFB 代码

Movie videoMovie = MovieCreator.build(video_url);
Track videoTracks = null;// Get the video portion of the video
  for (Track videoMovieTrack : videoMovie.getTracks()) {
   if ("vide".equals(videoMovieTrack.getHandler())) {
        videoTracks = videoMovieTrack;
      }
   }

Movie outMovie = new Movie();
int videoDuration=0;
Uri vidUri = Uri.parse(video_url);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(AddaudiovideoActivity.this,vidUri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.MetaDATA_KEY_DURATION);
videoDuration = Integer.parseInt(durationStr);
mmr.release();

AACTrackImpl audioTrack = new AACTrackImpl(new FileDataSourceImpl(audio_url));
Uri audUri = Uri.parse(audio_url);
MediaMetadataRetriever audmmr = new MediaMetadataRetriever();
audmmr.setDataSource(AddaudiovideoActivity.this,audUri);
String audurationStr = audmmr.extractMetadata(MediaMetadataRetriever.MetaDATA_KEY_DURATION);
int audioDuration = Integer.parseInt(audurationStr);
audmmr.release();

outMovie.addTrack(videoTracks);

if(audioDuration<videoDuration){
   double exactlyDuration = (double) videoDuration / audioDuration ;
   int minDuration = (int) Math.floor(exactlyDuration);
   double offsetDuration = exactlyDuration - minDuration ;
   Track[] audioTracks = new Track[minDuration+1];
     for (int i=0;i<minDuration;i++){
         audioTracks[i] = audioTrack ;
         }
     int offsetSize = (int) (audioTrack.getSamples().size()* offsetDuration);
     audioTracks[minDuration] = new CroppedTrack(audioTrack,offsetSize);
     outMovie.addTrack(new AppendTrack(audioTracks));
} else if(audioDuration>videoDuration){
        double offsetDuration = (double) videoDuration / audioDuration ;
        int offsetSize = (int) (audioTrack.getSamples().size()* offsetDuration);
        CroppedTrack croppedTrack = new CroppedTrack(audioTrack,offsetSize);
        outMovie.addTrack(croppedTrack);


} else { outMovie.addTrack(audioTrack); }

        Container container = new DefaultMp4Builder().build(outMovie);
        File outFile = new File(vid_fileName);
        RandomAccessFile randomAccessFile = new RandomAccessFile(outFile,"rw");
        container.writeContainer(randomAccessFile.getChannel());  //Issue occuring line
        randomAccessFile.close();

代码行“container.writeContainer(randomAccessFile.getChannel());” ,我遇到异常 java.lang.indexoutofboundsexception: No such device.

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。