Skip to content

Commit 439c8ef

Browse files
committed
release: 1.5.2.
1 parent b870a58 commit 439c8ef

8 files changed

+106
-50
lines changed

CHANGELOG.md

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

33
--------------------------------------------
44

5+
[1.5.2] - 2025-02-23.
6+
7+
* fix stats for web.
8+
59
[1.5.1] - 2025-02-15
610

711
* fix E2EE for firefox.

lib/src/rtc_data_channel_impl.dart

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,29 @@ class RTCDataChannelWeb extends RTCDataChannel {
88
RTCDataChannelWeb(this._jsDc) {
99
stateChangeStream = _stateChangeController.stream;
1010
messageStream = _messageController.stream;
11-
_jsDc.addEventListener(
12-
'close',
13-
(web.Event _) {
14-
_state = RTCDataChannelState.RTCDataChannelClosed;
15-
_stateChangeController.add(_state);
16-
onDataChannelState?.call(_state);
17-
}.toJS,
18-
false.toJS);
19-
_jsDc.addEventListener(
20-
'open',
21-
(web.Event _) {
22-
_state = RTCDataChannelState.RTCDataChannelOpen;
23-
_stateChangeController.add(_state);
24-
onDataChannelState?.call(_state);
25-
}.toJS,
26-
false.toJS);
27-
_jsDc.addEventListener(
28-
'message',
29-
(web.MessageEvent event) {
30-
_parse(event.data).then((msg) {
31-
_messageController.add(msg);
32-
onMessage?.call(msg);
33-
});
34-
}.toJS,
35-
false.toJS);
36-
_jsDc.addEventListener(
37-
'bufferedamountlow',
38-
(web.Event _) {
39-
onBufferedAmountLow?.call(bufferedAmount ?? 0);
40-
}.toJS,
41-
false.toJS);
11+
12+
_jsDc.onclose = (web.Event _) {
13+
_state = RTCDataChannelState.RTCDataChannelClosed;
14+
_stateChangeController.add(_state);
15+
onDataChannelState?.call(_state);
16+
}.toJS;
17+
18+
_jsDc.onopen = (web.Event _) {
19+
_state = RTCDataChannelState.RTCDataChannelOpen;
20+
_stateChangeController.add(_state);
21+
onDataChannelState?.call(_state);
22+
}.toJS;
23+
24+
_jsDc.onmessage = (web.MessageEvent event) {
25+
_parse(event.data.dartify()).then((msg) {
26+
_messageController.add(msg);
27+
onMessage?.call(msg);
28+
});
29+
}.toJS;
30+
31+
_jsDc.onbufferedamountlow = (web.Event _) {
32+
onBufferedAmountLow?.call(bufferedAmount ?? 0);
33+
}.toJS;
4234
}
4335

4436
final web.RTCDataChannel _jsDc;

lib/src/rtc_peerconnection_impl.dart

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'dart:async';
2+
import 'dart:collection';
23
import 'dart:js_interop';
4+
import 'dart:js_interop_unsafe';
35

46
import 'package:dart_webrtc/dart_webrtc.dart';
57
import 'package:platform_detect/platform_detect.dart';
@@ -321,10 +323,20 @@ class RTCPeerConnectionWeb extends RTCPeerConnection {
321323
}
322324

323325
var report = <StatsReport>[];
324-
stats.forEach((key, value) {
325-
report.add(
326-
StatsReport(value['id'], value['type'], value['timestamp'], value));
327-
});
326+
stats.callMethodVarArgs('forEach'.toJS, [
327+
(JSObject value, JSAny key) {
328+
var map = value.dartify() as LinkedHashMap<Object?, Object?>;
329+
var stats = <String, dynamic>{};
330+
for (var entry in map.entries) {
331+
stats[(entry.key as JSString).toDart] = entry.value;
332+
}
333+
report.add(StatsReport(
334+
value.getProperty<JSString>('id'.toJS).toDart,
335+
value.getProperty<JSString>('type'.toJS).toDart,
336+
value.getProperty<JSNumber>('timestamp'.toJS).toDartDouble,
337+
stats));
338+
}.jsify()
339+
]);
328340
return report;
329341
}
330342

