使用一些使用相机的apks(例如,zxing,opencv)会发生这种情况。它在预览中显示一个闪烁的图像,但它仍然是相机看到的功能,因此它似乎是编码不匹配。本机相机预览工作正常,因此内部应用程序不会出现此问题。
答案 0 :(得分:32)
目前,请在获取Camera
之后但在设置并开始预览之前尝试添加以下解决方法:
Camera.Parameters params = camera.getParameters();
params.setPreviewFpsRange(30000, 30000);
camera.setParameters(params);
(或者,如果您正在设置其他参数,只需将setPreviewFpsRange
调用添加到现有参数中。)
答案 1 :(得分:8)
对于在Glass上使用ZXing的任何人,您可以使用上述修复从源代码构建一个版本。
将以下方法添加到CameraConfigurationManager.java
中 public void googleGlassXE10WorkAround(Camera mCamera) {
Camera.Parameters params = mCamera.getParameters();
params.setPreviewFpsRange(30000, 30000);
params.setPreviewSize(640,360);
mCamera.setParameters(params);
}
在ZXing代码中看到Camera.setParameters()的任何地方之后立即调用此方法。我只是将它放在CameraConfigurationManager中的两个位置,它就可以了。
我将预览尺寸设置为640x360以匹配玻璃分辨率。
答案 2 :(得分:4)
30 FPS预览非常高。如果您想节省一些电池和CPU,请考虑支持最慢的FPS就足够了:
List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
int[] minimumPreviewFpsRange = supportedPreviewFpsRanges.get(0);
parameters.setPreviewFpsRange(minimumPreviewFpsRange[0], minimumPreviewFpsRange[1]);
答案 3 :(得分:1)
从XE16和XE16.11开始,该错误仍然存在,但此代码超出了故障并显示了正常的相机预览,请注意三个参数设置行及其值。我也在5000(5FPS)测试了它,它工作,并在60000(60FPS),它不起作用:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mCamera == null) return;
Camera.Parameters camParameters = mCamera.getParameters();
camParameters.setPreviewFpsRange(30000, 30000);
camParameters.setPreviewSize(1920, 1080);
camParameters.setPictureSize(2592, 1944);
mCamera.setParameters(camParameters);
try {
mCamera.startPreview();
} catch (Exception e) {
mCamera.release();
mCamera = null;
}
}
答案 4 :(得分:0)
从XE22开始这仍然是一个问题(!)将每秒帧数降低到30或更低就可以了:
parameters.setPreviewFpsRange(30000, 30000);
事实上,不要忘记设置参数:
camera.setParameters(parameters);
由于支持的fps范围中包含60 fps,因此我没有找到解释为何会导致问题的明确解释。该视频可以录制720p,但我从未看到过该源添加fps。
答案 5 :(得分:-2)
您可以设置params.setPreviewSize(1200,800)
。您可以更改此范围内的值,直到您可以清除颜色噪音。