我们在使用Android录制视频的时候,可能会有这么一种需求,就是将多个mp4视频合并成一个(比如某企鹅的某软件)。这里备份下一种实现方式:
CONTENTS
使用【 mp4parser 】来合并视频:
官网:
【 https://code.google.com/p/mp4parser/ 】
使用方法:
1)在官网上下载jar文件,作者下载的是【 isoviewer-1.0-RC-28.jar 】
2)将jar文件添加到Android的工程里,配置好buildpath
3)合并多个文件,基本实现如下:
List<String> fileList = new ArrayList<String>(); List<Movie> moviesList = new LinkedList<Movie>(); fileList.add("/1387865774255.mp4"); fileList.add("/1387865800664.mp4"); try { for (String file : fileList) { moviesList.add(MovieCreator.build(file)); } } catch (IOException e) { e.printStackTrace(); } List<Track> videoTracks = new LinkedList<Track>(); List<Track> audioTracks = new LinkedList<Track>(); for (Movie m : moviesList) { for (Track t : m.getTracks()) { if (t.getHandler().equals("soun")) { audioTracks.add(t); } if (t.getHandler().equals("vide")) { videoTracks.add(t); } } } Movie result = new Movie(); try { if (audioTracks.size() > 0) { result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); } if (videoTracks.size() > 0) { result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Container out = new DefaultMp4Builder().build(result); try { FileChannel fc = new RandomAccessFile("output.mp4", "rw").getChannel(); out.writeContainer(fc); fc.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } moviesList.clear(); fileList.clear();
备注:
1)mp4parser的功能有很多,更多的使用方法可以参考源码SVN里面的sample。
2)mp4parser的速度比较慢,可以使用一些小技巧神马的提升一些速度,这里就不扩展了。
发表评论