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录制视频音量小问题解决 (音视频转码合成)

Android音视频开发:MediaRecorder录制视频

尽管以纵向视图录制,但使用 mediaRecorder 和表面视图录制的 Android 视频无法在横向视图中播放