上篇介绍了mp4parser合成视频功能:http://blog.csdn.net/king1425/article/details/70805960
,这篇使用Android原生API实现视频的分离与合成
MediaExtractors
将视频多信道的分离出来,比如声音和图像分隔出来,即解封装,目前只能解MP4的封装
1. JAVA层
file: frameworks/base/media/Java/Android/media/MediaExtractor.java
class: MediaExtractor
2. JNI
file:frameworks/base/media/jni/android_media_MediaExtractor.cpp
class:JMediaExtractor
3. C++
file:frameworks/av/media/libstagefright/MediaExtractor.cpp
class:MediaExtractor
MediaExtractor(C++)是MediaExtractor体系中核心,是各个extractor(eg.MPEG4Extractor)的父类,管理者.
MediaMuxer
MediaMuxer,在Android的多媒体类中,MediaMuxer用于将音频和视频进行混合生成多媒体文件。缺点是目前只能支持一个audio track和一个video track,而且仅支持mp4输出。即把H264和AAC封装为Mp4格式
https://developer.android.com/reference/android/media/MediaMuxer.html
这个是API文档介绍MediaMuxer混合器的文档。
demo示例代码
MediaMuxer和MediaExtractors视频的合成与分离
import android.media.MediaCodec;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.util.Log;
import java.nio.ByteBuffer;
//剪切合成类
public class VideoClip {
private final static String TAG = "VideoClip";
private MediaExtractor mMediaExtractor;
private MediaFormat mMediaFormat;
private MediaMuxer mMediaMuxer;
private String mime = null;
//剪切的视频 剪切的起点 剪切的时长
public boolean clipVideo(String url, long clipPoint, long clipDuration) {
int videoTrackIndex = -1;
int audioTrackIndex = -1;
int videoMaxInputSize = 0;
int audioMaxInputSize = 0;
int sourceVTrack = 0;
int sourceATrack = 0;
long videoDuration, audioDuration;
Log.d(TAG, ">> url : " + url