Skip to content

Commit ad0dd28

Browse files
committed
bump version for flutter-webrtc.
1 parent 8df50b8 commit ad0dd28

File tree

5 files changed

+353
-23
lines changed

5 files changed

+353
-23
lines changed

lib/src/call_sample/call_sample.dart

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class _CallSampleState extends State<CallSample> {
2020
RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
2121
bool _inCalling = false;
2222
Session? _session;
23-
23+
DesktopCapturerSource? selected_source_;
2424
bool _waitAccept = false;
2525

2626
// ignore: unused_element
@@ -30,7 +30,7 @@ class _CallSampleState extends State<CallSample> {
3030
initState() {
3131
super.initState();
3232
initRenderers();
33-
_connect();
33+
_connect(context);
3434
}
3535

3636
initRenderers() async {
@@ -46,8 +46,8 @@ class _CallSampleState extends State<CallSample> {
4646
_remoteRenderer.dispose();
4747
}
4848

49-
void _connect() async {
50-
_signaling ??= Signaling(widget.host)..connect();
49+
void _connect(BuildContext context) async {
50+
_signaling ??= Signaling(widget.host, context)..connect();
5151
_signaling?.onSignalingStateChange = (SignalingState state) {
5252
switch (state) {
5353
case SignalingState.ConnectionClosed:
@@ -71,8 +71,7 @@ class _CallSampleState extends State<CallSample> {
7171
setState(() {
7272
_inCalling = true;
7373
});
74-
}
75-
else {
74+
} else {
7675
_reject();
7776
}
7877
break;
@@ -166,8 +165,7 @@ class _CallSampleState extends State<CallSample> {
166165
onPressed: () {
167166
Navigator.of(context).pop(false);
168167
_hangUp();
169-
},
170-
168+
},
171169
),
172170
],
173171
);

lib/src/call_sample/data_channel_sample.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class _DataChannelSampleState extends State<DataChannelSample> {
2929
@override
3030
initState() {
3131
super.initState();
32-
_connect();
32+
_connect(context);
3333
}
3434

3535
@override
@@ -39,8 +39,8 @@ class _DataChannelSampleState extends State<DataChannelSample> {
3939
_timer?.cancel();
4040
}
4141

42-
void _connect() async {
43-
_signaling ??= Signaling(widget.host)..connect();
42+
void _connect(BuildContext context) async {
43+
_signaling ??= Signaling(widget.host, context)..connect();
4444

4545
_signaling?.onDataChannelMessage = (_, dc, RTCDataChannelMessage data) {
4646
setState(() {

lib/src/call_sample/signaling.dart

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import 'dart:convert';
22
import 'dart:async';
3+
import 'package:flutter/material.dart';
34
import 'package:flutter_webrtc/flutter_webrtc.dart';
45

6+
import '../utils/screen_select_dialog.dart';
57
import 'random_string.dart';
68

79
import '../utils/device_info.dart'
@@ -34,12 +36,13 @@ class Session {
3436
}
3537

3638
class Signaling {
37-
Signaling(this._host);
39+
Signaling(this._host, this._context);
3840

3941
JsonEncoder _encoder = JsonEncoder();
4042
JsonDecoder _decoder = JsonDecoder();
4143
String _selfId = randomNumeric(6);
4244
SimpleWebSocket? _socket;
45+
BuildContext? _context;
4346
var _host;
4447
var _port = 8086;
4548
var _turnCredential;
@@ -303,7 +306,8 @@ class Signaling {
303306
await _socket?.connect();
304307
}
305308

306-
Future<MediaStream> createStream(String media, bool userScreen) async {
309+
Future<MediaStream> createStream(String media, bool userScreen,
310+
{BuildContext? context}) async {
307311
final Map<String, dynamic> mediaConstraints = {
308312
'audio': userScreen ? false : true,
309313
'video': userScreen
@@ -319,22 +323,43 @@ class Signaling {
319323
'optional': [],
320324
}
321325
};
326+
late MediaStream stream;
327+
if (userScreen) {
328+
if (WebRTC.platformIsDesktop) {
329+
final source = await showDialog<DesktopCapturerSource>(
330+
context: context!,
331+
builder: (context) => ScreenSelectDialog(),
332+
);
333+
stream = await navigator.mediaDevices.getDisplayMedia(<String, dynamic>{
334+
'video': source == null
335+
? true
336+
: {
337+
'deviceId': {'exact': source.id},
338+
'mandatory': {'frameRate': 30.0}
339+
}
340+
});
341+
} else {
342+
stream = await navigator.mediaDevices.getDisplayMedia(mediaConstraints);
343+
}
344+
} else {
345+
stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
346+
}
322347

323-
MediaStream stream = userScreen
324-
? await navigator.mediaDevices.getDisplayMedia(mediaConstraints)
325-
: await navigator.mediaDevices.getUserMedia(mediaConstraints);
326348
onLocalStream?.call(stream);
327349
return stream;
328350
}
329351

330-
Future<Session> _createSession(Session? session,
331-
{required String peerId,
332-
required String sessionId,
333-
required String media,
334-
required bool screenSharing}) async {
352+
Future<Session> _createSession(
353+
Session? session, {
354+
required String peerId,
355+
required String sessionId,
356+
required String media,
357+
required bool screenSharing,
358+
}) async {
335359
var newSession = session ?? Session(sid: sessionId, pid: peerId);
336360
if (media != 'data')
337-
_localStream = await createStream(media, screenSharing);
361+
_localStream =
362+
await createStream(media, screenSharing, context: _context);
338363
print(_iceServers);
339364
RTCPeerConnection pc = await createPeerConnection({
340365
..._iceServers,

0 commit comments

Comments
 (0)