Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)
Posted smile3670
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)相关的知识,希望对你有一定的参考价值。
之前写得太乱,回头看看感觉自己都有点看不懂,重新写下。在android上需要做一个录像留言功能,需要生成MP4或者waw格式视频。但是使用MediaRecorder录制出的MP4视频格式音量太小,几乎听不到,且MediaRecorder提供API太少,所有只能考虑其它方法。
试验后的方案是分别录制音频和视频,然后合成MP4格式视频。
1、音频录制。通过AudioRecord录制增益音量后的wav音频文件。录制wav的方法网上有很多例子,增益音量的方法在项目中的方式是使用WEBRTC中的增益模块,我在网上还找到了另一种办法,比较简单,但是效果不好。
//音量大小,此种方法放大声音会有底噪声
audiodata[i]= (byte) (audiodata[i] * 5);//数字决定大小
参考http://blog.csdn.net/smile3670/article/details/41310241
2、MediaRecorder 录制无声视频。网上例子也很多。
3、有了音频和视频,可以合成了。在网上找了找一些合成库,首先找到的开源java库mp4parser,他可以将AAC、h264、mp4等格式合成MP4。随后找到了isoviewer-1.0-RC-35.jar(该库包含了mp4parser),可使用它实现音视频合成。
// mp4音视频合成
try
Movie countVideo = MovieCreator.build(videoMp4);
AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl(
audioAac));
countVideo.addTrack(aacTrack);
Container out = new DefaultMp4Builder().build(countVideo);
FileOutputStream fos = new FileOutputStream(new File(
messageRecordFile));
out.writeContainer(fos.getChannel());
fos.close();
catch (IOException e)
e.printStackTrace();
4、由于音视频合成的音频是AAC格式,而之前录制的是wav,需要转码成AAC。最先在网上找到的是一个java实现的通过ffmpeg在Windows和linux上转码的例子,但不支持android。参考其中java调用ffmpeg的方法,并将一个支持android的ffmpeg放到/system/bin/,实现了android上的转码。ffmpeg 转码命令ffmpeg -i aec_out.wav -strict -2 -b:a 32k -y abc.aac。
相关库资源,源码参考
http://blog.csdn.net/smile3670/article/details/41279749
录制合成的java部分实现
http://download.csdn.net/detail/smile3670/8487683
以上是关于Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)的主要内容,如果未能解决你的问题,请参考以下文章
Android 中使用MediaRecorder实现视频录制功能
Android 开发 MediaRecorder使用Camera1配合录制视频
Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)
Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)