Skip to content

Commit 6e19669

Browse files
committed
fix data channel init error.
1 parent 8aa3647 commit 6e19669

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

lib/src/rtc_peerconnection_impl.dart

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@ import 'package:dart_webrtc/dart_webrtc.dart';
88
import 'package:js/js_util.dart';
99
import 'package:platform_detect/platform_detect.dart';
1010
import 'package:web/web.dart' as web;
11-
import 'package:webrtc_interface/webrtc_interface.dart';
1211

13-
import 'media_stream_impl.dart';
1412
import 'media_stream_track_impl.dart';
1513
import 'rtc_data_channel_impl.dart';
1614
import 'rtc_dtmf_sender_impl.dart';
1715
import 'rtc_rtp_receiver_impl.dart';
1816
import 'rtc_rtp_sender_impl.dart';
1917
import 'rtc_rtp_transceiver_impl.dart';
2018

19+
extension on web.RTCDataChannelInit {
20+
external set binaryType(String value);
21+
}
22+
2123
/*
2224
* PeerConnection
2325
*/
@@ -395,21 +397,29 @@ class RTCPeerConnectionWeb extends RTCPeerConnection {
395397
@override
396398
Future<RTCDataChannel> createDataChannel(
397399
String label, RTCDataChannelInit dataChannelDict) {
398-
final map = dataChannelDict.toMap();
400+
var dcInit = web.RTCDataChannelInit(
401+
id: dataChannelDict.id,
402+
ordered: dataChannelDict.ordered,
403+
protocol: dataChannelDict.protocol,
404+
negotiated: dataChannelDict.negotiated,
405+
);
406+
399407
if (dataChannelDict.binaryType == 'binary') {
400-
map['binaryType'] = 'arraybuffer'; // Avoid Blob in data channel
408+
dcInit.binaryType = 'arraybuffer'; // Avoid Blob in data channel
409+
}
410+
411+
if (dataChannelDict.maxRetransmits > 0) {
412+
dcInit.maxRetransmits = dataChannelDict.maxRetransmits;
413+
}
414+
415+
if (dataChannelDict.maxRetransmitTime > 0) {
416+
dcInit.maxPacketLifeTime = dataChannelDict.maxRetransmitTime;
401417
}
402418

403419
final jsDc = _jsPc.createDataChannel(
404-
label,
405-
web.RTCDataChannelInit(
406-
id: map['id'],
407-
ordered: map['ordered'],
408-
maxPacketLifeTime: map['maxPacketLifeTime'],
409-
maxRetransmits: map['maxRetransmits'],
410-
protocol: map['protocol'],
411-
negotiated: map['negotiated'],
412-
));
420+
label,
421+
dcInit,
422+
);
413423

414424
return Future.value(RTCDataChannelWeb(jsDc));
415425
}

web/main.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,17 @@ void loopBackTest() async {
7676
algorithm: Algorithm.kAesGcm,
7777
keyProvider: keyProvider);
7878
if (keyProviderOptions.discardFrameWhenCryptorNotReady) {
79-
Timer(Duration(seconds: 2), () {
79+
Timer(Duration(seconds: 1), () {
8080
fc.setEnabled(true);
8181
});
8282
} else {
8383
await fc.setEnabled(true);
8484
}
8585

8686
await fc.setKeyIndex(0);
87-
await fc.updateCodec('vp8');
87+
if (event.track.kind == 'video') {
88+
await fc.updateCodec('vp8');
89+
}
8890
pc2FrameCryptors.add(fc);
8991
};
9092
pc2.onConnectionState = (state) {
@@ -138,7 +140,9 @@ void loopBackTest() async {
138140
keyProvider: keyProvider);
139141
await fc.setEnabled(true);
140142
await fc.setKeyIndex(0);
141-
await fc.updateCodec('vp8');
143+
if (track.kind == 'video') {
144+
await fc.updateCodec('vp8');
145+
}
142146
pc1FrameCryptors.add(fc);
143147
});
144148
/*
@@ -163,6 +167,8 @@ void loopBackTest() async {
163167
}
164168
});
165169
*/
170+
var dc = await pc1.createDataChannel(
171+
'label', RTCDataChannelInit()..binaryType = 'binary');
166172
var offer = await pc1.createOffer();
167173

168174
await pc2.addTransceiver(

0 commit comments

Comments
 (0)