功能介绍
https://github.com/sannies/mp4parser
Java MP4 Parser是一个读取和写入MP4容器的java api。直接操作容器而不是对音视频进行编解码。
功能:
- MP4parser的典型功能如下:
- 混合音频视频到MP4文件中
- 合并同样编码设置的MP4文件
- 增加或者改变MP4文件的metadata
- 通过省略帧的方式分割MP4文件
例子采用的音频编码格式是H264和AAC,这两种格式对于MP4文件来说非常常见。当然也有AC-3格式的,以及并不常用的H263/MPEG-2视频轨道。
不能把两个编码格式不同的MP4文件进行合并。
项目使用
项目集成
在gradle中添加依赖
compile 'com.googlecode.mp4parser:isoparser:1.1.21'
视频合并
File sdDirif (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {sdDir &#61; Environment.getExternalStorageDirectory()}else{sdDir &#61; Environment.getDataDirectory().getParentFile()}String sdpath &#61; sdDir.getAbsolutePath()//获取指定图片路径String v0 &#61; sdpath &#43; File.separator &#43; "1.mp4"String v1 &#61; sdpath &#43; File.separator &#43; "2.mp4"final ArrayList strings &#61; new ArrayList<>()strings.add(v0)strings.add(v1)final File mergeVideoFile &#61; new File(sdpath &#43; File.separator &#43; "merge.mp4")findViewById(R.id.tv_1).setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View view) {String s &#61; Mp4ParserUtils.mergeVideo(strings, mergeVideoFile)Toast.makeText(Mp4PaserActivity.this, "合并成功" &#43; s, Toast.LENGTH_LONG).show()}})
视频分割
final double [] times &#61; {0,3}; final String srcVideoPath &#61; sdpath &#43; File.separator &#43; "merge.mp4";final String resVideoPath &#61; sdpath &#43; File.separator;findViewById(R.id.tv_2).setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View view) {try {Mp4ParserUtils.cutVideo(srcVideoPath, resVideoPath, times);Toast.makeText(Mp4PaserActivity.this, "剪切成功", Toast.LENGTH_LONG).show();} catch (IOException e) {}}});
工具类
package com.dianping.test;import android.content.Context;import com.coremedia.iso.boxes.Container;
import com.googlecode.mp4parser.authoring.Movie;
import com.googlecode.mp4parser.authoring.Track;
import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
import com.googlecode.mp4parser.authoring.tracks.AppendTrack;
import com.googlecode.mp4parser.authoring.tracks.CroppedTrack;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;public class Mp4ParserUtils {/*** 合并视频** &#64;param videoList* &#64;param mergeVideoFile* &#64;return*/public static String mergeVideo(ArrayList videoList, File mergeVideoFile) {FileOutputStream fos &#61; null;FileChannel fc &#61; null;try {List sourceMovies &#61; new ArrayList<>();for (String video : videoList) {sourceMovies.add(MovieCreator.build(video));}List
局限性
只支持MP4文件
经过尝试对于一些MP4文件分割不了
功能比较少
目前点评有采用这种方案做视频的合并