android 实现aac音频合并拼接

之前在网上找了很多音频合并的技术文章,发现合并后的音频是只能播放前一段,后一段无法播放

就在打算修改技术实现方式的的时候发现google的 isoparsr可以实现aac的音频合并和音视频合并,下面贴出代码   

implementation 'com.googlecode.mp4parser:isoparser:1.1.21' 引用地址

    private String joinAudio(List<String> fileList) {
        Log.e("HandDrawActivity", "准备合成中");
        boolean result = false;
        try {
            List<Movie> movieList = new ArrayList<>();
            for (String file : fileList) {
                movieList.add(MovieCreator.build(file));
            }
            List<Track> videoTracks = new LinkedList<>();
            List<Track> audioTracks = new LinkedList<>();
            for (Movie m : movieList) {
                for (Track t : m.getTracks()) {
                    if (t.getHandler().equals("soun")) {
                        audioTracks.add(t);
                    }
                    if (t.getHandler().equals("vide")) {
                        videoTracks.add(t);
                    }
                }
            }
            
            Movie outMovie = new Movie();

            if (audioTracks.size() > 0) {
                outMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
            }
            if (videoTracks.size() > 0) {
                outMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
            }


            Container mp4file = new DefaultMp4Builder().build(outMovie);
            // 将文件输出
            File resultFile = new File(FileUtils.getSystemDir(FileUtils.VIDEO), DateUtils.getDate(new Date(), DateUtils.DATE_FORMAT_11) + ".aac");
            if (resultFile.exists() && resultFile.isFile()) {
                resultFile.delete();
            }
//            FileChannel fc = new RandomAccessFile(resultFile, "rw").getChannel();
            FileOutputStream os = new FileOutputStream(resultFile);
            mp4file.writeContainer(os.getChannel());
            os.close();
            Log.e("HandDrawActivity", "合成完毕");
            // 合成完成后把原片段文件删除
            for (String filePath : fileList) {
                File file = new File(filePath);
                   file.delete();
            }
            movieList.clear();
            fileList.clear();
            return resultFile.getPath();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";

    }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值