【问题标题】:camera preview showing black screen相机预览显示黑屏
【发布时间】:2013-12-16 11:49:36
【问题描述】:

您好,我正在开发一个尝试自定义相机和视频功能的 Android 应用。问题是当我尝试返回 Videoview 中按钮的 Cameraview onClick 时,不显示预览。它只显示黑屏。

Videoview中的onClick如下

       try 
        {
            Thread.sleep(1000);
            recorder.stop();
            recorder.reset();
            recorder.release();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }

        camera.release();
        startActivity(new Intent(Video.this,Camera.class));
        finish();

从 Videoview 返回时,Cameraview 的 onSurfaceChanged 相机为 null。

@Override
public void surfaceChanged(SurfaceHolder sHolder, int format, int width, int height)
{
    Log.e("surfaceChanged","camera");
    if(camera != null)
    {
        initPreview(width, height);
        camera.startPreview();
    }


    else if(camera == null)
    {
      try
        {
           Camera camera = Camera.open(currentCameraId);

            if (holder.getSurface() == null)
            {
                return;
            }

            try
            {
                     //camera.stopPreview();

                    //camera.reconnect();
                    //camera.lock();
                    //camera.unlock();
                camera.setPreviewCallback(this);
                camera.setPreviewDisplay(holder);

            }
            catch (Exception e)
            {
            }

            initPreview(width, height);
            camera.startPreview();

        }

        catch (Exception e)
        {
            releaseCamera();
        }

不知道我哪里出错了。我无法打开相机或重新连接它。请帮忙。

谢谢!

【问题讨论】:

    标签: android android-camera surfaceview


    【解决方案1】:

    试试这个:

    1) 为 SurfaceView 设置回调。

    public CameraView(Context ctx, AttributeSet attrSet) {
            super(ctx, attrSet);
            getHolder().addCallback(cameraPreviewCallback);
            getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
    
    Camera.PreviewCallback cameraPreviewCallback = new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(byte[] data, Camera camera) {
    
            }
        };
    

    2) 启动相机

    camera = Camera.open();
    camera.setPreviewCallback(cameraPreviewCallback);   
    camera.setPreviewDisplay(getHolder());
    camera.startPreview();
    

    【讨论】:

    • holder = surface.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);我在创建时使用它。你能解释一下我需要在哪里使用 1) 和 2)
    • @AndrewDmytrenko 死链接...请更新链接
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多