feat: (for now android only!) codec configuration and retrieval methods

This commit is contained in:
Andrew 2026-05-04 14:04:35 +07:00
parent 32789468a3
commit 90733a3768
6 changed files with 117 additions and 0 deletions

View file

@ -263,6 +263,21 @@ class LiblinphoneFlutterPlugin : FlutterPlugin, ActivityAware, MethodCallHandler
result.success(linphoneBridge.getCurrentCallStats()?.toMap())
}
"getAvailableAudioCodecs" -> {
result.success(linphoneBridge.getAvailableAudioCodecs())
}
"setAudioCodec" -> {
try {
val mime = call.argument<String>("mime")!!
val clockRate = call.argument<Int>("clockRate")!!
result.success(linphoneBridge.setAudioCodec(mime, clockRate))
} catch (e: Exception) {
Log.e(TAG, "setAudioCodec: ${e.message}")
result.error("error", e.message, e)
}
}
else -> {
result.notImplemented()
}

View file

@ -549,4 +549,61 @@ class LinphoneBridge(
isZrtpKeyAgreementAlgoPostQuantum = stats.isZrtpKeyAgreementAlgoPostQuantum(),
)
}
data class LPCodec(
val mimeType: String,
val clockRate: Int,
val enabled: Boolean,
) {
fun toMap(): Map<String, Any?> {
return mapOf(
"mimeType" to mimeType,
"clockRate" to clockRate,
"enabled" to enabled,
);
}
}
fun getAvailableAudioCodecs(): List<Map<String, Any?>> {
return core.audioPayloadTypes.map {
LPCodec(
mimeType = it.mimeType.lowercase(),
clockRate = it.clockRate,
enabled = it.enabled()
).toMap()
}
}
fun setAudioCodec(mime: String, clockRate: Int): Boolean {
var codecFound = false
var ok = false
core.audioPayloadTypes.forEach { pt: PayloadType ->
val ptMime = pt.mimeType.lowercase()
val ptClockRate = pt.clockRate
val enable = ptMime == mime && ptClockRate == clockRate
if (enable) {
ok = pt.enable(enable) == 0
codecFound = true
Log.i(
LiblinphoneFlutterPlugin.TAG,
"setAudioCodec: preferred codec found ($ptMime @ $clockRate) switch: $ok"
)
} else {
val switchedOk = pt.enable(enable) == 0
Log.i(
LiblinphoneFlutterPlugin.TAG,
"setAudioCodec: $ptMime @ $clockRate switch: $switchedOk"
)
}
}
if (!codecFound) {
Log.i(
LiblinphoneFlutterPlugin.TAG,
"setAudioCodec: could not find codec with parans $mime @ $clockRate"
)
}
return ok
}
}