аудио: убрать прогрев кодера — Concentus деградировал в ~30x
Прогрев 30 кадров тишины на старте переводил Concentus в патологическое состояние: enc_us вырастал с ~2.6мс до ~88мс на кадр (113% CPU), кодер не успевал, терялось ~85% кадров -> «полная жопа» в звуке. Подтверждено A/B: без прогрева enc_us~2.6мс, dropped единицы, пробник принимает ровно 100/с.
This commit is contained in:
@@ -326,13 +326,6 @@ class VmService : LifecycleService() {
|
|||||||
private fun startAudioPump() {
|
private fun startAudioPump() {
|
||||||
lifecycleScope.launch(kotlinx.coroutines.Dispatchers.IO) {
|
lifecycleScope.launch(kotlinx.coroutines.Dispatchers.IO) {
|
||||||
val packet = ByteArray(AudioConfig.MAX_DATAGRAM)
|
val packet = ByteArray(AudioConfig.MAX_DATAGRAM)
|
||||||
// Прогреваем JIT и состояние кодера тишиной: без этого первые кадры кодировались
|
|
||||||
// в разы дольше 10 мс (Concentus — JVM, холодный профиль), очередь успевала
|
|
||||||
// переполниться, и стартовые ~секунды звука терялись («хрип при включении»).
|
|
||||||
runCatching {
|
|
||||||
val silence = ShortArray(AudioConfig.FRAME_SHORTS)
|
|
||||||
repeat(30) { audioEncoder.encode(silence, 0, AudioConfig.FRAME_SAMPLES) }
|
|
||||||
}
|
|
||||||
var encNanos = 0L
|
var encNanos = 0L
|
||||||
var sndNanos = 0L
|
var sndNanos = 0L
|
||||||
for (pcm in audioFrames) {
|
for (pcm in audioFrames) {
|
||||||
|
|||||||
Reference in New Issue
Block a user