applyAudioCodecPreferences method

Future<void> applyAudioCodecPreferences(
  1. RTCPeerConnection peerConnection,
  2. List<Map<String, dynamic>>? preferredCodecs
)

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',
    );
  }
}