我正在尝试使用MediaRecorder对象来记录我的设备上可用的最高质量的视频,即三星S2。但是使用我当前的代码,我在调用MediaRecorder.close()时看到挂起,然后手机崩溃(LOGCAT:http://pastebin.com/yzqWqta3)
当CamcorderProfile设置为QUALITY_LOW时,我有一段工作代码,但是同样的代码导致设备崩溃(需要重启电源),摄像机配置文件更改为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
原始形式的代码也导致录像机在Mediarecorder#start()
上崩溃(LOGCAT:http://pastebin.com/L2ahkj82),我不得不使用此线程中的建议来应用三星特定的修复程序;
“[问]无法在Galaxy Sii上录制Hi Def视频”;
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商店中有other apps支持1920x1080,可以从第三方(可能无法访问三星专有文档)在S2上工作,因此应该可以通过以下方式复制QUALITY_HIGH:明确设置每个参数,或者发现三星未记录的bef * 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
还有其他有关在三星S2上录制HIGH QUALITY视频的问题,但没有一个有答案,所以我创建了这个以捕捉我的日志和代码
“Video recorded with Android MediaRecorder is corrupted on Samsung Galaxy S2"
Samsung Galaxy SIII mediaRecorder() issues. (Corrupt Video)
这个问题和答案似乎解决了同样的问题,但我不能使用给出的代码示例来复制他们的结果; CamcorderProfile.QUALITY_HIGH resolution produces green flickering video
指向thread on xda的链接,其中包含一些详细的分析
答案 0 :(得分:0)
可能是您的三星S2不支持高品质!
请参阅此post
有一种方法可以迭代支持的配置文件,在设置质量之前尝试这样做。
答案 1 :(得分:0)
我设法从Shawn Every的“Android Pro Media”中获取示例代码,并在here和dicussion here
的帮助下工作主要问题是使用三星未记录的参数废话,并将PreviewSize设置为与视频帧大小相同;评论如下;
Camera.Parameters p = camera.getParameters();
// Samsung Galaxy hack for HD video
p.set("cam_mode", 1);
// It is required to set the previewSize tto the same as the Video frame height x width
p.setPreviewSize(camcorderProfile.videoFrameWidth,
camcorderProfile.videoFrameHeight);
...</snip>
camera.setParameters(p);
这是示例代码(由于此时仿真器限制,它只能在真实设备上运行)
https://github.com/tolland/Custom-Video-Capture-with-Preview
生成具有这些属性的文件;
$ mplayer -vo null -ao null -frames 0 -identify videocapture-2024713075.3gp | egrep "(ID_VID)"
...
ID_VIDEO_ID=0
ID_VIDEO_FORMAT=H264
ID_VIDEO_BITRATE=13773800
ID_VIDEO_WIDTH=1920
ID_VIDEO_HEIGHT=1080
ID_VIDEO_FPS=24.750
ID_VIDEO_ASPECT=1.7778
ID_VIDEO_CODEC=ffh264