applyAudioCodecPreferences method
Applies audio codec preferences to the peer connection's audio transceiver. This method must be called before creating an offer or answer to ensure the preferred codecs are negotiated in the correct order.
peerConnection The RTCPeerConnection instance to apply preferences to
preferredCodecs List of preferred audio codec maps in order of preference
Implementation
Future<void> applyAudioCodecPreferences(
RTCPeerConnection peerConnection,
List<Map<String, dynamic>>? preferredCodecs,
) async {
if (preferredCodecs == null || preferredCodecs.isEmpty) {
GlobalLogger().d(
'Web Peer :: No codec preferences provided, using defaults',
);
return;
}
try {
GlobalLogger().d(
'Web Peer :: Attempting to apply ${preferredCodecs.length} codec preferences',
);
// Use CodecUtils to find the audio transceiver
final audioTransceiver =
await CodecUtils.findAudioTransceiver(peerConnection);
if (audioTransceiver == null) {
GlobalLogger().w(
'Web Peer :: No audio transceiver found, cannot apply codec preferences',
);
return;
}
GlobalLogger().d(
'Web Peer :: Audio transceiver found, converting codec maps to capabilities',
);
// Convert codec maps to capabilities
final codecCapabilities =
CodecUtils.convertAudioCodecMapsToCapabilities(preferredCodecs);
if (codecCapabilities.isEmpty) {
GlobalLogger().w(
'Web Peer :: No valid codec capabilities created, using defaults',
);
return;
}
GlobalLogger().d(
'Web Peer :: Applying ${codecCapabilities.length} codec capabilities to transceiver',
);
// Apply codec preferences to transceiver
await audioTransceiver.setCodecPreferences(codecCapabilities);
GlobalLogger().d(
'Web Peer :: Successfully applied codec preferences. Order: ${codecCapabilities.map((c) => c.mimeType).toList()}',
);
} catch (e) {
GlobalLogger().e(
'Web Peer :: Error applying codec preferences: $e',
);
}
}