Skip to content

Commit

Permalink
optimizeVideo option
Browse files Browse the repository at this point in the history
  • Loading branch information
hiroshihorie committed Oct 27, 2021
1 parent a0a9acc commit 79a2d20
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 18 deletions.
9 changes: 9 additions & 0 deletions lib/src/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,19 @@ class ConnectOptions {
/// Default options used when publishing a audio track
final AudioPublishOptions defaultAudioPublishOptions;

/// When this is turned on, the following optimizations will be made:
/// - [RemoteTrackPublication] will be enabled/disabled based on the corresponding
/// [VideoTrackRenderer]'s visibility on screen.
/// - Re-sizing a [VideoTrackRenderer] will signal the server to send down
/// a relavant quality layer (if simulcast is enabled on the publisher)
/// defaults to true.
final bool optimizeVideo;

const ConnectOptions({
this.autoSubscribe = true,
this.defaultVideoPublishOptions = const VideoPublishOptions(),
this.defaultAudioPublishOptions = const AudioPublishOptions(),
this.optimizeVideo = true,
});
}

Expand Down
10 changes: 5 additions & 5 deletions lib/src/participant/remote_participant.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ import '../extensions.dart';
import '../logger.dart';
import '../managers/event.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../signal_client.dart';
import '../rtc_engine.dart';
import '../track/remote_track_publication.dart';
import '../track/track.dart';
import '../types.dart';
import 'participant.dart';

/// Represents other participant in the [Room].
class RemoteParticipant extends Participant {
final SignalClient _client;
SignalClient get client => _client;
final RTCEngine _engine;
RTCEngine get engine => _engine;

RemoteParticipant(
this._client,
this._engine,
String sid,
String identity, {
required EventsEmitter<RoomEvent> roomEvents,
Expand All @@ -32,7 +32,7 @@ class RemoteParticipant extends Participant {
);

RemoteParticipant.fromInfo(
this._client,
this._engine,
lk_models.ParticipantInfo info, {
required EventsEmitter<RoomEvent> roomEvents,
}) : super(
Expand Down
6 changes: 3 additions & 3 deletions lib/src/room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
final joinResponse = await engine.join(
url,
token,
options: options,
connectOptions: options,
);

logger.fine(
Expand Down Expand Up @@ -227,14 +227,14 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {

if (info == null) {
participant = RemoteParticipant(
engine.signalClient,
engine,
sid,
'',
roomEvents: events,
);
} else {
participant = RemoteParticipant.fromInfo(
engine.signalClient,
engine,
info,
roomEvents: events,
);
Expand Down
14 changes: 12 additions & 2 deletions lib/src/rtc_engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
// config for RTCPeerConnection
final RTCConfiguration? rtcConfig;

ConnectOptions connectOptions = const ConnectOptions();

@internal
PCTransport? publisher;

Expand Down Expand Up @@ -91,13 +93,21 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
Future<lk_rtc.JoinResponse> join(
String url,
String token, {
ConnectOptions? options,
ConnectOptions? connectOptions,
}) async {
this.url = url;
this.token = token;

if (connectOptions != null) {
this.connectOptions = connectOptions;
}

// connect to rtc server
await signalClient.connect(url, token, options: options);
await signalClient.connect(
url,
token,
options: this.connectOptions,
);

// wait for join response
final event = await _signalListener.waitFor<SignalConnectedEvent>(
Expand Down
5 changes: 1 addition & 4 deletions lib/src/signal_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,8 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
Future<void> connect(
String uriString,
String token, {
ConnectOptions? options,
required ConnectOptions options,
}) async {
// Create default options if null
options ??= const ConnectOptions();

final rtcUri = Utils.buildUri(
uriString,
token: token,
Expand Down
12 changes: 8 additions & 4 deletions lib/src/track/remote_track_publication.dart
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class RemoteTrackPublication extends TrackPublication {
}

logger.fine('[Visibility] Sending to server ${settings.toProto3Json()}');
_participant.client.sendUpdateTrackSettings(settings);
_participant.engine.signalClient.sendUpdateTrackSettings(settings);
}

@override
Expand All @@ -141,7 +141,11 @@ class RemoteTrackPublication extends TrackPublication {
super.track?.dispose();
super.track = newValue;

if (newValue != null && newValue.kind == lk_models.TrackType.VIDEO) {
// Only listen for visibility updates if video optimization is on
// and the attached track is a video track
if (_participant.engine.connectOptions.optimizeVideo &&
newValue != null &&
newValue.kind == lk_models.TrackType.VIDEO) {
//
// Attach visibility event listener (if video track)
//
Expand Down Expand Up @@ -223,7 +227,7 @@ class RemoteTrackPublication extends TrackPublication {
trackSids: [sid],
subscribe: subscribed,
);
_participant.client.sendUpdateSubscription(subscription);
_participant.engine.signalClient.sendUpdateSubscription(subscription);
}

void _sendUpdateTrackSettings() {
Expand All @@ -234,6 +238,6 @@ class RemoteTrackPublication extends TrackPublication {
if (kind == lk_models.TrackType.VIDEO) {
settings.quality = _videoQuality;
}
_participant.client.sendUpdateTrackSettings(settings);
_participant.engine.signalClient.sendUpdateTrackSettings(settings);
}
}

0 comments on commit 79a2d20

Please sign in to comment.