MediaMuxer的使用

本文详细介绍了如何使用MediaMuxer将h264视频流和aac音频流(不含adts头)合成为符合MP4标准的文件。通过这个过程,你可以学习到MediaMuxer在处理多媒体数据方面的应用。
摘要由CSDN通过智能技术生成

h264与aac(不包含adts头)合成mp4。

package local.asuper.localplayer.mediacodec;

import android.media.MediaCodec;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import java.io.IOException;
import java.nio.ByteBuffer;

/**
 * @说明 h264   aac   muxer 成mp4
 * 直接muxer h264和aac 无法muxer,
 * audioExtractor.setDataSource(sdcard_path + "/input.aac");无法读取
 * 1.需要将h264先混合成mpeg4包装的mp4(无音频)
 * 2.需要将aac(无adts)先混合成mpeg4容器包装的mp4(无视频)
 * 3.muxer混合包装好的音频和视频(分别从包装好的中重新分离出来aac和H264),生成新的视频文件
 */

public class H264_AAC_toMp4_MediaMuxer {
    private static String TAG = "H264_AAC_toMp4_MediaMuxer";

    /**
     * aac 复用 成mp4(无视频)
     */
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    public static void muxerAudio(String sdcard_path) {
        MediaMuxer audioMuxer;
        MediaExtractor mediaExtractor = null;
        try {
            mediaExtractor = new MediaExtractor();
            audioMuxer = new MediaMuxer(sdcard_path + "/mux_audio.mp4", MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
            mediaExtractor.setDataSource(sdcard_path + "/input.mp4");
            int trackCount = mediaExtractor.getTrackCount();
            int audioTrackIndex = -1;
            for (int i = 0; i < trackCount; i++) {
   
                MediaFormat trackFormat = mediaExtractor.getTrackFormat(i);
                String mineType = trackFormat.getString(MediaFormat.KEY_MIME);
                //音频信道
                if (mineType.startsWith("audio/")) {
                    audioTrackIndex = i;
                }
            }
            ByteBuffer byteBuffer = ByteBuffer.allocate(500 * 1024);
            MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
            //切换到音频信道
            mediaExtractor.selectTrack(audioTrackIndex);
            MediaFormat trackFormat = mediaExtractor.getTrackFormat(audioTrackIndex);
            int writeAudioIndex = audioMuxer.addTrack(trackFormat);
            audioMuxer.start();
            long sampletime = 0;
            long first_sa
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值