Skip to content

Commit 20a535c

Browse files
authored
fixed screen sharing quality (#721)
1 parent c79d649 commit 20a535c

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ List<rtc.RTCRtpEncoding> computeVideoEncodings({
3535
);
3636
});
3737

38-
return _encodingsFromPresets(dimension, presets: presets);
38+
return encodingsFromPresets(dimension, presets: presets);
3939
}
4040

4141
Map<String, RtcVideoParameters> _presetsForDimension({
@@ -65,7 +65,7 @@ Map<String, RtcVideoParameters> _presetsForDimension({
6565
return _defaultSimulcast_4x3;
6666
}
6767

68-
List<rtc.RTCRtpEncoding> _encodingsFromPresets(
68+
List<rtc.RTCRtpEncoding> encodingsFromPresets(
6969
RtcVideoDimension dimension, {
7070
required Map<String, RtcVideoParameters> presets,
7171
}) {

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

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import 'package:collection/collection.dart';
2+
import 'package:flutter/widgets.dart';
23
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
4+
import 'package:flutter_webrtc/flutter_webrtc.dart';
35
import 'package:rxdart/rxdart.dart';
6+
import 'package:stream_video/stream_video.dart';
47

58
import '../../stream_video.dart';
69
import '../disposable.dart';
@@ -402,13 +405,35 @@ extension PublisherRtcManager on RtcManager {
402405

403406
// use constraints passed to getUserMedia by default
404407
final dimension = track.getVideoDimension();
405-
406408
_logger.v(() => '[publishVideoTrack] dimension: $dimension');
407409

408-
final encodings = codecs.computeVideoEncodings(
409-
dimension: dimension,
410-
isScreenShare: track.trackType == SfuTrackType.screenShare,
411-
);
410+
List<RTCRtpEncoding> encodings;
411+
412+
if (track.trackType == SfuTrackType.screenShare) {
413+
final physicalSize =
414+
WidgetsBinding.instance.platformDispatcher.views.first.physicalSize;
415+
final screenDimension = RtcVideoDimension(
416+
width: physicalSize.width.toInt(),
417+
height: physicalSize.height.toInt(),
418+
);
419+
420+
_logger.v(() => '[publishVideoTrack] screenDimension: $screenDimension');
421+
422+
// Simulcast is not supported for screen share tracks, but all three are required for Android to work.
423+
encodings = codecs.encodingsFromPresets(
424+
screenDimension,
425+
presets: {
426+
'f': track.mediaConstraints.params,
427+
'h': track.mediaConstraints.params,
428+
'q': track.mediaConstraints.params,
429+
},
430+
);
431+
} else {
432+
encodings = codecs.computeVideoEncodings(
433+
dimension: dimension,
434+
isScreenShare: track.trackType == SfuTrackType.screenShare,
435+
);
436+
}
412437

413438
for (final encoding in encodings) {
414439
_logger.v(() => '[publishVideoTrack] encoding: ${encoding.toMap()}');

0 commit comments

Comments
 (0)