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,android,对讲开发中问题)