Dynacast (#62)

* signal

* engine

* dynacast option

* implement

* update for non simulcast

* use low when rid is null

* firefox comment
This commit is contained in:
Hiroshi Horie
2022-01-03 09:02:06 +07:00
committed by GitHub
parent 44a42eafea
commit ea5c324328
8 changed files with 100 additions and 6 deletions
+2
View File
@@ -600,6 +600,8 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
..on<SignalConnectionQualityUpdateEvent>((event) => events.emit(event))
// relay
..on<SignalStreamStateUpdatedEvent>((event) => events.emit(event))
// relay to Room
..on<SignalSubscribedQualityUpdatedEvent>((event) => events.emit(event))
..on<SignalLeaveEvent>((event) async {
if (connectionState == ConnectionState.reconnecting) {
logger.warning('Received leave signal while engine is reconnecting.');
+19
View File
@@ -56,6 +56,10 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
/// sid of the room
String? sid;
/// Server version
String? get serverVersion => _serverVersion;
String? _serverVersion;
List<Participant> _activeSpeakers = [];
/// a list of participants that are actively speaking, including local participant.
@@ -109,6 +113,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
sid = joinResponse.room.sid;
name = joinResponse.room.name;
_serverVersion = joinResponse.serverVersion;
logger.fine(
'Connected to LiveKit server, version: ${joinResponse.serverVersion}');
@@ -168,6 +173,20 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
await publication?.unmute();
}
})
..on<SignalSubscribedQualityUpdatedEvent>((event) {
// Signal for Dynacast
final options = roomOptions ?? const RoomOptions();
// Dynacast is off or is unsupported
if (!options.dynacast || _serverVersion == '0.15.1') return;
// Find the publication
final publication = localParticipant?.trackPublications[event.trackSid];
if (publication == null) {
logger.warning(
'Received subscribed quality update for unknown track (${event.trackSid})');
return;
}
publication.updatePublishingLayers(event.updates);
})
..on<EngineTrackAddedEvent>((event) async {
logger.fine('EngineTrackAddedEvent trackSid:${event.track.id}');
+6
View File
@@ -180,6 +180,12 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
updates: msg.streamStateUpdate.streamStates,
));
break;
case lk_rtc.SignalResponse_Message.subscribedQualityUpdate:
events.emit(SignalSubscribedQualityUpdatedEvent(
trackSid: msg.subscribedQualityUpdate.trackSid,
updates: msg.subscribedQualityUpdate.subscribedQualities,
));
break;
default:
logger.warning('skipping unsupported signal message');
}