feat: (for now android only!) codec configuration and retrieval methods
This commit is contained in:
parent
32789468a3
commit
554c223e57
6 changed files with 117 additions and 0 deletions
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue