Skip to content

Commit 5c8b485

Browse files
committed
Add getTurnCredential.
1 parent 7238d6a commit 5c8b485

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

lib/src/call_sample/signaling.dart

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:convert';
22
import 'dart:async';
3+
import 'dart:io';
34
import 'package:flutter_webrtc/webrtc.dart';
45
import 'random_string.dart';
56

@@ -30,6 +31,8 @@ typedef void DataChannelMessageCallback(
3031
typedef void DataChannelCallback(RTCDataChannel dc);
3132

3233
class Signaling {
34+
JsonEncoder _encoder = new JsonEncoder();
35+
JsonDecoder _decoder = new JsonDecoder();
3336
String _selfId = randomNumeric(6);
3437
SimpleWebSocket _socket;
3538
var _sessionId;
@@ -38,6 +41,7 @@ class Signaling {
3841
var _peerConnections = new Map<String, RTCPeerConnection>();
3942
var _dataChannels = new Map<String, RTCDataChannel>();
4043
var _remoteCandidates = [];
44+
var _turnCredential;
4145

4246
MediaStream _localStream;
4347
List<MediaStream> _remoteStreams;
@@ -100,6 +104,17 @@ class Signaling {
100104
if (_socket != null) _socket.close();
101105
}
102106

107+
getTurnCredential(String host) async {
108+
var httpClient = new HttpClient();
109+
var uri = new Uri.http('$host', '/api/turn',
110+
{'service': 'turn', 'username': 'flutter-webrtc'});
111+
var request = await httpClient.getUrl(uri);
112+
var response = await request.close();
113+
var responseBody = await response.transform(Utf8Decoder()).join();
114+
Map data = _decoder.convert(responseBody);
115+
return data;
116+
}
117+
103118
void switchCamera() {
104119
if (_localStream != null) {
105120
_localStream.getVideoTracks()[0].switchCamera();
@@ -263,6 +278,28 @@ class Signaling {
263278

264279
print('connect to $url');
265280

281+
if (_turnCredential == null) {
282+
try {
283+
_turnCredential = await getTurnCredential(_host);
284+
/*{
285+
"username": "1584195784:mbzrxpgjys",
286+
"password": "isyl6FF6nqMTB9/ig5MrMRUXqZg",
287+
"ttl": 86400,
288+
"uris": ["turn:127.0.0.1:19302?transport=udp"]
289+
}
290+
*/
291+
_iceServers = {
292+
'iceServers': [
293+
{
294+
'url': _turnCredential['uris'][0],
295+
'username': _turnCredential['username'],
296+
'credential': _turnCredential['password']
297+
},
298+
]
299+
};
300+
} catch (e) {}
301+
}
302+
266303
_socket.onOpen = () {
267304
print('onOpen');
268305
this?.onStateChange(SignalingState.ConnectionOpen);
@@ -405,7 +442,6 @@ class Signaling {
405442
var request = new Map();
406443
request["type"] = event;
407444
request["data"] = data;
408-
JsonEncoder encoder = new JsonEncoder();
409-
_socket.send(encoder.convert(request));
445+
_socket.send(_encoder.convert(request));
410446
}
411447
}

0 commit comments

Comments
 (0)