From 044606223e2f717630725deeba4963d407e1bc13 Mon Sep 17 00:00:00 2001 From: CloudWebRTC Date: Wed, 7 Sep 2022 15:15:32 +0800 Subject: [PATCH] Expose RTPReceiver for getting track statistics. (#162) --- lib/src/core/room.dart | 1 + lib/src/participant/remote.dart | 11 +++++++---- lib/src/track/remote/audio.dart | 11 +++++------ lib/src/track/remote/remote.dart | 12 +++++------- lib/src/track/remote/video.dart | 11 +++++------ lib/src/track/track.dart | 12 +++++------- 6 files changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/src/core/room.dart b/lib/src/core/room.dart index 64ef845..8fe5d5f 100644 --- a/lib/src/core/room.dart +++ b/lib/src/core/room.dart @@ -289,6 +289,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable { event.track, event.stream, trackSid, + receiver: event.receiver, ); } on TrackSubscriptionExceptionEvent catch (event) { logger.severe('addSubscribedMediaTrack() throwed ${event}'); diff --git a/lib/src/participant/remote.dart b/lib/src/participant/remote.dart index 5e33e2c..7f8d24b 100644 --- a/lib/src/participant/remote.dart +++ b/lib/src/participant/remote.dart @@ -74,8 +74,9 @@ class RemoteParticipant extends Participant { Future addSubscribedMediaTrack( rtc.MediaStreamTrack mediaTrack, rtc.MediaStream stream, - String trackSid, - ) async { + String trackSid, { + rtc.RTCRtpReceiver? receiver, + }) async { logger.fine('addSubscribedMediaTrack()'); // If publication doesn't exist yet... @@ -112,10 +113,12 @@ class RemoteParticipant extends Participant { final RemoteTrack track; if (pub.kind == lk_models.TrackType.VIDEO) { // video track - track = RemoteVideoTrack(pub.name, pub.source, stream, mediaTrack); + track = RemoteVideoTrack(pub.name, pub.source, stream, mediaTrack, + receiver: receiver); } else if (pub.kind == lk_models.TrackType.AUDIO) { // audio track - track = RemoteAudioTrack(pub.name, pub.source, stream, mediaTrack); + track = RemoteAudioTrack(pub.name, pub.source, stream, mediaTrack, + receiver: receiver); } else { throw UnexpectedStateException('Unknown track type'); } diff --git a/lib/src/track/remote/audio.dart b/lib/src/track/remote/audio.dart index fc38088..95376b3 100644 --- a/lib/src/track/remote/audio.dart +++ b/lib/src/track/remote/audio.dart @@ -12,17 +12,16 @@ import '../web/_audio_api.dart' if (dart.library.html) '../web/_audio_html.dart' class RemoteAudioTrack extends RemoteTrack with AudioTrack, RemoteAudioManagementMixin { // - RemoteAudioTrack( - String name, - TrackSource source, - rtc.MediaStream stream, - rtc.MediaStreamTrack track, - ) : super( + RemoteAudioTrack(String name, TrackSource source, rtc.MediaStream stream, + rtc.MediaStreamTrack track, + {rtc.RTCRtpReceiver? receiver}) + : super( name, lk_models.TrackType.AUDIO, source, stream, track, + receiver: receiver, ); @override diff --git a/lib/src/track/remote/remote.dart b/lib/src/track/remote/remote.dart index f2ff548..e42916d 100644 --- a/lib/src/track/remote/remote.dart +++ b/lib/src/track/remote/remote.dart @@ -5,18 +5,16 @@ import '../../types/other.dart'; import '../track.dart'; abstract class RemoteTrack extends Track { - RemoteTrack( - String name, - lk_models.TrackType kind, - TrackSource source, - rtc.MediaStream stream, - rtc.MediaStreamTrack track, - ) : super( + RemoteTrack(String name, lk_models.TrackType kind, TrackSource source, + rtc.MediaStream stream, rtc.MediaStreamTrack track, + {rtc.RTCRtpReceiver? receiver}) + : super( name, kind, source, stream, track, + receiver: receiver, ); @override diff --git a/lib/src/track/remote/video.dart b/lib/src/track/remote/video.dart index cb81ced..7124405 100644 --- a/lib/src/track/remote/video.dart +++ b/lib/src/track/remote/video.dart @@ -7,16 +7,15 @@ import 'remote.dart'; class RemoteVideoTrack extends RemoteTrack with VideoTrack { // - RemoteVideoTrack( - String name, - TrackSource source, - rtc.MediaStream stream, - rtc.MediaStreamTrack track, - ) : super( + RemoteVideoTrack(String name, TrackSource source, rtc.MediaStream stream, + rtc.MediaStreamTrack track, + {rtc.RTCRtpReceiver? receiver}) + : super( name, lk_models.TrackType.VIDEO, source, stream, track, + receiver: receiver, ); } diff --git a/lib/src/track/track.dart b/lib/src/track/track.dart index f737e16..0e66d9b 100644 --- a/lib/src/track/track.dart +++ b/lib/src/track/track.dart @@ -45,13 +45,11 @@ abstract class Track extends DisposableChangeNotifier rtc.RTCRtpSender? get sender => transceiver?.sender; - Track( - this.name, - this.kind, - this.source, - this._mediaStream, - this._mediaStreamTrack, - ) { + rtc.RTCRtpReceiver? receiver; + + Track(this.name, this.kind, this.source, this._mediaStream, + this._mediaStreamTrack, + {this.receiver}) { // Any event emitted will trigger ChangeNotifier events.listen((event) { logger.fine('[TrackEvent] $event, will notifyListeners()');