我使用以下代码设置previewcallback
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(final byte[] bytes, Camera camera) {
if (recording == true) {
count++;
Log.e("frame","frame number is "+count);
if(mThread.isAlive()) {
encode(bytes);
}
}
}
});
我还添加了10个callbackbuffer,对于oppening相机,我使用另一个线程来增加帧率:
public void newOpenCamera() {
if (mThread == null) {
mThread = new CameraHandlerThread();
}
synchronized (mThread) {
mThread.openCamera();
}
}
private static void oldOpenCamera() {
try {
c = Camera.open(1);
Camera.Parameters parameters = c.getParameters();
parameters.set("orientation", "portrait");
parameters.setJpegQuality(100);
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(640, 480);
for(int i=0;i<10;i++){
byte[] buffer = new byte[(ImageFormat.getBitsPerPixel(parameters.getPreviewFormat())*640*480)/8+1];
c.addCallbackBuffer(buffer);
}
parameters.setPreviewFrameRate(30);
parameters.setPreviewFpsRange(30000,30000);
c.setParameters(parameters);
}
catch (RuntimeException e) {
Log.e("camera", "failed to open front camera");
}
}
public CameraHandlerThread mThread = null;
public static class CameraHandlerThread extends HandlerThread {
Handler mHandler = null;
CameraHandlerThread() {
super("CameraHandlerThread");
start();
mHandler = new Handler(getLooper());
}
synchronized void notifyCameraOpened() {
notify();
}
public void openCamera() {
mHandler.post(new Runnable() {
@Override
public void run() {
oldOpenCamera();
notifyCameraOpened();
}
});
}
}
但结果没有任何变化。 onpreviewframe中的帧数约为150,视频为15秒。有没有解决方案将帧数固定为30 fps?
答案 0 :(得分:0)
我在4天前遇到过这个问题。 我知道你的问题是低fps:我做了以下,
尝试将分辨率设置为640 * 480
答案 1 :(得分:0)
如果修复fps,某些设备无法正常工作。您应该设置支持的fps范围而不是固定值。
删除:
parameters.setPreviewFpsRange(30000, 30000);
也许您可以使用以下代码:
List<int[]> supportedFPSRange = param.getSupportedPreviewFpsRange();
// fps is a range from supportedFPSRange
parameters.setPreviewFpsRange(fps[0], fps[1]);