10000 Add onEnded for Web (#387) · coder-wuyan/flutter-webrtc@0f7ac57 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0f7ac57

Browse files
authored
Add onEnded for Web (flutter-webrtc#387)
Add onMuted for Web Modify example to add comments
1 parent de9e757 commit 0f7ac57

File tree

4 files changed

+38
-11
lines changed

4 files changed

+38
-11
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ example/ios/Flutter/Generated.xcconfig
2121
example/ios/Flutter/flutter_export_environment.sh
2222
.vscode/launch.json
2323
example/.vscode/launch.json
24+
.dart_tool/package_config_subset

example/lib/src/get_display_media_sample.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ class _GetDisplayMediaSampleState extends State<GetDisplayMediaSample> {
5353

5454
try {
5555
var stream = await navigator.getDisplayMedia(mediaConstraints);
56+
stream.getVideoTracks()[0].onEnded = () {
57+
print(
58+
'By adding a listener on onEnded you can: 1) catch stop video sharing on Web');
59+
};
60+
5661
_localStream = stream;
5762
_localRenderer.srcObject = _localStream;
5863
} catch (e) {

lib/src/web/media_stream_impl.dart

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:async';
2+
import 'dart:collection';
23
import 'dart:html' as html;
34

45
import '../interface/media_stream.dart';
@@ -32,22 +33,35 @@ class MediaStreamWeb extends MediaStream {
3233
}
3334
}
3435

36+
final Map<String, MediaStreamTrack> _audioTracks = {};
37+
final Map<String, MediaStreamTrack> _videoTracks = {};
38+
3539
@override
36-
List<MediaStreamTrack> getAudioTracks() => jsStream
37-
.getAudioTracks()
38-
.map((jsTrack) => MediaStreamTrackWeb(jsTrack))
39-
.toList();
40+
List<MediaStreamTrack> getAudioTracks() {
41+
jsStream.getAudioTracks().forEach((jsTrack) => _audioTracks.putIfAbsent(
42+
jsTrack.id,
43+
() => MediaStreamTrackWeb(jsTrack),
44+
));
45+
46+
return _audioTracks.values.toList();
47+
}
4048

4149
@override
42-
List<MediaStreamTrack> getVideoTracks() => jsStream
43-
.getVideoTracks()
44-
.map((jsTrack) => MediaStreamTrackWeb(jsTrack))
45-
.toList();
50+
List<MediaStreamTrack> getVideoTracks() {
51+
jsStream.getVideoTracks().forEach((jsTrack) => _videoTracks.putIfAbsent(
52+
jsTrack.id,
53+
() => MediaStreamTrackWeb(jsTrack),
54+
));
55+
56+
return _videoTracks.values.toList();
57+
}
4658

4759
@override
4860
Future<void> dispose() async {
49-
jsStream.getAudioTracks().forEach((track) => track.stop());
50-
jsStream.getVideoTracks().forEach((track) => track.stop());
61+
getTracks().forEach((element) {
62+
element.dispose();
63+
});
64+
5165
return super.dispose();
5266
}
5367

lib/src/web/media_stream_track_impl.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@ import 'dart:js' as js;
55
import '../interface/media_stream_track.dart';
66

77
class MediaStreamTrackWeb extends MediaStreamTrack {
8-
MediaStreamTrackWeb(this.jsTrack);
8+
MediaStreamTrackWeb(this.jsTrack) {
9+
jsTrack.onEnded.listen((event) {
10+
onEnded?.call();
11+
});
12+
jsTrack.onMute.listen((event) {
13+
onMute?.call();
14+
});
15+
}
916

1017
final html.MediaStreamTrack jsTrack;
1118

0 commit comments

Comments
 (0)
0