lib/src/rtc_rtp_parameters_impl.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,17 @@ class RTCHeaderExtensionWeb {
7070
class RTCRtpEncodingWeb {
7171
static RTCRtpEncoding fromJsObject(web.RTCRtpEncodingParameters object) {
7272
return RTCRtpEncoding.fromMap({
73-
'rid': object.rid,
73+
'rid': object.getProperty<JSString?>('rid'.toJS)?.toDart,
7474
'active': object.active,
75-
'maxBitrate': object.maxBitrate,
76-
'maxFramerate': object.maxFramerate.toInt(),
75+
'maxBitrate': object.getProperty<JSNumber?>('maxBitrate'.toJS)?.toDartInt,
76+
'maxFramerate':
77+
object.getProperty<JSNumber?>('maxFramerate'.toJS)?.toDartInt,
7778
'minBitrate': object.getProperty<JSNumber?>('minBitrate'.toJS)?.toDartInt,
7879
'numTemporalLayers':
7980
object.getProperty<JSNumber?>('numTemporalLayers'.toJS)?.toDartInt,
80-
'scaleResolutionDownBy': object.scaleResolutionDownBy,
81+
'scaleResolutionDownBy': object
82+
.getProperty<JSNumber?>('scaleResolutionDownBy'.toJS)
83+
?.toDartDouble,
8184
'ssrc': object.getProperty<JSString?>('ssrc'.toJS)?.toDart
8285
});
8386
}

lib/src/rtc_rtp_receiver_impl.dart

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import 'dart:collection';
12
import 'dart:js_interop';
3+
import 'dart:js_interop_unsafe';
24

35
import 'package:web/web.dart' as web;
46
import 'package:webrtc_interface/webrtc_interface.dart';
@@ -14,12 +16,22 @@ class RTCRtpReceiverWeb extends RTCRtpReceiver {
1416

1517
@override
1618
Future<List<StatsReport>> getStats() async {
17-
var stats = (await _jsRtpReceiver.getStats().toDart) as JSObject;
19+
var stats = await _jsRtpReceiver.getStats().toDart;
1820
var report = <StatsReport>[];
19-
(stats.dartify() as Map).forEach((key, value) {
20-
report.add(
21-
StatsReport(value['id'], value['type'], value['timestamp'], value));
22-
});
21+
stats.callMethodVarArgs('forEach'.toJS, [
22+
(JSObject value, JSAny key) {
23+
var map = value.dartify() as LinkedHashMap<Object?, Object?>;
24+
var stats = <String, dynamic>{};
25+
for (var entry in map.entries) {
26+
stats[(entry.key as JSString).toDart] = entry.value;
27+
}
28+
report.add(StatsReport(
29+
value.getProperty<JSString>('id'.toJS).toDart,
30+
value.getProperty<JSString>('type'.toJS).toDart,
31+
value.getProperty<JSNumber>('timestamp'.toJS).toDartDouble,
32+
stats));
33+
}.jsify()
34+
]);
2335
return report;
2436
}
2537

lib/src/rtc_rtp_sender_impl.dart

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:async';
2+
import 'dart:collection';
23
import 'dart:js_interop';
34
import 'dart:js_interop_unsafe';
45

@@ -85,10 +86,20 @@ class RTCRtpSenderWeb extends RTCRtpSender {
8586
Future<List<StatsReport>> getStats() async {
8687
var stats = await _jsRtpSender.getStats().toDart;
8788
var report = <StatsReport>[];
88-
(stats.dartify() as Map<String, dynamic>).forEach((key, value) {
89-
report.add(
90-
StatsReport(value['id'], value['type'], value['timestamp'], value));
91-
});
89+
stats.callMethodVarArgs('forEach'.toJS, [
90+
(JSObject value, JSAny key) {
91+
var map = value.dartify() as LinkedHashMap<Object?, Object?>;
92+
var stats = <String, dynamic>{};
93+
for (var entry in map.entries) {
94+
stats[(entry.key as JSString).toDart] = entry.value;
95+
}
96+
report.add(StatsReport(
97+
value.getProperty<JSString>('id'.toJS).toDart,
98+
value.getProperty<JSString>('type'.toJS).toDart,
99+
value.getProperty<JSNumber>('timestamp'.toJS).toDartDouble,
100+
stats));
101+
}.jsify()
102+
]);
92103
return report;
93104
}
94105

pubspec.yaml

Lines changed: 2 additions & 2 deletions
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.5.1
3+
version: 1.5.2
44
homepage: https://github.com/flutter-webrtc/dart-webrtc
55

66
environment:
@@ -11,7 +11,7 @@ dependencies:
1111
js: ">0.6.0 <0.8.0"
1212
logging: ^1.1.0
1313
meta: ^1.8.0
14-
platform_detect: ^2.1.0
14+
platform_detect: ^2.1.5
1515
synchronized: ^3.0.0+3
1616
web: ^1.0.0
1717
webrtc_interface: ^1.2.1

web/main.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,26 @@ void loopBackTest() async {
254254
key: Uint8List.fromList('testkey2'.codeUnits));
255255
256256
*/
257+
258+
Timer.periodic(Duration(seconds: 1), (timer) async {
259+
var senders = await pc1.getSenders();
260+
var receivers = await pc2.getReceivers();
261+
262+
print('senders: ${senders.length}');
263+
print('receivers: ${receivers.length}');
264+
265+
senders.forEach((sender) {
266+
sender.getStats().then((stats) {
267+
print(
268+
'sender stats: ${stats.map((e) => 'id: ${e.id}, type: ${e.type}, timestamp: ${e.timestamp}, values: ${e.values.toString()} ')}');
269+
});
270+
});
271+
272+
receivers.forEach((receiver) {
273+
receiver.getStats().then((stats) {
274+
print(
275+
'receiver stats: ${stats.map((e) => 'id: ${e.id}, type: ${e.type}, timestamp: ${e.timestamp}, values: ${e.values.toString()} ')}');
276+
});
277+
});
278+
});
257279
}

0 commit comments

Comments
 (0)