8000 修改切换摄像头的方式,只使用前后切换。原因华为手机返回的摄像头数量与实际数量不符,在多次切换摄像头后会切换到不存在的摄像头上。 (#508) · philipposmisthos/flutter-webrtc@b1a44c3 · GitHub
[go: up one dir, main page]

Skip to content

Commit b1a44c3

Browse files
authored
修改切换摄像头的方式,只使用前后切换。原因华为手机返回的摄像头数量与实际数量不符,在多次切换摄像头后会切换到不存在的摄像头上。 (flutter-webrtc#508)
1 parent 96da949 commit b1a44c3

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/GetUserMediaImpl.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ private void getUserMedia(
627627
result.success(successResult.toMap());
628628
}
629629

630+
private boolean isFacing=true;
630631
private VideoTrack getUserVideo(ConstraintsMap constraints) {
631632
ConstraintsMap videoConstraintsMap = null;
632633
ConstraintsMap videoConstraintsMandatory = null;
@@ -657,7 +658,7 @@ private VideoTrack getUserVideo(ConstraintsMap constraints) {
657658
}
658659

659660
String facingMode = getFacingMode(videoConstraintsMap);
660-
boolean isFacing = facingMode == null || !facingMode.equals("environment");
661+
isFacing = facingMode == null || !facingMode.equals("environment");
661662
String sourceId = getSourceIdConstraint(videoConstraintsMap);
662663

663664
VideoCapturer videoCapturer = createVideoCapturer(cameraEnumerator, isFacing, sourceId);
@@ -761,19 +762,37 @@ void switchCamera(String id, Result result) {
761762
return;
762763
}
763764

764-
CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer) videoCapturer;
765-
cameraVideoCapturer.switchCamera(
766-
new CameraVideoCapturer.CameraSwitchHandler() {
767-
@Override
768-
public void onCameraSwitchDone(boolean b) {
769-
result.success(b);
770-
}
765+
CameraEnumerator cameraEnumerator;
771766

772-
@Override
773-
public void onCameraSwitchError(String s) {
774-
resultError("switchCamera", "Switching camera failed: " + id, result);
775-
}
776-
});
767+
if (Camera2Enumerator.isSupported(applicationContext)) {
768+
Log.d(TAG, "Creating video capturer using Camera2 API.");
769+
cameraEnumerator = new Camera2Enumerator(applicationContext);
770+
} else {
771+
Log.d(TAG, "Creating video capturer using Camera1 API.");
772+
cameraEnumerator = new Camera1Enumerator(false);
773+
}
774+
// if sourceId given, use specified sourceId first
775+
final String[] deviceNames = cameraEnumerator.getDeviceNames();
776+
for (String name : deviceNames) {
777+
if (cameraEnumerator.isFrontFacing(name) == !isFacing) {
778+
CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer) videoCapturer;
779+
cameraVideoCapturer.switchCamera(
780+
new CameraVideoCapturer.CameraSwitchHandler() {
781+
@Override
782+
public void onCameraSwitchDone(boolean b) {
783+
isFacing=!isFacing;
784+
result.success(b);
785+
}
786+
787+
@Override
788+
public void onCameraSwitchError(String s) {
789+
resultError("switchCamera", "Switching camera failed: " + id, result);
790+
}
791+
},name);
792+
return;
793+
}
794+
}
795+
resultError("switchCamera", "Switching camera failed: " + id, result);
777796
}
778797

779798
/**

0 commit comments

Comments
 (0)
0