MediaRecorder录制视频,部分手机失败

zhujunhua2012 2014-09-12 06:22:51
先说下问题,在使用 MediaRecorder 录制视频时,部分手机正常,部分手机失败,求大神指点。。。

录制视频代码如下:

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)
...全文
1053 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
imageprocessin 2016-09-22
  • 打赏
  • 举报
回复
你解决了吗?
地球份子 2015-04-29
  • 打赏
  • 举报
回复
楼主求解决方法
zhujunhua2012 2014-09-18
  • 打赏
  • 举报
回复
1. Parameters

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”. 有大神不。。。
引用 6 楼 YKDSea 的回复:
[quote=引用 3 楼 zhujunhua_2010 的回复:] camera.getSupportedVideoSizes()这个要在API 11 才能用的,最起码得兼容到API 8 啊。。。 [quote=引用 1 楼 YKDSea 的回复:] 错误很明显啊, Failed to set the video frame size to 176x144 video尺寸不支持,这个你可以通过camera.getSupportedVideoSizes()选择一个合适的video size,而不是这样hard code。
[/quote] 那用Camera.getParameters(),然后从返回i的Parameters里面找到video-size的信息,我记得这个应该很早就有支持的。 另外还有一招,用CamcorderProfile,从这些profile里面去着看看哪些size可用。[/quote]
sky-Z 2014-09-17
  • 打赏
  • 举报
回复
引用 3 楼 zhujunhua_2010 的回复:
camera.getSupportedVideoSizes()这个要在API 11 才能用的,最起码得兼容到API 8 啊。。。 [quote=引用 1 楼 YKDSea 的回复:] 错误很明显啊, Failed to set the video frame size to 176x144 video尺寸不支持,这个你可以通过camera.getSupportedVideoSizes()选择一个合适的video size,而不是这样hard code。
[/quote] 那用Camera.getParameters(),然后从返回i的Parameters里面找到video-size的信息,我记得这个应该很早就有支持的。 另外还有一招,用CamcorderProfile,从这些profile里面去着看看哪些size可用。
zhujunhua2012 2014-09-17
  • 打赏
  • 举报
回复
求指导。。。
引用 4 楼 snowrain_2008 的回复:
我这里有个视频大神。不过很忙,抽空帮你。
snowrain_2008 2014-09-16
  • 打赏
  • 举报
回复
我这里有个视频大神。不过很忙,抽空帮你。
zhujunhua2012 2014-09-16
  • 打赏
  • 举报
回复
camera.getSupportedVideoSizes()这个要在API 11 才能用的,最起码得兼容到API 8 啊。。。
引用 1 楼 YKDSea 的回复:
错误很明显啊, Failed to set the video frame size to 176x144 video尺寸不支持,这个你可以通过camera.getSupportedVideoSizes()选择一个合适的video size,而不是这样hard code。
happyLife002 2014-09-12
  • 打赏
  • 举报
回复
我以前也遇见过这样的问题,后来发现是部分手机不支持某种视频编码,个人建议多试几种编码格式,最好把后面的参数先屏蔽,逐个排除以防止产生影响。
sky-Z 2014-09-12
  • 打赏
  • 举报
回复
错误很明显啊, Failed to set the video frame size to 176x144 video尺寸不支持,这个你可以通过camera.getSupportedVideoSizes()选择一个合适的video size,而不是这样hard code。

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