Skip to content

Commit fcf476c

Browse files
committed
Adaptive when answering audio or video calls.
1 parent ed75f3e commit fcf476c

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

example/lib/src/callscreen.dart

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:async';
2+
23
import 'package:flutter/foundation.dart';
34
import 'package:flutter/material.dart';
45
import 'package:flutter_webrtc/flutter_webrtc.dart';
@@ -152,11 +153,20 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
152153
@override
153154
void registrationStateChanged(RegistrationState state) {}
154155

156+
void _cleanUp() {
157+
_localStream?.getTracks()?.forEach((track) {
158+
track.stop();
159+
});
160+
_localStream.dispose();
161+
_localStream = null;
162+
}
163+
155164
void _backToDialPad() {
156165
_timer.cancel();
157166
Timer(Duration(seconds: 2), () {
158167
Navigator.of(context).pop();
159168
});
169+
_cleanUp();
160170
}
161171

162172
void _handelStreams(CallState event) async {
@@ -165,7 +175,7 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
165175
if (_localRenderer != null) {
166176
_localRenderer.srcObject = stream;
167177
}
168-
if (!kIsWeb) {
178+
if (!kIsWeb && !WebRTC.platformIsDesktop) {
169179
event.stream?.getAudioTracks()?.first?.enableSpeakerphone(false);
170180
}
171181
_localStream = stream;
@@ -200,22 +210,27 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
200210
}
201211

202212
void _handleAccept() async {
203-
final mediaConstraints = <String, dynamic>{'audio': true, 'video': true};
213+
bool remote_has_video = call.remote_has_video;
214+
final mediaConstraints = <String, dynamic>{
215+
'audio': true,
216+
'video': remote_has_video
217+
};
204218
MediaStream mediaStream;
205219

206-
if (kIsWeb && !voiceonly) {
220+
if (kIsWeb && remote_has_video) {
207221
mediaStream =
208222
await navigator.mediaDevices.getDisplayMedia(mediaConstraints);
209223
mediaConstraints['video'] = false;
210224
MediaStream userStream =
211225
await navigator.mediaDevices.getUserMedia(mediaConstraints);
212226
mediaStream.addTrack(userStream.getAudioTracks()[0], addToNative: true);
213227
} else {
214-
mediaConstraints['video'] = !voiceonly;
228+
mediaConstraints['video'] = remote_has_video;
215229
mediaStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
216230
}
217231

218-
call.answer(helper.buildCallOptions(), mediaStream: mediaStream);
232+
call.answer(helper.buildCallOptions(!remote_has_video),
233+
mediaStream: mediaStream);
219234
}
220235

221236
void _switchCamera() {

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ environment:
88

99
dependencies:
1010
crypto: ^3.0.0
11-
flutter_webrtc: ^0.6.5
11+
flutter_webrtc: ^0.6.7
1212
intl: any
1313
logger: ^1.0.0
1414
parser_error: ^0.2.0
1515
path: ^1.6.4
1616
random_string: ^2.0.0
1717
recase: ^4.0.0
18-
sdp_transform: ^0.3.0
18+
sdp_transform: ^0.3.2
1919
uuid: ^3.0.2
2020

2121

0 commit comments

Comments
 (0)