Skip to content

Commit 1ca6adc

Browse files
committed
release: 1.5.3+hotfix.3.
1 parent 3e5cf30 commit 1ca6adc

File tree

4 files changed

+66
-123
lines changed

4 files changed

+66
-123
lines changed

CHANGELOG.md

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

66
* Media recording changes.
77

8+
[1.5.3+hotfix.3] - 2025-07-24
9+
10+
* fixed E2EE issue for Chrome.
11+
812
[1.5.3+hotfix.2] - 2025-04-25
913

1014
* fix bug for dc.onMessage.

lib/src/frame_cryptor_impl.dart

Lines changed: 59 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -20,70 +20,6 @@ class WorkerResponse {
2020
dynamic data;
2121
}
2222

23-
extension RtcRtpReceiverExt on web.RTCRtpReceiver {
24-
static Map<int, web.ReadableStream> readableStreams_ = {};
25-
static Map<int, web.WritableStream> writableStreams_ = {};
26-
27-
web.ReadableStream? get readable {
28-
if (readableStreams_.containsKey(hashCode)) {
29-
return readableStreams_[hashCode]!;
30-
}
31-
return null;
32-
}
33-
34-
web.WritableStream? get writable {
35-
if (writableStreams_.containsKey(hashCode)) {
36-
return writableStreams_[hashCode]!;
37-
}
38-
return null;
39-
}
40-
41-
set readableStream(web.ReadableStream stream) {
42-
readableStreams_[hashCode] = stream;
43-
}
44-
45-
set writableStream(web.WritableStream stream) {
46-
writableStreams_[hashCode] = stream;
47-
}
48-
49-
void closeStreams() {
50-
readableStreams_.remove(hashCode);
51-
writableStreams_.remove(hashCode);
52-
}
53-
}
54-
55-
extension RtcRtpSenderExt on web.RTCRtpSender {
56-
static Map<int, web.ReadableStream> readableStreams_ = {};
57-
static Map<int, web.WritableStream> writableStreams_ = {};
58-
59-
web.ReadableStream? get readable {
60-
if (readableStreams_.containsKey(hashCode)) {
61-
return readableStreams_[hashCode]!;
62-
}
63-
return null;
64-
}
65-
66-
web.WritableStream? get writable {
67-
if (writableStreams_.containsKey(hashCode)) {
68-
return writableStreams_[hashCode]!;
69-
}
70-
return null;
71-
}
72-
73-
set readableStream(web.ReadableStream stream) {
74-
readableStreams_[hashCode] = stream;
75-
}
76-
77-
set writableStream(web.WritableStream stream) {
78-
writableStreams_[hashCode] = stream;
79-
}
80-
81-
void closeStreams() {
82-
readableStreams_.remove(hashCode);
83-
writableStreams_.remove(hashCode);
84-
}
85-
}
86-
8723
class FrameCryptorImpl extends FrameCryptor {
8824
FrameCryptorImpl(
8925
this._factory, this.worker, this._participantId, this._trackId,
@@ -452,7 +388,7 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
452388
required KeyProvider keyProvider}) {
453389
var jsReceiver = (receiver as RTCRtpReceiverWeb).jsRtpReceiver;
454390

455-
var trackId = jsReceiver.hashCode.toString();
391+
var trackId = jsReceiver.track.id;
456392
var kind = jsReceiver.track.kind;
457393

458394
if (web.window.hasProperty('RTCRtpScriptTransform'.toJS).toDart) {
@@ -469,33 +405,35 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
469405

470406
jsReceiver.transform = web.RTCRtpScriptTransform(worker, options.jsify());
471407
} else {
472-
var writable = jsReceiver.writable;
473-
var readable = jsReceiver.readable;
474-
var exist = true;
475-
if (writable == null || readable == null) {
476-
final streams =
477-
jsReceiver.callMethod<JSObject>('createEncodedStreams'.toJS);
478-
readable = streams.getProperty('readable'.toJS) as web.ReadableStream;
479-
jsReceiver.readableStream = readable;
480-
writable = streams.getProperty('writable'.toJS) as web.WritableStream;
481-
jsReceiver.writableStream = writable;
482-
exist = false;
483-
}
408+
var exist = false;
409+
final streams =
410+
jsReceiver.callMethod<JSObject>('createEncodedStreams'.toJS);
411+
final readable =
412+
streams.getProperty('readable'.toJS) as web.ReadableStream;
413+
final writable =
414+
streams.getProperty('writable'.toJS) as web.WritableStream;
415+
484416
var msgId = randomString(12);
485-
worker.postMessage(
486-
{
487-
'msgType': 'decode',
488-
'msgId': msgId,
489-
'keyProviderId': (keyProvider as KeyProviderImpl).id,
490-
'kind': kind,
491-
'exist': exist,
492-
'participantId': participantId,
493-
'trackId': trackId,
494-
'readableStream': readable,
495-
'writableStream': writable
496-
}.jsify(),
497-
[readable, writable].jsify() as JSObject,
498-
);
417+
try {
418+
worker.postMessage(
419+
{
420+
'msgType': 'decode',
421+
'msgId': msgId,
422+
'keyProviderId': (keyProvider as KeyProviderImpl).id,
423+
'kind': kind,
424+
'exist': exist,
425+
'participantId': participantId,
426+
'trackId': trackId,
427+
'options': keyProvider.options.toJson(),
428+
'readableStream': readable,
429+
'writableStream': writable
430+
}.jsify(),
431+
[readable, writable] as JSObject,
432+
);
433+
} catch (e) {
434+
print('Error posting message: $e');
435+
rethrow;
436+
}
499437
}
500438
FrameCryptor cryptor = FrameCryptorImpl(
501439
this, worker, participantId, trackId,
@@ -529,39 +467,42 @@ class FrameCryptorFactoryImpl implements FrameCryptorFactory {
529467
print('object: ${options['keyProviderId']}');
530468
jsSender.transform = web.RTCRtpScriptTransform(worker, options.jsify());
531469
} else {
532-
var writable = jsSender.writable;
533-
var readable = jsSender.readable;
534-
var exist = true;
535-
if (writable == null || readable == null) {
536-
final streams =
537-
jsSender.callMethod<JSObject>('createEncodedStreams'.toJS);
538-
readable = streams.getProperty('readable'.toJS) as web.ReadableStream;
539-
jsSender.readableStream = readable;
540-
writable = streams.getProperty('writable'.toJS) as web.WritableStream;
541-
542-
exist = false;
543-
}
470+
var exist = false;
471+
final streams =
472+
jsSender.callMethod<JSObject>('createEncodedStreams'.toJS);
473+
final readable =
474+
streams.getProperty('readable'.toJS) as web.ReadableStream;
475+
final writable =
476+
streams.getProperty('writable'.toJS) as web.WritableStream;
477+
544478
var msgId = randomString(12);
545-
worker.postMessage(
546-
{
547-
'msgType': 'encode',
548-
'msgId': msgId,
549-
'keyProviderId': (keyProvider as KeyProviderImpl).id,
550-
'kind': kind,
551-
'exist': exist,
552-
'participantId': participantId,
553-
'trackId': trackId,
554-
'options': keyProvider.options.toJson(),
555-
'readableStream': readable,
556-
'writableStream': writable
557-
}.jsify(),
558-
[readable, writable].jsify() as JSObject,
559-
);
479+
480+
try {
481+
worker.postMessage(
482+
{
483+
'msgType': 'encode',
484+
'msgId': msgId,
485+
'keyProviderId': (keyProvider as KeyProviderImpl).id,
486+
'kind': kind,
487+
'exist': exist,
488+
'participantId': participantId,
489+
'trackId': trackId,
490+
'options': keyProvider.options.toJson(),
491+
'readableStream': readable,
492+
'writableStream': writable
493+
}.jsify(),
494+
[readable, writable] as JSObject,
495+
);
496+
} catch (e) {
497+
print('Error posting message: $e');
498+
rethrow;
499+
}
560500
}
561501
FrameCryptor cryptor = FrameCryptorImpl(
562502
this, worker, participantId, trackId,
563503
jsSender: jsSender, keyProvider: keyProvider);
564504
_frameCryptors[trackId] = cryptor;
505+
565506
return Future.value(cryptor);
566507
}
567508

pubspec.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
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.4
3+
version: 1.5.3+hotfix.3
44
homepage: https://github.com/flutter-webrtc/dart-webrtc
55

66
environment:
77
sdk: '>=3.3.0 <4.0.0'
88

99
dependencies:
1010
collection: ^1.17.1
11-
js: ">0.6.0 <0.8.0"
1211
logging: ^1.1.0
1312
meta: ^1.8.0
1413
synchronized: ^3.0.0+3
@@ -22,4 +21,4 @@ dev_dependencies:
2221
import_sorter: ^4.6.0
2322
pedantic: ^1.9.0
2423
protoo_client: ^0.3.0
25-
test: ^1.15.4
24+
test: ^1.15.4

web/main.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ void loopBackTest() async {
254254
key: Uint8List.fromList('testkey2'.codeUnits));
255255
256256
*/
257-
/*
257+
258258
Timer.periodic(Duration(seconds: 1), (timer) async {
259259
var senders = await pc1.getSenders();
260260
var receivers = await pc2.getReceivers();
@@ -276,5 +276,4 @@ void loopBackTest() async {
276276
});
277277
});
278278
});
279-
*/
280279
}

0 commit comments

Comments
 (0)