80,472
社区成员




private void initMediaRecorder() {
mMediaRecorder = new MediaRecorder();// 创建mediarecorder对象
mMediaRecorder.setCamera(mCamera);
// 设置录制视频源为Camera(相机)
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 设置录制的视频编码h263 h264
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mMediaRecorder.setVideoSize(176, 144);
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
mMediaRecorder.setVideoFrameRate(15);
// TODO 音频编码AAC
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setAudioSamplingRate(16000);
// 设置视频文件输出的路径
mMediaRecorder.setOutputFile(mVideoPath);
int degrees = setDisplayOrientation(TakeVideoActivity.this, mCameraId, false);
mMediaRecorder.setOrientationHint(degrees);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
}
09-12 18:07:07.483: W/MediaProfiles(109): could not find media config xml file
09-12 18:07:07.574: E/StagefrightRecorder(109): Failed to set the video frame size to 176x144
09-12 18:07:07.574: E/StagefrightRecorder(109): setupVideoEncoder failed
09-12 18:07:07.574: W/AACEncoder(109): Call stop() when encoder has not started
09-12 18:07:07.574: E/MediaRecorder(2255): start failed: -2147483648
09-12 18:07:07.584: W/dalvikvm(2255): threadid=1: thread exiting with uncaught exception (group=0x4002d560)
09-12 18:07:10.687: E/AndroidRuntime(2255): FATAL EXCEPTION: main
09-12 18:07:10.687: E/AndroidRuntime(2255): java.lang.RuntimeException: start failed.
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.media.MediaRecorder.native_start(Native Method)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.media.MediaRecorder.start(MediaRecorder.java:597)
09-12 18:07:10.687: E/AndroidRuntime(2255): at org.xxx.ui.TakeVideoActivity.startMediaRecorder(TakeVideoActivity.java:285)
09-12 18:07:10.687: E/AndroidRuntime(2255): at org.xxx.ui.TakeVideoActivity.onClick(TakeVideoActivity.java:390)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.view.View.performClick(View.java:2498)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.view.View$PerformClick.run(View.java:9129)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.os.Handler.handleCallback(Handler.java:587)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.os.Handler.dispatchMessage(Handler.java:92)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.os.Looper.loop(Looper.java:123)
09-12 18:07:10.687: E/AndroidRuntime(2255): at android.app.ActivityThread.main(ActivityThread.java:3728)
09-12 18:07:10.687: E/AndroidRuntime(2255): at java.lang.reflect.Method.invokeNative(Native Method)
09-12 18:07:10.687: E/AndroidRuntime(2255): at java.lang.reflect.Method.invoke(Method.java:507)
09-12 18:07:10.687: E/AndroidRuntime(2255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
09-12 18:07:10.687: E/AndroidRuntime(2255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
09-12 18:07:10.687: E/AndroidRuntime(2255): at dalvik.system.NativeStart.main(Native Method)
Parameters parameters = mCamera.getParameters();
List<Size> supportedVideoSizes = parameters.getSupportedVideoSizes();
List<Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();
Parameters.getSupportedVideoSizes 这个也需要API 11才支持;而且有的支持的手机,拿出来结果是null;
Parameters.getSupportedPreviewSizes 这个是API 5就支持的,但是拿出来的值,不一定能作为video的宽高。。。(在支持getSupportedVideoSizes的机器上测试,发现这两个方法返回的Size是不一致的)
2. CamcorderProfile
CamcorderProfile camcorderProfile = CamcorderProfile.get(
mCameraId, CamcorderProfile.QUALITY_LOW);
mVideoSupportedWidth = camcorderProfile.videoFrameWidth;
mVideoSupportedHeight = camcorderProfile.videoFrameHeight;
这个获取的宽高,设置给video_size的时候,还是会报“Failed to set the video frame size to xxx”.
有大神不。。。
[/quote]
那用Camera.getParameters(),然后从返回i的Parameters里面找到video-size的信息,我记得这个应该很早就有支持的。
另外还有一招,用CamcorderProfile,从这些profile里面去着看看哪些size可用。[/quote]