setPublishingCodecs method
- List<
SubscribedCodec> codecs, - LocalTrack track, {
- bool force = false,
Re-applies codecs to the senders publishing them.
force asks for a write even where the sender already reports the state
being applied, for a caller re-asserting a pause the sender lost without
being told. It is narrowed per codec: one with every layer subscribed has
nothing to re-assert, so its sender is left alone.
Implementation
Future<List<String>> setPublishingCodecs(
List<lk_rtc.SubscribedCodec> codecs,
LocalTrack track, {
bool force = false,
}) async {
logger.fine('setPublishingCodecs $codecs');
// only enable simulcast codec for preference codec setted
if (codec == null && codecs.isNotEmpty) {
await setPublishingLayers(
track,
codecs[0].qualities,
isSVC: isSVCCodec(codecs[0].codec),
force: force && _hasPausedLayer(codecs[0]),
);
return [];
}
subscribedCodecs = codecs;
final List<String> newCodecs = [];
for (var codec in codecs) {
final forceCodec = force && _hasPausedLayer(codec);
if (this.codec?.toLowerCase() == codec.codec.toLowerCase()) {
await setPublishingLayers(track, codec.qualities, isSVC: isSVCCodec(codec.codec), force: forceCodec);
} else {
final simulcastCodecInfo = simulcastCodecs[codec.codec];
logger.fine('setPublishingCodecs $codecs');
if (simulcastCodecInfo == null) {
for (var q in codec.qualities) {
if (q.enabled) {
newCodecs.add(codec.codec.toLowerCase());
break;
}
}
} else if (simulcastCodecInfo.encodings != null && simulcastCodecInfo.sender != null) {
logger.fine('setPublishingCodecs $codecs');
await setPublishingLayersForSender(
simulcastCodecInfo.sender!,
simulcastCodecInfo.encodings!,
codec.qualities,
isSVC: isSVCCodec(codec.codec),
force: forceCodec,
);
}
}
}
return newCodecs;
}