[camera_web] Release the camera stream of each available video input device (#4621)

diff --git a/packages/camera/camera_web/CHANGELOG.md b/packages/camera/camera_web/CHANGELOG.md
index 4ac140e..cfb980a 100644
--- a/packages/camera/camera_web/CHANGELOG.md
+++ b/packages/camera/camera_web/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.2.1+2
 
+* Fixes cameraNotReadable error that prevented access to the camera on some Android devices when initializing a camera.
 * Implemented support for new Dart SDKs with an async requestFullscreen API.
 
 ## 0.2.1+1
diff --git a/packages/camera/camera_web/example/integration_test/camera_web_test.dart b/packages/camera/camera_web/example/integration_test/camera_web_test.dart
index 9749559..0943d7a 100644
--- a/packages/camera/camera_web/example/integration_test/camera_web_test.dart
+++ b/packages/camera/camera_web/example/integration_test/camera_web_test.dart
@@ -374,6 +374,37 @@
         );
       });
 
+      testWidgets(
+          'releases the video stream '
+          'of a video input device', (tester) async {
+        final videoDevice = FakeMediaDeviceInfo(
+          '1',
+          'Camera 1',
+          MediaDeviceKind.videoInput,
+        );
+
+        final videoStream =
+            FakeMediaStream([MockMediaStreamTrack(), MockMediaStreamTrack()]);
+
+        when(mediaDevices.enumerateDevices).thenAnswer(
+          (_) => Future.value([videoDevice]),
+        );
+
+        when(
+          () => cameraService.getMediaStreamForOptions(
+            CameraOptions(
+              video: VideoConstraints(deviceId: videoDevice.deviceId),
+            ),
+          ),
+        ).thenAnswer((_) => Future.value(videoStream));
+
+        final _ = await CameraPlatform.instance.availableCameras();
+
+        for (var videoTrack in videoStream.getVideoTracks()) {
+          verify(videoTrack.stop).called(1);
+        }
+      });
+
       group('throws CameraException', () {
         testWidgets(
             'with notSupported error '
diff --git a/packages/camera/camera_web/lib/src/camera_web.dart b/packages/camera/camera_web/lib/src/camera_web.dart
index 5fbd820..f183b78 100644
--- a/packages/camera/camera_web/lib/src/camera_web.dart
+++ b/packages/camera/camera_web/lib/src/camera_web.dart
@@ -163,6 +163,9 @@
           cameras.add(camera);
 
           camerasMetadata[camera] = cameraMetadata;
+
+          // Release the camera stream of the current video input device.
+          videoTracks.forEach((videoTrack) => videoTrack.stop());
         } else {
           // Ignore as no video tracks exist in the current video input device.
           continue;
diff --git a/packages/camera/camera_web/pubspec.yaml b/packages/camera/camera_web/pubspec.yaml
index c75183d..2839710 100644
--- a/packages/camera/camera_web/pubspec.yaml
+++ b/packages/camera/camera_web/pubspec.yaml
@@ -2,7 +2,7 @@
 description: A Flutter plugin for getting information about and controlling the camera on Web.
 repository: https://github.com/flutter/plugins/tree/main/packages/camera/camera_web
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
-version: 0.2.1+1
+version: 0.2.1+2
 
 environment:
   sdk: ">=2.12.0 <3.0.0"