diff --git a/ring-android/app/src/main/java/cx/ring/services/CameraService.java b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
index d6d917c7df3f7dfc3d8bb1fa54ac7ae591afc573..b9f2d97a92d20a43b556daca8f48af4e5192b2df 100644
--- a/ring-android/app/src/main/java/cx/ring/services/CameraService.java
+++ b/ring-android/app/src/main/java/cx/ring/services/CameraService.java
@@ -512,7 +512,10 @@ public class CameraService {
                 }
             } catch (Exception e) {
                 Log.e(TAG, "Can't open codec", e);
-                codec = null;
+                if (codec != null) {
+                    codec.release();
+                    codec = null;
+                }
                 if (encoderInput != null) {
                     encoderInput.release();
                     encoderInput = null;
@@ -771,8 +774,12 @@ public class CameraService {
                                         @Override
                                         public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) {
                                             if (frameNumber == 1) {
-                                                codec.first.start();
-                                                codecStarted[0] = true;
+                                                try {
+                                                    codec.first.start();
+                                                    codecStarted[0] = true;
+                                                } catch (Exception e) {
+                                                    listener.onError();
+                                                }
                                             }
                                         }
                                     } : null, handler);
@@ -820,12 +827,19 @@ public class CameraService {
                     Log.w(TAG, "onClosed");
                     if (previewCamera == camera)
                         previewCamera = null;
-                    if (codec != null && codec.first != null) {
-                        if (codecStarted[0])
-                            codec.first.signalEndOfInputStream();
-                        codec.first.release();
-                        if (codec.first == currentCodec)
-                            currentCodec = null;
+                    if (codec != null) {
+                        if (codec.first != null) {
+                            if (codecStarted[0])
+                                codec.first.signalEndOfInputStream();
+                            codec.first.release();
+                            if (codec.first == currentCodec)
+                                currentCodec = null;
+                        }
+                        if (codec.second != null)
+                            codec.second.release();
+                    }
+                    if (reader != null) {
+                        reader.close();
                     }
                     s.release();
                 }
diff --git a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
index 6811d741e81760f0f52742a971d9c39394375e27..c695f70dbd8a36a6e9d7f2d24a5baa13a2a89d33 100644
--- a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
@@ -478,6 +478,10 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager
 
     @Override
     public void startCapture(@Nullable String camId) {
+        if (mIsScreenSharing) {
+            cameraService.stopScreenSharing();
+            mIsScreenSharing = false;
+        }
         mShouldCapture = true;
         if (mIsCapturing && mCapturingId != null && mCapturingId.equals(camId)) {
             return;
@@ -544,6 +548,10 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager
         Log.d(TAG, "stopCapture: " + cameraService.isOpen());
         mShouldCapture = false;
         endCapture();
+        if (mIsScreenSharing) {
+            cameraService.stopScreenSharing();
+            mIsScreenSharing = false;
+        }
     }
 
     public void requestKeyFrame() {