аудио: убрать потери кадров (Concentus не успевал); экран — POWER
- Opus complexity 8->3, отключён inband FEC: кодер выдавал ~60 кадров/с при 100 захваченных -> 40% кадров терялось в очереди (DROP_OLDEST) = «хрип». Стало enc_us~3мс на 10-мс кадр, dropped перестал расти. - Прогрев кодера тишиной на старте (JIT Concentus) — убирает стартовый всплеск потерь. - Диагностика в логе: enc_us / snd_us. - ScreenControl идемпотентен (POWER — переключатель): сверяемся с реальным isInteractive. - Зависимость shizuku-vd 0.1.1 -> 0.1.2 (POWER-инъекция).
This commit is contained in:
@@ -26,11 +26,12 @@ object AudioConfig {
|
||||
const val BITRATE = 64_000
|
||||
|
||||
/**
|
||||
* Сложность Opus-кодера. Чуть ниже максимума (10): Concentus — JVM-порт, а кодирует
|
||||
* он на очках в реальном времени; при 8 качество на 64 кбит/с практически то же,
|
||||
* зато есть запас по CPU.
|
||||
* Сложность Opus-кодера. Concentus — JVM-порт, кодирует на очках в реальном времени;
|
||||
* при complexity 8 один 10-мс stereo-кадр не укладывался в 10 мс, кодер не успевал
|
||||
* (~60 кадров/с при 100 захваченных → 40% кадров терялось в очереди = «хрип»). На 3
|
||||
* запас по CPU большой, а на 64 кбит/с разница в качестве незначительна.
|
||||
*/
|
||||
const val COMPLEXITY = 8
|
||||
const val COMPLEXITY = 3
|
||||
|
||||
/** Ожидаемый процент потерь — для настройки inband FEC/PLC Opus. */
|
||||
const val PACKET_LOSS_PERCENT = 10
|
||||
|
||||
@@ -20,7 +20,10 @@ class OpusAudioEncoder(
|
||||
this.bitrate = bitrate
|
||||
this.complexity = complexity
|
||||
useVBR = true
|
||||
useInbandFEC = true
|
||||
// InbandFEC в Concentus удваивает стоимость кодирования (кодер считает ещё и
|
||||
// резервную копию предыдущего кадра). Потери по UDP у нас ~0, а пропуски seq и так
|
||||
// прячем на декодере (PLC, см. [OpusAudioDecoder.decodeLost]) — FEC только жжёт CPU.
|
||||
useInbandFEC = false
|
||||
packetLossPercent = AudioConfig.PACKET_LOSS_PERCENT
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user