ess*_*sse 24 video camera android
在使用Camera.PreviewCallback实现时,初始化相机并开始预览(Camera.startPrevew())后,onPreviewFrame会被无故障地调用.问题是,如果我使用MediaRecorder onPreviewFrame进行视频录制,则不再调用.
据我所知,当使用MediaRecorder录制视频时会停止Camera.PreviewCallback,但为什么不能重启?
我曾尝试重置相机预览回调(setPreviewCallback(回调))并重新启动startPreview,但同时我有一个预览出现到onPreviewFrame没有呼叫.
Neo*_*gma 16
您必须在surfaceChanged方法中调用setPreviewCallback,而不仅仅是在surfaceCreated中.
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mHolder.getSurface() == null){
return;
}
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
try {
mCamera.setPreviewCallback(this);
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d(TAG, "Error starting camera preview: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*yld 10
我有类似的问题; 看到
setOneShotPreviewCallback没有在回调中击中onPreviewFrame()
我发现在调用Camera#unlock()准备之后MediaRecorder,必须Camera#reconnect()在设置预览回调之前调用.这是因为Camera.unlock()将摄像机与进程分离MediaRecorder以使其连接.
http://developer.android.com/reference/android/hardware/Camera.html#unlock()
在我的调查中,我还发现如果使用除单击方法之外的其他方法设置任何预览回调,则必须在调用之后重置所有这些Camera#reconnect().简而言之:
mCamera.unlock();
//set up MediaRecorder
mCamera.reconnect();
mCamera.setPreviewCallback(mCallback);
//or whatever callback method you want to use
//and even if you've set this callback already
Run Code Online (Sandbox Code Playgroud)
我希望有所帮助!
您应该在 PreviewCallBacks() 接口的新实例中调用它,如下所示
public void surfaceCreated(SurfaceHolder holder) {
// if (mediaRecorder == null) {
try {
camera = Camera.open();
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] _data, Camera _camera) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14693 次 |
| 最近记录: |