您的位置:首页 > 游戏 > 手游 > 郑州专业做网站_广西响应式网站建设_自己建网站怎么建_互联网营销推广方案

郑州专业做网站_广西响应式网站建设_自己建网站怎么建_互联网营销推广方案

2024/11/16 18:08:35 来源:https://blog.csdn.net/Crazy9599/article/details/143603748  浏览:    关键词:郑州专业做网站_广西响应式网站建设_自己建网站怎么建_互联网营销推广方案
郑州专业做网站_广西响应式网站建设_自己建网站怎么建_互联网营销推广方案

刚刚实现了音视频合成的需求,趁热打铁记录一下遇到的问题

需求描述:

将给定的音频及视频合成一个视频,如果音频时长小于视频,则重复播放;如果大于视频时长则截取到视频结束。

采用的是MediaMuxer、MediaCodec原生方案。

MediaCodec主要处理音频格式的问题,音频可能有mp3 m4a等一些格式,解析得到的音频编码有一个是安卓不支持的编码格式,如audio/mpeg,添加音轨时就会抛出异常。所以这里统一用MediaCodec解析成audio/aac格式,解析方法参考了网上的解析

    /**** @param audioPath* @param audioStartTimeUs -1 表示不截取* @param audioEndTimeUs -1 表示不截取* @return*/public String audioToAAC(String audioPath,long audioStartTimeUs,long audioEndTimeUs){long a=System.currentTimeMillis();int audioExtractorTrackIndex=-1;int audioMuxerTrackIndex=-1;int channelCount=1;int sourceSampleRate = 0;String newAudioAAc = "";long sourceDuration=0;try {File tempFlie = new File(audioPath);String tempName = tempFlie.getName();String suffix = tempName.substring(tempName.lastIndexOf(".") + 1);
//             newAudioAAc= tempFlie.getParentFile().getAbsolutePath() + "/" + tempName.replace(suffix, "aac");newAudioAAc= Objects.requireNonNull(tempFlie.getParentFile()).getAbsolutePath() + "/" + tempName.replace(suffix, "aac");
//            muxer = new MediaMuxer(newAudioAAc, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);Log.i(TAG,"audioPath=="+audioPath+",newAudioAAC=="+newAudioAAc+",newAudioAAc=="+newAudioAAc);//音频信息获取MediaExtractor audioExtractor = new MediaExtractor();audioExtractor.setDataSource(audioPath);int trackCount = audioExtractor.getTrackCount();MediaFormat sourceFormat=null;String sourceMimeType="";int timeOutUs=300;for (int i = 0; i < trackCount; i++) {sourceFormat = audioExtractor.getTrackFormat(i);sourceMimeType = sourceFormat.getString(MediaFormat.KEY_MIME);channelCount=sourceFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);sourceSampleRate = sourceFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);sourceDuration = sourceFormat.getLong(MediaFormat.KEY_DURATION);if (sourceMimeType.startsWith("audio/")) { //找到音轨Log.i(TAG,"sourceMimeType=="+sourceMimeType+",channelCount=="+chann

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com