Skip to content

Commit 05800e7

Browse files
authored
fix: Fixed confusing room options causing settings to overwrite. (#570)
* fix: Fixed confusing room options causing settings to overwrite. * if publishOptions.videoEncoding is not specified, use the default encoding * fix. * revert changes. * Change VideoParameters.encoding to optional. * update. * Deprecate some APIs in Room. * update. * update. * Update build.yaml * update. * Update build.yaml
1 parent c0c4140 commit 05800e7

File tree

10 files changed

+67
-42
lines changed

10 files changed

+67
-42
lines changed

.github/workflows/build.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ jobs:
2929
- uses: actions/checkout@v2
3030
- uses: actions/setup-java@v1
3131
with:
32-
java-version: '12.x'
32+
java-version: '17.x'
3333
- uses: actions/checkout@v2
3434
- uses: subosito/flutter-action@v2
3535
with:
3636
channel: 'stable'
3737
- name: Install project dependencies
3838
run: flutter pub get
39+
- name: Upgrade to major versions
40+
run: flutter pub upgrade --major-versions
3941
- name: Dart Format Check
4042
run: dart format lib/ test/ --set-exit-if-changed
4143
- name: Import Sorter Check

example/lib/pages/prejoin.dart

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,15 @@ class _PreJoinPageState extends State<PreJoinPage> {
165165

166166
try {
167167
//create new room
168-
final room = Room();
168+
var cameraEncoding = VideoEncoding(
169+
maxBitrate: 5 * 1000 * 1000,
170+
maxFramerate: 30,
171+
);
169172

170-
// Create a Listener before connecting
171-
final listener = room.createListener();
173+
var screenEncoding = VideoEncoding(
174+
maxBitrate: 3 * 1000 * 1000,
175+
maxFramerate: 15,
176+
);
172177

173178
E2EEOptions? e2eeOptions;
174179
if (args.e2ee && args.e2eeKey != null) {
@@ -177,36 +182,43 @@ class _PreJoinPageState extends State<PreJoinPage> {
177182
await keyProvider.setKey(args.e2eeKey!);
178183
}
179184

180-
// Try to connect to the room
181-
// This will throw an Exception if it fails for any reason.
182-
await room.connect(
183-
args.url,
184-
args.token,
185+
final room = Room(
185186
roomOptions: RoomOptions(
186187
adaptiveStream: args.adaptiveStream,
187188
dynacast: args.dynacast,
188189
defaultAudioPublishOptions: const AudioPublishOptions(
189190
name: 'custom_audio_track_name',
190191
),
192+
defaultCameraCaptureOptions: CameraCaptureOptions(
193+
maxFrameRate: 30,
194+
params: VideoParameters(
195+
dimensions: const VideoDimensions(1280, 720),
196+
)),
197+
defaultScreenShareCaptureOptions: const ScreenShareCaptureOptions(
198+
useiOSBroadcastExtension: true,
199+
params: VideoParameters(
200+
dimensions: VideoDimensionsPresets.h1080_169,
201+
)),
191202
defaultVideoPublishOptions: VideoPublishOptions(
192203
simulcast: args.simulcast,
193204
videoCodec: args.preferredCodec,
194205
backupVideoCodec: BackupVideoCodec(
195206
enabled: args.enableBackupVideoCodec,
196207
),
208+
videoEncoding: cameraEncoding,
209+
screenShareEncoding: screenEncoding,
197210
),
198-
defaultScreenShareCaptureOptions: const ScreenShareCaptureOptions(
199-
useiOSBroadcastExtension: true,
200-
params: VideoParameters(
201-
dimensions: VideoDimensionsPresets.h1080_169,
202-
encoding: VideoEncoding(
203-
maxBitrate: 3 * 1000 * 1000,
204-
maxFramerate: 15,
205-
))),
206-
defaultCameraCaptureOptions: CameraCaptureOptions(
207-
maxFrameRate: 30, params: _selectedVideoParameters),
208211
e2eeOptions: e2eeOptions,
209212
),
213+
);
214+
// Create a Listener before connecting
215+
final listener = room.createListener();
216+
217+
// Try to connect to the room
218+
// This will throw an Exception if it fails for any reason.
219+
await room.connect(
220+
args.url,
221+
args.token,
210222
fastConnectOptions: FastConnectOptions(
211223
microphone: TrackOption(track: _audioTrack),
212224
camera: TrackOption(track: _videoTrack),

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ dependencies:
2929
dev_dependencies:
3030
flutter_test:
3131
sdk: flutter
32-
flutter_lints: ^3.0.2
32+
flutter_lints: ^4.0.0
3333

3434
# The following section is specific to Flutter.
3535
flutter:

lib/src/core/engine.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
100100
String? url;
101101
String? token;
102102

103-
ConnectOptions connectOptions;
103+
late ConnectOptions connectOptions;
104104
RoomOptions roomOptions;
105105
FastConnectOptions? fastConnectOptions;
106106

@@ -143,7 +143,6 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
143143
}
144144

145145
Engine({
146-
required this.connectOptions,
147146
required this.roomOptions,
148147
SignalClient? signalClient,
149148
PeerConnectionCreate? peerConnectionCreate,

lib/src/core/room.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
111111
late EventsListener<SignalEvent> _signalListener;
112112

113113
Room({
114+
@Deprecated('deprecated, please use connectOptions in room.connect()')
114115
ConnectOptions connectOptions = const ConnectOptions(),
115116
RoomOptions roomOptions = const RoomOptions(),
116117
Engine? engine,
117118
}) : engine = engine ??
118119
Engine(
119-
connectOptions: connectOptions,
120120
roomOptions: roomOptions,
121121
) {
122122
//
@@ -152,10 +152,12 @@ class Room extends DisposableChangeNotifier with EventsEmittable<RoomEvent> {
152152
String url,
153153
String token, {
154154
ConnectOptions? connectOptions,
155+
@Deprecated('deprecated, please use roomOptions in Room constructor')
155156
RoomOptions? roomOptions,
156157
FastConnectOptions? fastConnectOptions,
157158
}) async {
158-
roomOptions ??= this.roomOptions;
159+
var roomOptions = this.roomOptions;
160+
connectOptions ??= ConnectOptions();
159161
if (roomOptions.e2eeOptions != null) {
160162
if (!lkPlatformSupportsE2EE()) {
161163
throw LiveKitE2EEException('E2EE is not supported on this platform');

lib/src/options.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ class VideoPublishOptions extends PublishOptions {
229229
/// Defaults to null.
230230
final VideoEncoding? videoEncoding;
231231

232+
final VideoEncoding? screenShareEncoding;
233+
232234
/// Whether to enable simulcast or not.
233235
/// https://blog.livekit.io/an-introduction-to-webrtc-simulcast-6c5f1f6402eb
234236
/// Defaults to true.
@@ -249,6 +251,7 @@ class VideoPublishOptions extends PublishOptions {
249251
super.stream,
250252
this.videoCodec = defaultVideoCodec,
251253
this.videoEncoding,
254+
this.screenShareEncoding,
252255
this.simulcast = true,
253256
this.videoSimulcastLayers = const [],
254257
this.screenShareSimulcastLayers = const [],
@@ -258,6 +261,7 @@ class VideoPublishOptions extends PublishOptions {
258261

259262
VideoPublishOptions copyWith({
260263
VideoEncoding? videoEncoding,
264+
VideoEncoding? screenShareEncoding,
261265
bool? simulcast,
262266
List<VideoParameters>? videoSimulcastLayers,
263267
List<VideoParameters>? screenShareSimulcastLayers,
@@ -270,6 +274,7 @@ class VideoPublishOptions extends PublishOptions {
270274
}) =>
271275
VideoPublishOptions(
272276
videoEncoding: videoEncoding ?? this.videoEncoding,
277+
screenShareEncoding: screenShareEncoding ?? this.screenShareEncoding,
273278
simulcast: simulcast ?? this.simulcast,
274279
videoSimulcastLayers: videoSimulcastLayers ?? this.videoSimulcastLayers,
275280
screenShareSimulcastLayers:

lib/src/types/video_parameters.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import 'video_encoding.dart';
2121
class VideoParameters implements Comparable<VideoParameters> {
2222
final String? description;
2323
final VideoDimensions dimensions;
24-
final VideoEncoding encoding;
24+
final VideoEncoding? encoding;
2525

2626
const VideoParameters({
27-
this.description,
2827
required this.dimensions,
29-
required this.encoding,
28+
this.description,
29+
this.encoding,
3030
});
3131

3232
// ----------------------------------------------------------------------
@@ -51,8 +51,8 @@ class VideoParameters implements Comparable<VideoParameters> {
5151
// compare by dimension's area
5252
final result = dimensions.area().compareTo(other.dimensions.area());
5353
// if dimensions have equal area, compare by encoding
54-
if (result == 0) {
55-
return encoding.compareTo(other.encoding);
54+
if (result == 0 && encoding != null && other.encoding != null) {
55+
return encoding!.compareTo(other.encoding!);
5656
}
5757

5858
return result;
@@ -65,7 +65,7 @@ class VideoParameters implements Comparable<VideoParameters> {
6565
Map<String, dynamic> toMediaConstraintsMap() => <String, dynamic>{
6666
'width': dimensions.width,
6767
'height': dimensions.height,
68-
'frameRate': encoding.maxFramerate,
68+
'frameRate': encoding?.maxFramerate ?? 30,
6969
};
7070
}
7171

lib/src/utils.dart

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,9 @@ class Utils {
240240
encoding: VideoEncoding(
241241
maxBitrate: math.max(
242242
150 * 1000,
243-
(original.encoding.maxBitrate /
243+
(original.encoding!.maxBitrate /
244244
(math.pow(scale, 2) *
245-
(original.encoding.maxFramerate / fps)))
245+
(original.encoding!.maxFramerate / fps)))
246246
.floor(),
247247
),
248248
maxFramerate: fps,
@@ -274,13 +274,13 @@ class Utils {
274274
String? codec,
275275
}) {
276276
assert(presets.isNotEmpty, 'presets should not be empty');
277-
VideoEncoding result = presets.first.encoding;
277+
VideoEncoding result = presets.first.encoding!;
278278

279279
// handle portrait by swapping dimensions
280280
final size = dimensions.max();
281281

282282
for (final preset in presets) {
283-
result = preset.encoding;
283+
result = preset.encoding!;
284284
if (preset.dimensions.width >= size) break;
285285
}
286286

@@ -319,11 +319,12 @@ class Utils {
319319
}
320320
final size = dimensions.min();
321321
final rid = videoRids[i];
322-
323-
result.add(e.encoding.toRTCRtpEncoding(
324-
rid: rid,
325-
scaleResolutionDownBy: math.max(1, size / e.dimensions.min()),
326-
));
322+
if (e.encoding != null) {
323+
result.add(e.encoding!.toRTCRtpEncoding(
324+
rid: rid,
325+
scaleResolutionDownBy: math.max(1, size / e.dimensions.min()),
326+
));
327+
}
327328
});
328329
return result;
329330
}
@@ -390,6 +391,11 @@ class Utils {
390391
options ??= const VideoPublishOptions();
391392

392393
VideoEncoding? videoEncoding = options.videoEncoding;
394+
395+
if (isScreenShare) {
396+
videoEncoding = options.screenShareEncoding;
397+
}
398+
393399
var scalabilityMode = options.scalabilityMode;
394400

395401
if ((videoEncoding == null &&
@@ -436,7 +442,7 @@ class Utils {
436442
encodings.add(rtc.RTCRtpEncoding(
437443
rid: videoRids[2 - i],
438444
maxBitrate: videoEncoding.maxBitrate ~/ math.pow(3, i),
439-
maxFramerate: original.encoding.maxFramerate,
445+
maxFramerate: original.encoding!.maxFramerate,
440446
));
441447
}
442448
} else {

lib/src/widgets/screen_select_dialog.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ class ScreenSelectDialog extends Dialog {
302302
),
303303
SizedBox(
304304
width: double.infinity,
305-
child: ButtonBar(
305+
child: OverflowBar(
306306
children: <Widget>[
307307
MaterialButton(
308308
child: const Text(

test/mock/e2e_container.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class E2EContainer {
3131
engine = Engine(
3232
signalClient: client,
3333
peerConnectionCreate: MockPeerConnection.create,
34-
connectOptions: const ConnectOptions(),
3534
roomOptions: const RoomOptions(),
3635
);
3736
room = Room(engine: engine);

0 commit comments

Comments
 (0)