optimizeVideo option

This commit is contained in:
Hiroshi Horie
2021-10-28 02:57:15 +09:00
parent a0a9acc9d9
commit 79a2d20702
6 changed files with 38 additions and 18 deletions
+9
View File
@@ -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,
});
}
+5 -5
View File
@@ -9,7 +9,7 @@ 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';
@@ -17,11 +17,11 @@ 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,
@@ -32,7 +32,7 @@ class RemoteParticipant extends Participant {
);
RemoteParticipant.fromInfo(
this._client,
this._engine,
lk_models.ParticipantInfo info, {
required EventsEmitter<RoomEvent> roomEvents,
}) : super(
+3 -3
View File
@@ -119,7 +119,7 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
final joinResponse = await engine.join(
url,
token,
options: options,
connectOptions: options,
);
logger.fine(
@@ -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,
);
+12 -2
View File
@@ -30,6 +30,8 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
// config for RTCPeerConnection
final RTCConfiguration? rtcConfig;
ConnectOptions connectOptions = const ConnectOptions();
@internal
PCTransport? publisher;
@@ -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>(
+1 -4
View File
@@ -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,
+8 -4
View File
@@ -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
@@ -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)
//
@@ -223,7 +227,7 @@ class RemoteTrackPublication extends TrackPublication {
trackSids: [sid],
subscribe: subscribed,
);
_participant.client.sendUpdateSubscription(subscription);
_participant.engine.signalClient.sendUpdateSubscription(subscription);
}
void _sendUpdateTrackSettings() {
@@ -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);
}
}