Skip to content

Commit a3edbd5

Browse files
authored
Merge pull request #31 from flutter-webrtc/fix/dc-init-error
Fix/dc init error
2 parents 8aa3647 + dd7c8ba commit a3edbd5

File tree

4 files changed

+37
-17
lines changed

4 files changed

+37
-17
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Changelog
22

33
--------------------------------------------
4+
[1.3.2] - 2024-04-09
5+
6+
* Fix error when constructing RTCDataChannelInit.
7+
48
[1.3.1] - 2024-04-08
59

610
* Add keyRingSize/discardFrameWhenCryptorNotReady to KeyProviderOptions.

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
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dart_webrtc
22
description: Use the dart/js library to re-wrap the webrtc js interface of the browser, to adapted common browsers.
3-
version: 1.3.1
3+
version: 1.3.2
44
homepage: https://github.com/flutter-webrtc/dart-webrtc
55

66
environment:

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)