Android中MediaRecorder类实现视频录制通过MediaRecorder类的相关方法可以录制视频保存成为MPEG4、H.263和H
Android中MediaRecorder类实现视频录制
通过MediaRecorder类的相关方法可以录制视频保存成为MPEG4、H.263和H.264编码的视频。这里很多网友发现自己的代码无法正常执行,首先确定设计预览对象Surface,可以通过setPreviewDisplay()方法实现,同时调用prepare()要在设置预览前执行。这里可以可以设置音源MIC、输出声音的格式3GP,设置编码为AMR。视频源为CAMERA,编码为MPEG_4。最终保存成一个MPEG4的文件,设置好输出文件的路径即可,这里我们还可以通过setVideoSize和setVideoFrameRate方法设置视频的分辨率以及帧数。示例代码参考
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setOutputFile(filePath);
?
移植camera recorder时常会碰到下面的问题
E/AuthorDriver(?? 60): Command 13 completed with error -17
E/MediaRecorder(? 225): prepare failed: -17
原因有下面2个
1.Camera.apk里设置的VideoEncoder不对,默认是H263,建议改为H264,patch如下
diff --git a/packages/apps/Camera/src/com/android/camera/VideoCamera.java b/packages/apps/Camera/src/com/android/camera/Video
index 8effd3c..e17ef7c 100644
--- a/packages/apps/Camera/src/com/android/camera/VideoCamera.java
+++ b/packages/apps/Camera/src/com/android/camera/VideoCamera.java
@@ -905,7 +905,7 @@ public class VideoCamera extends Activity implements View.On
ClickListener,
???????????????? "audio-param-number-of-channels=%d", mProfile.mAudioChannels));
???????? mMediaRecorder.setParameters(String.format(
???????????????? "audio-param-sampling-rate=%d", mProfile.mAudioSamplingRate));
-??????? mMediaRecorder.setVideoEncoder(mProfile.mVideoEncoder);
+??????? mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);? //mProfile.mVideoEncoder);
???????? mMediaRecorder.setAudioEncoder(mProfile.mAudioEncoder);
???????? mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
?
2.opencore没有编译libomx_avcenc_sharedlibrary.so,需要在externel/opencore/Android.mk里加上,patch如下
diff --git a/external/opencore/Android.mk b/external/opencore/Android.mk
index 013e5c8..8e58b4c 100644
--- a/external/opencore/Android.mk
+++ b/external/opencore/Android.mk
@@ -19,6 +19,8 @@ include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_aacdec_sharedlibrary
?include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_amrdec_sharedlibrary.mk
?include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_mp3dec_sharedlibrary.mk
?include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_amrenc_sharedlibrary.mk
+include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_avcenc_sharedlibrary.mk
+include $(PV_TOP)/build_config/opencore_dynamic/Android_omx_m4venc_sharedlibrary.mk
?include $(PV_TOP)/build_config/opencore_dynamic/Android_opencore_net_support.mk
?include $(PV_TOP)/build_config/opencore_dynamic/Android_opencore_downloadreg.mk
?include $(PV_TOP)/build_config/opencore_dynamic/Android_opencore_download.mk 1 楼 juyannihao 2011-01-09 没怎么懂,具体应该自己敲一下