我正试图使用MediaRecorder对象以我的设备三星S2上的最高质量录制视频。但是,用我当前的代码,我在调用MediaRecorder.close()时会看到挂起,然后电话崩溃(LOGCAT:http://pastebin.com/yzqWqta3)
当CamcorderProfile设置为QUALITY_LOW时,我有一段代码可以工作,但是相同的代码会导致设备崩溃(需要功率循环才能恢复),而Camcorder配置文件被更改为QUALITY_HIGH。
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);然后将其设置为记录器对象;
recorder.setProfile(camcorderProfile);但是,以下内容会在调用MediaRecorder.stop()之后引发崩溃;
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);我的代码是基于这个项目(来自Android guy - Shawn ) https://github.com/vanevery/Custom-Video-Capture-with-Preview.git的。
原始格式的代码还导致记录器在Mediarecorder#start()上崩溃(LOGCAT:Mediarecorder#start()),我不得不使用这个线程中的建议来应用三星的特定修复程序;“q不能在Galaxy上录制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一般支持的QUALITY_HIGH检查设备支持
这款股票相机应用程序支持在1920x1080年录制它称之为“超精细”的东西,但分辨率是显式设定的,我想合适的参数是从已知的良好设置中推断出来的,而不是从QUALITY_HIGH CamcorderProfile中推断出来的。
然而,游戏商店中有支持1920x1080的其他应用程序,第三方(可能无法访问三星的专有文档)在S2上工作,因此应该可以通过显式设置每个参数来复制QUALITY_HIGH,或者揭露三星的无端嘲弄。
设备内省
三星SII似乎支持使用QUALITY_HIGH;
Log.v(LOGTAG, "has Profile QUALITY HIGH? : "+
CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH));返回这个;
V/VIDEOCAPTURE( 7897): has Profile QUALITY HIGH? : trueAndroid文档表明,"QUALITY_HIGH“是一个预定义的概要文件,表示与最高可用分辨率相对应的级别。
int QUALITY_HIGH质量级别对应于最高的可用分辨率。
高
备注
相关的SO问题
还有其他与在三星S2上录制高质量视频有关的问题,但是没有一个有答案,所以我创建了这个来捕捉我的日志和代码。
"用Android MediaRecorder录制的视频在三星Galaxy S2上被破坏“
可能解决办法
这个问题和答案似乎解决了同样的问题,但我不能使用给出的代码示例来复制它们的结果;高分辨率产生绿色闪烁视频
有一个指向xda上的线程的链接,其中有一些详细的分析。
发布于 2013-11-06 12:23:45
我设法从Shawn的"Android“中获得了示例代码,得到了这里和这里的一点帮助
主要的问题是使用三星无文件的参数垃圾,和设置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发布于 2013-11-06 09:01:09
https://stackoverflow.com/questions/19807643
复制相似问题