我正在尝试使用 MediaRecorder 对象以我的设备三星 S2 上可用的最高质量录制视频。但是,使用我当前的代码,我在调用 MediaRecorder.close() 时看到挂起,然后手机崩溃(LOGCAT:http ://pastebin.com/yzqWqta3 )
当 CamcorderProfile 设置为 QUALITY_LOW 时,我有一段工作代码,但是同样的代码会导致设备崩溃(需要重新启动才能恢复),Camcorder Profile 更改为 QUALITY_HIGH。
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
稍后将其设置为记录器对象;
recorder.setProfile(camcorderProfile);
但是,在调用 MediaRecorder.stop() 之后,以下内容会导致崩溃;
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
我的代码基于这个项目(来自 Android Pro Media 的家伙 - Shawn van Every)https://github.com/vanevery/Custom-Video-Capture-with-Preview.git
原始形式的代码也会导致记录器崩溃(LOGCAT:http ://pastebin.com/L2ahkj82 )Mediarecorder#start()
,我不得不使用这个线程中的建议来应用三星特定的修复;“ [Q] 无法在 Galaxy Sii 上录制高清视频”;
http://forum.xda-developers.com/showthread.php?t=1104970&page=8
Camera.Parameters p = camera.getParameters();
// http://forum.xda-developers.com/showthread.php?t=1104970&page=8
p.set( "cam_mode", 1 ); // green mess in video file without this
p.setFocusMode(Parameters.FOCUS_MODE_AUTO); // works
p.setPreviewSize(camcorderProfile.videoFrameWidth, camcorderProfile.videoFrameHeight);
p.setPreviewFrameRate(camcorderProfile.videoFrameRate);
camera.setParameters(p);
camera.setDisplayOrientation(0);
camera.setPreviewDisplay(holder);
camera.startPreview();
但是,使用上面的代码,我要么崩溃,要么应用程序停止响应;LOGCAT http://pastebin.com/D7Ap7yQZ
一般检查设备对 1920/1080 或 QUALITY_HIGH 的支持
库存相机应用程序支持以 1920x1080 的分辨率录制,它称为“超精细”,但分辨率是明确设置的,我猜想适当的参数是从已知的良好设置推断出来的,而不是从 QUALITY_HIGH 推断出来的CamcorderProfile
。
但是,Play 商店中还有其他支持 1920x1080 的应用程序,它们可以在来自第 3 方的 S2 上运行(他们可能无法访问三星专有文档),因此应该可以通过显式设置每个参数来复制 QUALITY_HIGH,或者揭开三星的无证bf*ckery。
设备自省
三星 SII 似乎支持使用 QUALITY_HIGH;
Log.v(LOGTAG, "has Profile QUALITY HIGH? : "+
CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH));
返回这个;
V/VIDEOCAPTURE( 7897): has Profile QUALITY HIGH? : true
并且 Android 文档表明“QUALITY_HIGH”是一个预定义的配置文件,表示对应于最高可用分辨率的级别。
int QUALITY_HIGH Quality level corresponding to the highest available resolution.
http://developer.android.com/reference/android/media/CamcorderProfile.html#QUALITY_HIGH
笔记
- 我今天早上将手机恢复出厂设置
- 我尝试了另一种 SD 卡,但在同一个地方发生了同样的崩溃
- 这可能是硬件问题。我还没有找到另一台三星 S2 进行测试。
相关的 SO 问题
还有其他关于在三星 S2 上录制高质量视频的问题,但没有一个答案,所以我创建了这个来捕获我的日志和代码
“使用 Android MediaRecorder 录制的视频在三星 Galaxy S2 上已损坏”
三星 Galaxy SIII mediaRecorder() 问题。(腐败视频)
可能的解决方案
这个 SO question and answer 似乎解决了同样的问题,但我无法使用给出的代码示例复制他们的结果; CamcorderProfile.QUALITY_HIGH 分辨率产生绿色闪烁视频
xda上有一个帖子的链接,里面有一些详细的分析