From 48d2e1696de860faf3bfc14f1b11c2d8a0cee601 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 30 Aug 2019 21:54:45 +0300 Subject: [PATCH] - Added support for Opus Forward Error Correction (FEC) via Opus Expected Packet Loss configuration variable. --- .../com/tutpro/baresip/ConfigActivity.kt | 36 ++++++++++++++++++- app/src/main/res/layout/activity_config.xml | 34 ++++++++++++++++-- app/src/main/res/values-fi/strings.xml | 5 +++ app/src/main/res/values/strings.xml | 5 +++ 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt index 8ced7425..b1de6462 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt @@ -25,6 +25,7 @@ class ConfigActivity : AppCompatActivity() { internal lateinit var caFile: CheckBox internal lateinit var aec: CheckBox internal lateinit var opusBitRate: EditText + internal lateinit var opusPacketLoss: EditText internal lateinit var iceLite: CheckBox internal lateinit var debug: CheckBox internal lateinit var reset: CheckBox @@ -37,6 +38,7 @@ class ConfigActivity : AppCompatActivity() { private var oldCAFile = false private var oldAec = false private var oldOpusBitrate = "" + private var oldOpusPacketLoss = "" private var oldIceMode = "" private var oldLogLevel = "" private var callVolume = BaresipService.callVolume @@ -95,6 +97,11 @@ class ConfigActivity : AppCompatActivity() { oldOpusBitrate = if (obCv.size == 0) "28000" else obCv[0] opusBitRate.setText(oldOpusBitrate) + opusPacketLoss = findViewById(R.id.OpusPacketLoss) as EditText + val oplCv = Config.variable("opus_packet_loss") + oldOpusPacketLoss = if (oplCv.size == 0) "0" else oplCv[0] + opusPacketLoss.setText(oldOpusPacketLoss) + iceLite = findViewById(R.id.IceLite) as CheckBox val imCv = Config.variable("ice_mode") oldIceMode = if (imCv.size == 0) "full" else imCv[0] @@ -277,6 +284,23 @@ class ConfigActivity : AppCompatActivity() { restart = true } + val opusPacketLoss = opusPacketLoss.text.toString().trim() + if (opusPacketLoss != oldOpusPacketLoss) { + if (!checkOpusPacketLoss(opusPacketLoss)) { + Utils.alertView(this, "Notice", + "Invalid Opus Packet Loss Percentage: $opusPacketLoss") + return false + } + Config.remove("opus_inbandfec") + Config.remove("opus_packet_loss") + if (opusPacketLoss != "0") { + Config.add("opus_inbandfec", "yes") + Config.add("opus_bitrate", opusPacketLoss) + } + save = true + restart = true + } + var iceModeString = "full" if (iceLite.isChecked) iceModeString = "lite" if (oldIceMode != iceModeString) { @@ -357,6 +381,10 @@ class ConfigActivity : AppCompatActivity() { Utils.alertView(this, getString(R.string.opus_bit_rate), getString(R.string.opus_bit_rate_help)) } + findViewById(R.id.OpusPacketLossTitle) as TextView-> { + Utils.alertView(this, getString(R.string.opus_packet_loss), + getString(R.string.opus_packet_loss_help)) + } findViewById(R.id.IceLiteTitle) as TextView-> { Utils.alertView(this, getString(R.string.ice_lite_mode), getString(R.string.ice_lite_mode_help)) @@ -385,7 +413,13 @@ class ConfigActivity : AppCompatActivity() { private fun checkOpusBitRate(opusBitRate: String): Boolean { val number = opusBitRate.toIntOrNull() if (number == null) return false - return (number >=6000) && (number <= 510000) + return (number >= 6000) && (number <= 510000) + } + + private fun checkOpusPacketLoss(opusPacketLoss: String): Boolean { + val number = opusPacketLoss.toIntOrNull() + if (number == null) return false + return (number >= 0) && (number <= 100) } private fun addMissingPorts(addressList: String): String { diff --git a/app/src/main/res/layout/activity_config.xml b/app/src/main/res/layout/activity_config.xml index 4688330a..5ebcdb17 100644 --- a/app/src/main/res/layout/activity_config.xml +++ b/app/src/main/res/layout/activity_config.xml @@ -196,11 +196,10 @@ - + + + + + + + + Odotettu Opus pakettihäviö + Odotettu Opus audio virran pakettihäviö prosentteina. + Mahdolliset arvot ovat 0-100. Oletusarvo on 0, jolloin ennakoiva virheenkorjaus + ei ole käytössä. + 0 ICE Lite-moodi Jos merkitty, ICE Lite-moodi on käytössä. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1e313c53..6a350f51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -178,6 +178,11 @@ Check Apps → baresip → Permissions → Storage and that file \'accounts.bs\' Average maximum bit rate used by Opus audio stream. Valid values are 6000-510000. Factory default is 28000. 28000 + Opus Expected Packet Loss + Expected Opus audio stream packet loss percentage. + Valid values are 0-100. Factory default is 0, which disables Opus Forward Error + Correction (FEC). + 0 ICE Lite Mode If checked, ICE Lite Mode is used. Default Call Volume