Facing this issue while implementing WebRTC in Android:
Caused by: java.lang.RuntimeException: CameraCapturer must be initialized before calling startCapture.
build.gradle(:app)
dependencies { ...... implementation 'org.webrtc:google-webrtc:1.0.+' ...... }
// Chunk causing problem:
private void getVideoSource() { // isScreenCast = false videoSource = peerConnectionFactory.createVideoSource(false); surfaceTextureHelper = SurfaceTextureHelper.create(Thread.currentThread().getName(), rootEglBase.getEglBaseContext()); VideoCapturer videoCapturer = createCameraCapturer(new Camera1Enumerator(false)); localVideoTrack = peerConnectionFactory.createVideoTrack("200", videoSource); localVideoTrack.addSink(local_renderer); if(videoCapturer != null) videoCapturer.startCapture(1000,1000,30); // <- Here is the Exception }
CameraCapturer is deprecated. There is Camera1Capturer now available.
Advertisement
Answer
You need to initialise before you use it
private void getVideoSource() { VideoCapturer videoCapturer = createVideoCapturer(); VideoSource videoSource; //Create a VideoSource instance if (videoCapturer != null) { SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", rootEglBase.getEglBaseContext()); videoSource = factory.createVideoSource(videoCapturer.isScreencast()); videoCapturer.initialize(surfaceTextureHelper, this, videoSource.getCapturerObserver()); } localVideoTrack = factory.createVideoTrack("100", videoSource); //Create MediaConstraints - Will be useful for specifying video and audio constraints. audioConstraints = new MediaConstraints(); videoConstraints = new MediaConstraints(); //create an AudioSource instance audioSource = factory.createAudioSource(audioConstraints); localAudioTrack = factory.createAudioTrack("101", audioSource); if (videoCapturer != null) { videoCapturer.startCapture(1024, 720, 30); } binding.localGlSurfaceView.setVisibility(View.VISIBLE); // And finally, with our VideoRenderer ready, we // can add our renderer to the VideoTrack. localVideoTrack.addSink(binding.localGlSurfaceView); }