分离mp4、flv,生成视频H264/mpeg和音频mp3或aac(无adts头)
下面是应用层mediaExtractor使用,分离一mp4文件,生成h264和aac,并添加adts头文件。
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* mp4extractor 分离器
* 分离mp4 成h264 和 aac
* 分别生成h264和aac文件(无adts头)
* <p>
* android的无法分离高profile的h264文件,这里分离的是Baseline(profile)
* <p>
* 合成的时候,MP4,flv,rtmp都不需要adts头
* 合成的时候:hls,rtp,ts需要adts头
* 所以这里分离出来的aac是没有adts头的,mediainfo读取到的音频信息是从moov中box中读取的
*/
public class MP4VideoExtractor {
private static final String TAG = "MP4VideoExtractor";
//test3.mp4 h264,aac
public static void exactorMedia(String sdcard_path) {
FileOutputStream videoOutputStream = null;
FileOutputStream audioOutputStream = null;
MediaExtractor mediaExtractor = new MediaExtractor();
try {
//分离的视频文件
File videoFile = new File(sdcard_path, "output_video.h264");
//分离的音频文件
File audioFile = new File(sdcard_path, "output_audio.aac");
videoOutputStream = new FileOutputStream(videoFile);
audioOutputStream = new FileOutputStream(audioFile);
//输入文件,也可以是网络文件
//oxford.mp4 视频 h264/baseline 音频 aac/lc 44.1k 2 channel 128kb/s
mediaExtractor.setDataSource(sdcard_path + "/oxford.mp4&