File tree 4 files changed +38
-11
lines changed
4 files changed +38
-11
lines changed Original file line number Diff line number Diff line change @@ -21,3 +21,4 @@ example/ios/Flutter/Generated.xcconfig
21
21
example /ios /Flutter /flutter_export_environment.sh
22
22
.vscode /launch.json
23
23
example /.vscode /launch.json
24
+ .dart_tool /package_config_subset
Original file line number Diff line number Diff line change @@ -53,6 +53,11 @@ class _GetDisplayMediaSampleState extends State<GetDisplayMediaSample> {
53
53
54
54
try {
55
55
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
+
56
61
_localStream = stream;
57
62
_localRenderer.srcObject = _localStream;
58
63
} catch (e) {
Original file line number Diff line number Diff line change 1
1
import 'dart:async' ;
2
+ import 'dart:collection' ;
2
3
import 'dart:html' as html;
3
4
4
5
import '../interface/media_stream.dart' ;
@@ -32,22 +33,35 @@ class MediaStreamWeb extends MediaStream {
32
33
}
33
34
}
34
35
36
+ final Map <String , MediaStreamTrack > _audioTracks = {};
37
+ final Map <String , MediaStreamTrack > _videoTracks = {};
38
+
35
39
@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
+ }
40
48
41
49
@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
+ }
46
58
47
59
@override
48
60
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
+
51
65
return super .dispose ();
52
66
}
53
67
Original file line number Diff line number Diff line change @@ -5,7 +5,14 @@ import 'dart:js' as js;
5
5
import '../interface/media_stream_track.dart' ;
6
6
7
7
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
+ }
9
16
10
17
final html.MediaStreamTrack jsTrack;
11
18
You can’t perform that action at this time.
0 commit comments