8000 Merge pull request #337 from wer-mathurin/cleanup · next-coder/flutter-webrtc@7b6e110 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7b6e110

Browse files
authored
Merge pull request flutter-webrtc#337 from wer-mathurin/cleanup
cleaning and fix potential concurrency issue
2 parents 7ccbd86 + b46ca25 commit 7b6e110

File tree

5 files changed

+28
-23
lines changed

5 files changed

+28
-23
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ example/.flutter-plugins
1515
example/android/local.properties
1616
.dart_tool/package_config.json
1717
android/.project
18+
example/ios/Runner/GeneratedPluginRegistrant.m
19+
example/ios/Runner/GeneratedPluginRegistrant.h
20+
example/ios/Flutter/Generated.xcconfig
21+
example/ios/Flutter/flutter_export_environment.sh

lib/src/media_stream.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import 'dart:async';
2-
import 'package:flutter/services.dart';
32
import 'media_stream_track.dart';
43
import 'utils.dart';
54

65
class MediaStream {
76
MediaStream(this._streamId, this._ownerTag);
8-
final MethodChannel _channel = WebRTC.methodChannel();
7+
final _channel = WebRTC.methodChannel();
98
final String _streamId;
109
final String _ownerTag;
1110
final _audioTracks = <MediaStreamTrack>[];

lib/src/rtc_ice_candidate.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class RTCIceCandidate {
22
RTCIceCandidate(this.candidate, this.sdpMid, this.sdpMlineIndex);
3-
String candidate;
4-
String sdpMid;
5-
int sdpMlineIndex;
3+
final String candidate;
4+
final String sdpMid;
5+
final int sdpMlineIndex;
66
dynamic toMap() {
77
return {
88
'candidate': candidate,

lib/src/rtc_video_view.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,18 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue> {
7171
MediaStream get srcObject => _srcObject;
7272

7373
set srcObject(MediaStream stream) {
74-
if (stream == null) {
75-
value = RTCVideoValue.empty;
76-
}
7774
_srcObject = stream;
7875
_channel.invokeMethod('videoRendererSetSrcObject', <String, dynamic>{
7976
'textureId': _textureId,
80-
'streamId': stream != null ? stream.id : '',
81-
'ownerTag': stream != null ? stream.ownerTag : ''
77+
'streamId': stream?.id ?? '',
78+
'ownerTag': stream?.ownerTag ?? ''
79+
}).then((_) {
80+
if (stream == null) {
81+
value = RTCVideoValue.empty;
82+
} else {
83+
value = value.copyWith(renderVideo: renderVideo);
84+
}
8285
});
83-
value = value.copyWith(renderVideo: renderVideo);
84-
notifyListeners();
8586
}
8687

8788
@override
@@ -114,7 +115,6 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue> {
114115
case 'didFirstFrameRendered':
115116
break;
116117
}
117-
notifyListeners();
118118
}
119119

120120
void errorListener(Object obj) {

lib/src/web/media_recorder.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ import 'media_stream.dart';
77
import 'media_stream_track.dart';
88

99
class MediaRecorder {
10-
String filePath;
1110
html.MediaRecorder _recorder;
12-
List<html.Blob> _chunks;
13-
Completer<dynamic> _completer;
11+
Completer<String> _completer;
1412

1513
/// For Android use audioChannel param
1614
/// For iOS use audioTrack
@@ -25,13 +23,15 @@ class MediaRecorder {
2523
}
2624

2725
/// Only for Flutter Web
28-
void startWeb(MediaStream stream,
29-
{Function(dynamic blob, bool isLastOne) onDataChunk,
30-
String mimeType = 'video/webm'}) {
26+
void startWeb(
27+
MediaStream stream, {
28+
Function(dynamic blob, bool isLastOne) onDataChunk,
29+
String mimeType = 'video/webm',
30+
}) {
3131
_recorder = html.MediaRecorder(stream.jsStream, {'mimeType': mimeType});
3232
if (onDataChunk == null) {
33-
_chunks = [];
34-
_completer = Completer();
33+
var _chunks = <html.Blob>[];
34+
_completer = Completer<String>();
3535
_recorder.addEventListener('dataavailable', (html.Event event) {
3636
final html.Blob blob = js.JsObject.fromBrowserObject(event)['data'];
3737
if (blob.size > 0) {
@@ -49,8 +49,10 @@ class MediaRecorder {
4949
});
5050
} else {
5151
_recorder.addEventListener('dataavailable', (html.Event event) {
52-
final html.Blob blob = js.JsObject.fromBrowserObject(event)['data'];
53-
onDataChunk(blob, _recorder.state == 'inactive');
52+
onDataChunk(
53+
js.JsObject.fromBrowserObject(event)['data'],
54+
_recorder.state == 'inactive',
55+
);
5456
});
5557
}
5658
_recorder.start();

0 commit comments

Comments
 (0)
0