|
1 | 1 | import 'package:collection/collection.dart'; |
| 2 | +import 'package:flutter/widgets.dart'; |
2 | 3 | import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc; |
| 4 | +import 'package:flutter_webrtc/flutter_webrtc.dart'; |
3 | 5 | import 'package:rxdart/rxdart.dart'; |
| 6 | +import 'package:stream_video/stream_video.dart'; |
4 | 7 |
|
5 | 8 | import '../../stream_video.dart'; |
6 | 9 | import '../disposable.dart'; |
@@ -402,13 +405,35 @@ extension PublisherRtcManager on RtcManager { |
402 | 405 |
|
403 | 406 | // use constraints passed to getUserMedia by default |
404 | 407 | final dimension = track.getVideoDimension(); |
405 | | - |
406 | 408 | _logger.v(() => '[publishVideoTrack] dimension: $dimension'); |
407 | 409 |
|
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 | + } |
412 | 437 |
|
413 | 438 | for (final encoding in encodings) { |
414 | 439 | _logger.v(() => '[publishVideoTrack] encoding: ${encoding.toMap()}'); |
|
0 commit comments