convertAudioCodecMapsToCapabilities static method

List<RTCRtpCodecCapability> convertAudioCodecMapsToCapabilities(
  1. List<Map<String, dynamic>> codecMaps
)

Converts audio codec maps to RTCRtpCodecCapability objects for use with transceiver codec preferences. This method transforms the Map format (from AudioCodec.toJson()) into the format required by RTCRtpTransceiver.setCodecPreferences().

codecMaps List of codec maps in the format produced by AudioCodec.toJson() Returns a List of RTCRtpCodecCapability objects ready for setCodecPreferences()

Implementation

static List<RTCRtpCodecCapability> convertAudioCodecMapsToCapabilities(
  List<Map<String, dynamic>> codecMaps,
) {
  final capabilities = <RTCRtpCodecCapability>[];

  for (final codecMap in codecMaps) {
    try {
      // Extract values from the map with proper type handling
      final mimeType = codecMap['mimeType'] as String?;
      final clockRate = codecMap['clockRate'];
      final channels = codecMap['channels'];
      final sdpFmtpLine = codecMap['sdpFmtpLine'] as String?;

      if (mimeType == null || clockRate == null) {
        GlobalLogger().w(
          'Skipping codec with missing mimeType or clockRate: $codecMap',
        );
        continue;
      }

      capabilities.add(
        RTCRtpCodecCapability(
          mimeType: mimeType,
          clockRate:
              clockRate is int ? clockRate : (clockRate as num).toInt(),
          channels: channels is int
              ? channels
              : (channels != null ? (channels as num).toInt() : null),
          sdpFmtpLine: sdpFmtpLine,
        ),
      );
    } catch (e) {
      GlobalLogger().w(
        'Failed to convert codec map to capability: $codecMap - $e',
      );
    }
  }

  GlobalLogger().d(
    'Converted ${capabilities.length} codec maps to capabilities: ${capabilities.map((c) => c.mimeType).toList()}',
  );
  return capabilities;
}