如何解决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 举报,一经查实,本站将立刻删除。