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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章