8000 switchCamera method now returns future with isFrontCamera as result · linuxerwang/flutter-webrtc@8ce85c0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8ce85c0

Browse files
committed
switchCamera method now returns future with isFrontCamera as result
Requested in issue flutter-webrtc#68
1 parent c8ece80 commit 8ce85c0

File tree

6 files changed

+33
-23
lines changed

6 files changed

+33
-23
lines changed

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

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ public void onMethodCall(MethodCall call, Result result) {
278278
result.success(null);
279279
} else if (call.method.equals("mediaStreamTrackSwitchCamera")) {
280280
String trackId = call.argument("trackId");
281-
mediaStreamTrackSwitchCamera(trackId, result);
281+
getUserMediaImpl.switchCamera(trackId, result);
282282
} else if (call.method.equals("setVolume")) {
283283
String trackId = call.argument("trackId");
284284
double volume = call.argument("volume");
@@ -803,16 +803,6 @@ public void mediaStreamTrackSetEnabled(final String id, final boolean enabled) {
803803
track.setEnabled(enabled);
804804
}
805805

806-
public void mediaStreamTrackSwitchCamera(final String id, Result result) {
807-
MediaStreamTrack track = localTracks.get(id);
808-
if (track != null) {
809-
getUserMediaImpl.switchCamera(id);
810-
result.success(null);
811-
}else{
812-
result.error("mediaStreamTrackSwitchCameraFailed", "mediaStreamTrackSwitchCamera() track is null", null);
813-
}
814-
}
815-
816806
public void mediaStreamTrackSetVolume(final String id, final double volume) {
817807
MediaStreamTrack track = localTracks.get(id);
818808
if (track != null && track instanceof AudioTrack) {

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,12 +737,23 @@ public void invoke(String[] permissions_, int[] grantResults) {
737737
callback);
738738
}
739739

740-
void switchCamera(String id) {
740+
void switchCamera(String id, Result result) {
741741
VideoCapturer videoCapturer = mVideoCapturers.get(id);
742742
if (videoCapturer != null) {
743743
CameraVideoCapturer cameraVideoCapturer
744744
= (CameraVideoCapturer) videoCapturer;
745-
cameraVideoCapturer.switchCamera(null);
745+
cameraVideoCapturer.switchCamera(new CameraVideoCapturer.CameraSwitchHandler() {
746+
@Override
747+
public void onCameraSwitchDone(boolean b) {
748+
result.success(b);
749+
}
750+
@Override
751+
public void onCameraSwitchError(String s) {
752+
result.error("Switching camera failed", s, null);
753+
}
754+
});
755+
} else {
756+
result.error("Video capturer not found for id: " + id, null, null);
746757
}
747758
}
748759

ios/Classes/FlutterRTCMediaStream.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
-(void)getSources:(FlutterResult)result;
1313

14-
-(void)mediaStreamTrackSwitchCamera:(RTCMediaStreamTrack *)track;
14+
-(void)mediaStreamTrackSwitchCamera:(RTCMediaStreamTrack *)track
15+
result:(FlutterResult) result;
1516
@end
1617

1718

ios/Classes/FlutterRTCMediaStream.m

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ -(void)mediaStreamTrackSetEnabled:(RTCMediaStreamTrack *)track : (BOOL)enabled
473473
}
474474
}
475475

476-
-(void)mediaStreamTrackSwitchCamera:(RTCMediaStreamTrack *)track
476+
-(void)mediaStreamTrackSwitchCamera:(RTCMediaStreamTrack *)track result:(FlutterResult)result
477477
{
478478
if (!self.videoCapturer) {
479479
NSLog(@"Video capturer is null. Can't switch camera");
@@ -483,7 +483,13 @@ -(void)mediaStreamTrackSwitchCamera:(RTCMediaStreamTrack *)track
483483
AVCaptureDevicePosition position = self._usingFrontCamera ? AVCaptureDevicePositionFront : AVCaptureDevicePositionBack;
484484
AVCaptureDevice *videoDevice = [self findDeviceForPosition:position];
485485
AVCaptureDeviceFormat *selectedFormat = [self selectFormatForDevice:videoDevice];
486-
[self.videoCapturer startCaptureWithDevice:videoDevice format:selectedFormat fps:[self selectFpsForFormat:selectedFormat]];
486+
[self.videoCapturer startCaptureWithDevice:videoDevice format:selectedFormat fps:[self selectFpsForFormat:selectedFormat] completionHandler:^(NSError* error){
487+
if (error != nil) {
488+
result([FlutterError errorWithCode:@"Error while switching camera" message:@"Error while switching camera" details:error]);
489+
} else {
490+
result([NSNumber numberWithBool:self._usingFrontCamera]);
491+
}
492+
}];
487493
}
488494

489495
-(void)mediaStreamTrackStop:(RTCMediaStreamTrack *)track

ios/Classes/FlutterWebRTCPlugin.m

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,15 +342,14 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult) result
342342
RTCMediaStreamTrack *track = self.localTracks[trackId];
343343
if (track != nil && [track isKindOfClass:[RTCVideoTrack class]]) {
344344
RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
345-
[self mediaStreamTrackSwitchCamera:videoTrack];
345+
[self mediaStreamTrackSwitchCamera:videoTrack result:result];
346346
} else {
347347
if (track == nil) {
348-
NSLog(@"Track is nil");
348+
result([FlutterError errorWithCode:@"Track is nil" message:nil details:nil]);
349349
} else {
350-
NSLog([@"Track is class of " stringByAppendingString:[[track class] description]]);
350+
result([FlutterError errorWithCode:[@"Track is class of " stringByAppendingString:[[track class] description]] message:nil details:nil]);
351351
}
352352
}
353-
result(nil);
354353
}else if ([@"setVolume" isEqualToString:call.method]){
355354
NSDictionary* argsMap = call.arguments;
356355
NSString* trackId = argsMap[@"trackId"];

lib/media_stream_track.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:async';
2+
13
import 'package:flutter/services.dart';
24
import 'utils.dart';
35

@@ -21,12 +23,13 @@ class MediaStreamTrack {
2123
String get kind => _kind;
2224
String get id => _trackId;
2325

24-
void switchCamera() async {
25-
await _channel.invokeMethod(
26+
///Future contains isFrontCamera
27+
///Throws error if switching camera failed
28+
Future<bool> switchCamera() =>
29+
_channel.invokeMethod(
2630
'mediaStreamTrackSwitchCamera',
2731
<String, dynamic>{'trackId': _trackId},
2832
);
29-
}
3033

3134
void setVolume(double volume) async {
3235
await _channel.invokeMethod(

0 commit comments

Comments
 (0)
0