publishTrack method
void
publishTrack({
- required MediaStreamTrack track,
Implementation
void publishTrack({required MediaStreamTrack track}) async {
if (_pc != null) {
if (track.kind == 'video' && _constraints.simulcast!) {
var idx = resolutions.indexOf(_constraints.resolution!);
var encodings = <RTCRtpEncoding>[
RTCRtpEncoding(
rid: 'f',
active: true,
maxBitrate:
videoConstraints[resolutions[idx]]!.encodings.maxBitrate,
minBitrate: 256000,
scaleResolutionDownBy: 1.0,
maxFramerate:
videoConstraints[resolutions[idx]]!.encodings.maxFramerate,
)
];
if (idx - 1 >= 0) {
encodings.add(RTCRtpEncoding(
rid: 'h',
active: true,
scaleResolutionDownBy: 2.0,
maxBitrate:
videoConstraints[resolutions[idx - 1]]!.encodings.maxBitrate,
minBitrate: 128000,
maxFramerate:
videoConstraints[resolutions[idx - 1]]!.encodings.maxFramerate,
));
}
if (idx - 2 >= 0) {
encodings.add(RTCRtpEncoding(
rid: 'q',
active: true,
minBitrate: 64000,
scaleResolutionDownBy: 4.0,
maxBitrate:
videoConstraints[resolutions[idx - 2]]!.encodings.maxBitrate,
maxFramerate:
videoConstraints[resolutions[idx - 2]]!.encodings.maxFramerate,
));
}
var transceiver = await _pc?.addTransceiver(
track: track,
init: RTCRtpTransceiverInit(
streams: [_stream],
direction: TransceiverDirection.SendOnly,
sendEncodings: encodings,
));
setPreferredCodec(transceiver);
} else {
var transceiver = await _pc?.addTransceiver(
track: track,
init: RTCRtpTransceiverInit(
streams: [_stream],
direction: TransceiverDirection.SendOnly,
sendEncodings: track.kind == 'video'
? [videoConstraints[_constraints.resolution]!.encodings]
: [],
));
if (track.kind == 'video') {
setPreferredCodec(transceiver);
}
}
}
}