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

Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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