Skip to content

Commit 7ffe7f2

Browse files
authored
feat(ui): option to set target resolution during the call (#1119)
* option to set target resolution during the call * tweak
1 parent 75b1407 commit 7ffe7f2

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

packages/stream_video/lib/src/call/call.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2876,6 +2876,30 @@ class Call {
28762876
return result.map((_) => none);
28772877
}
28782878

2879+
/// Changes the camera capture target resolution during an active call.
2880+
Future<Result<None>> setCameraTargetResolution(
2881+
StreamTargetResolution targetResolution,
2882+
) async {
2883+
connectOptions = _connectOptions.copyWith(
2884+
targetResolution: targetResolution,
2885+
);
2886+
2887+
if (_session?.rtcManager == null) {
2888+
return const Result.success(none);
2889+
}
2890+
2891+
final params = targetResolution.toVideoParams();
2892+
final result = await _session!.rtcManager!.setCameraVideoParameters(
2893+
params: params,
2894+
);
2895+
2896+
if (result.isSuccess) {
2897+
return const Result.success(none);
2898+
} else {
2899+
return result.map((_) => none);
2900+
}
2901+
}
2902+
28792903
Future<Result<None>> setMicrophoneEnabled({
28802904
required bool enabled,
28812905
AudioConstraints? constraints,

packages/stream_video/lib/src/webrtc/rtc_manager.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,40 @@ extension PublisherRtcManager on RtcManager {
10211021
tracks[updatedTrack.trackId] = updatedTrack;
10221022
return Result.success(updatedTrack);
10231023
}
1024+
1025+
Future<Result<RtcLocalCameraTrack>> setCameraVideoParameters({
1026+
required RtcVideoParameters params,
1027+
}) async {
1028+
final track = getPublisherTrackByType(SfuTrackType.video);
1029+
1030+
if (track == null) {
1031+
_logger.w(() => '[setCameraVideoParameters] rejected (track not found)');
1032+
return Result.error('Track not found');
1033+
}
1034+
1035+
if (track is! RtcLocalCameraTrack) {
1036+
_logger.w(
1037+
() => '[setCameraVideoParameters] rejected (track is not camera)',
1038+
);
1039+
return Result.error('Track is not camera');
1040+
}
1041+
1042+
final transceivers = transceiversManager
1043+
.getTransceiversForTrack(track.trackId)
1044+
.toList();
1045+
1046+
final updatedTrack = await track.recreate(
1047+
transceivers,
1048+
mediaConstraints: track.mediaConstraints.copyWith(
1049+
params: track.mediaConstraints.params.copyWith(
1050+
dimension: params.dimension,
1051+
),
1052+
),
1053+
);
1054+
1055+
tracks[updatedTrack.trackId] = updatedTrack;
1056+
return Result.success(updatedTrack);
1057+
}
10241058
}
10251059

10261060
extension RtcManagerTrackHelper on RtcManager {

packages/stream_video_flutter/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Unreleased
22

3+
### ✅ Added
4+
* Added support for changing the camera target resolution during an ongoing call using the `call.setCameraTargetResolution()` method.
5+
36
#### LivestreamPlayer Improvements
47
* Added support for Picture in Picture (PiP) mode, configurable via the `pictureInPictureConfiguration` parameter. For platform-specific setup, refer to the [documentation](https://getstream.io/video/docs/flutter/advanced/picture_in_picture/).
58
* Introduced the `joinBehaviour` parameter, allowing control over whether and when the `LivestreamPlayer` automatically connects the user to a call.

0 commit comments

Comments
 (0)