AndroidUSBCamera icon indicating copy to clipboard operation
AndroidUSBCamera copied to clipboard

surface should be one of SurfaceHolder, Surface or SurfaceTexture: null

Open tsubasa-kun opened this issue 4 years ago • 9 comments

布局和类文件都是按照你的源码照搬写出来的,可是每次运行都会报错崩溃,就是报“java.lang.IllegalArgumentException: surface should be one of SurfaceHolder, Surface or SurfaceTexture: null”,我一直没找到问题所在,请问知道这是什么原因吗?

tsubasa-kun avatar Jun 23 '20 17:06 tsubasa-kun

请问这个问题解决了吗?我也遇到了相同的问题

Paircheng avatar Jul 13 '20 01:07 Paircheng

请问这个问题解决了吗?我也遇到了相同的问题

这个原版的我没找到解决办法,我从别的项目里扒了一个用的

tsubasa-kun avatar Jul 13 '20 01:07 tsubasa-kun

请问这个问题解决了吗?我也遇到了相同的问题

这个原版的我没找到解决办法,我从别的项目里扒了一个用的

请问一下是如何解决的呢?

Paircheng avatar Jul 18 '20 10:07 Paircheng

请问这个问题解决了吗?我也遇到了相同的问题

这个原版的我没找到解决办法,我从别的项目里扒了一个用的

请问一下是如何解决的呢?

从别人的可运行的项目,把引用的库复制下来。没有用这个

tsubasa-kun avatar Jul 24 '20 05:07 tsubasa-kun

You can download the source code as ZIP, create a module and see the source in Android studio. Then, search this "surface should be one of SurfaceHolder" in the source, you will know the reason.

Pls make sure your interface video-display is an expected view, you can not start preview in another view.

quocnhat7 avatar Aug 14 '20 07:08 quocnhat7

有解决的吗?demo运行没问题,但是我把USBCameraActivity都复制到自己的项目就不行了,build文件啥的都照着demo来的,还是不行

Huan2015 avatar Jan 14 '21 07:01 Huan2015

找到问题了,Manifest中application下边配置了android:hardwareAccelerated="false" android:largeHeap="true"

Huan2015 avatar Jan 14 '21 09:01 Huan2015

Any solution to this problem?

KanwalKhan-20 avatar Apr 28 '21 05:04 KanwalKhan-20

找到问题了,Manifest中application下边配置了android:hardwareAccelerated="false" android:largeHeap="true"

应该是demo写得有问题,我这边是重启设备有时才会抛这个异常然后奔溃一次,initUSBMonitor 里面自动执行了预览,但是Surface此时又为null。没等它创建完就调用预览了。我修改了执行顺序就没问题了:

mCameraHelper = UVCCameraHelper.getInstance();
        mCameraHelper.setDefaultFrameFormat(UVCCameraHelper.FRAME_FORMAT_MJPEG);
        if (mCameraHelper.getUSBMonitor() == null) {
            mUVCCameraView = view.findViewById(R.id.cameraView);
            mUVCCameraView.setCallback(new CameraViewInterface.Callback() {
                @Override
                public void onSurfaceCreated(CameraViewInterface view, Surface surface) {
                    Log.d(TAG, "camera surface created");
                    mCameraHelper.initUSBMonitor(requireActivity(), view, cameraListener);  // 在这里初始化usb
                    mCameraHelper.registerUSB();
                }

                @Override
                public void onSurfaceChanged(CameraViewInterface view, Surface surface, int width, int height) {
                    Log.d(TAG, "camera surface changed");
                }

                @Override
                public void onSurfaceDestroy(CameraViewInterface view, Surface surface) {
                    Log.d(TAG, "camera surface destroy");
                }
            });
        }

aieyes avatar Feb 25 '22 06:02 aieyes