android安卓开发-Mp4Parser拼接合并两个视频-实用功能系列

Mp4Parser拼接两个视频

更多其他页面-自定义View-实用功能合集:点击查看


功能简介

使用MpParse将2个本地视频拼接成1个连续的,并输出保存

相关SDK导入:

compile ‘com.googlecode.mp4parser:isoparser:1.1.21’


实现步骤

1.导入第三方库
2.获取储存stroage权限,如何获取权限 点击查看
3.调用appendMp4List()即可


java代码


/**
 * 简介:使用MpParse将2个本地视频拼接成1个连续的,并输出保存
 * 作者:游丰泽
 **/
public class Mp4ParseUtil {

 
    /**
     * 对Mp4文件集合进行追加合并(按照顺序一个一个拼接起来)
     *
     * @param mp4PathList 想要被合成的视频列表,List<String>
     * @param outPutPath  [输出]合成后视频的文件输出绝对路径  ()
     * @param outPutFileName  [输出]合成后视频的文件名字     (大西瓜)
     * @param outPutFileSuffix  [[输出]合成后视频的文件后缀  (.mp4)
     */
    public static void appendMp4List(List<String> mp4PathList, String outPutPath,String outPutFileName,String outPutFileSuffix) throws IOException {
        String TAG="拼接视频->> ";
        List<Movie> mp4MovieList = new ArrayList<>();// Movie对象集合[输入]
        for (String mp4Path : mp4PathList) {// 将每个文件路径都构建成一个Movie对象
            Log.d(TAG, "视频路径: "+mp4Path);
            mp4MovieList.add(MovieCreator.build(mp4Path));
        }

        List<Track> audioTracks = new LinkedList<>();// 音频通道集合
        List<Track> videoTracks = new LinkedList<>();// 视频通道集合

        for (Movie mp4Movie : mp4MovieList) {// 对Movie对象集合进行循环
            for (Track inMovieTrack : mp4Movie.getTracks()) {
                if ("soun".equals(inMovieTrack.getHandler())) {// 从Movie对象中取出音频通道
                    audioTracks.add(inMovieTrack);
                }
                if ("vide".equals(inMovieTrack.getHandler())) {// 从Movie对象中取出视频通道
                    videoTracks.add(inMovieTrack);
                }
            }
        }

        Movie resultMovie = new Movie();// 结果Movie对象[输出]
        if (!audioTracks.isEmpty()) {// 将所有音频通道追加合并
            resultMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
        }
        if (!videoTracks.isEmpty()) {// 将所有视频通道追加合并
            resultMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
        }

        Container outContainer = new DefaultMp4Builder().build(resultMovie);// 将结果Movie对象封装进容器
        FileChannel fileChannel = new RandomAccessFile(String.format(outPutPath+outPutFileName+ System.currentTimeMillis() + outPutFileSuffix), "rwd").getChannel();
        outContainer.writeContainer(fileChannel);// 将容器内容写入磁盘
        fileChannel.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值