0

Я разрабатываю VoIP-приложение с использованием быстрого латентного быстрого пути, проблема в том, что когда я меняю аудиодорожку на динамик, я заметил, что обратный вызов рекордера срабатывает каждые 100 мс вместо того, чтобы, как 5ms он должен работать и генерируется следующее сообщение об ошибке:Низкая латентность Android OpenSLES: рекордер перестает работать с изменением звука в динамике

E/ACDB-LOADER( 183): Error: ACDB AudProc vol returned = -19 
D/audio_hw_primary( 183): enable_snd_device: snd_device(32: speaker-mic) 
D/audio_hw_primary( 183): enable_audio_route: apply and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_audio_route: reset and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_snd_device: snd_device(32: speaker-mic) 
E/AudioFlinger( 183): read failed: framesRead=-2147483631 
D/audio_hw_primary( 183): select_devices: out_snd_device(0: none) in_snd_device(32: speaker-mic) 
D/msm8974_platform( 183): platform_send_audio_calibration: sending audio calibration for snd_device(32) acdb_id(11) 
D/  ( 183): Failed to fetch the lookup information of the device 0000000B 
E/ACDB-LOADER( 183): Error: ACDB AudProc vol returned = -19 
D/audio_hw_primary( 183): enable_snd_device: snd_device(32: speaker-mic) 
D/audio_hw_primary( 183): enable_audio_route: apply and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_audio_route: reset and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_snd_device: snd_device(32: speaker-mic) 
E/AudioFlinger( 183): read failed: framesRead=-2147483631 
D/audio_hw_primary( 183): select_devices: out_snd_device(0: none) in_snd_device(32: speaker-mic) 
D/msm8974_platform( 183): platform_send_audio_calibration: sending audio calibration for snd_device(32) acdb_id(11) 
D/  ( 183): Failed to fetch the lookup information of the device 0000000B 
E/ACDB-LOADER( 183): Error: ACDB AudProc vol returned = -19 
D/audio_hw_primary( 183): enable_snd_device: snd_device(32: speaker-mic) 
D/audio_hw_primary( 183): enable_audio_route: apply and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_audio_route: reset and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_snd_device: snd_device(32: speaker-mic) 
E/AudioFlinger( 183): read failed: framesRead=-2147483631 
D/audio_hw_primary( 183): select_devices: out_snd_device(0: none) in_snd_device(32: speaker-mic) 
D/msm8974_platform( 183): platform_send_audio_calibration: sending audio calibration for snd_device(32) acdb_id(11) 
D/  ( 183): Failed to fetch the lookup information of the device 0000000B 
E/ACDB-LOADER( 183): Error: ACDB AudProc vol returned = -19 
D/audio_hw_primary( 183): enable_snd_device: snd_device(32: speaker-mic) 
D/audio_hw_primary( 183): enable_audio_route: apply and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_audio_route: reset and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_snd_device: snd_device(32: speaker-mic) 
E/AudioFlinger( 183): read failed: framesRead=-2147483631 
D/audio_hw_primary( 183): select_devices: out_snd_device(0: none) in_snd_device(32: speaker-mic) 
D/msm8974_platform( 183): platform_send_audio_calibration: sending audio calibration for snd_device(32) acdb_id(11) 
D/  ( 183): Failed to fetch the lookup information of the device 0000000B 
E/ACDB-LOADER( 183): Error: ACDB AudProc vol returned = -19 
D/audio_hw_primary( 183): enable_snd_device: snd_device(32: speaker-mic) 
D/audio_hw_primary( 183): enable_audio_route: apply and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_audio_route: reset and update mixer path: low-latency-record 
D/audio_hw_primary( 183): disable_snd_device: snd_device(32: speaker-mic) 
E/AudioFlinger( 183): read failed: framesRead=-2147483631 
  • устройств: Nexus 5 Android 5.0.1
  • Родной размер буфера 240 образцов (шорты)
  • скорости Родной частоты 48000 Hz Play эр предустановка:
    SL_ANDROID_STREAM_VOICE
  • Recorder Предустановленные: SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION
  • AudioManager на MODE_IN_COMMUNICATION

Важно отметить, что если аудио маршрут остается на гарнитуре работает нормально. Кто-нибудь знает, в чем проблема?

ответ

0

Ваш код отлично работает с гарнитурой, говорит мне, что изменение маршрута на ваш динамик вызывает задержку.

OpenSL направляет воспроизведение звука в динамик по умолчанию. Теперь, когда вы устанавливаете streamType на SL_ANDROID_STREAM_VOICE, он направляет аудио на гарнитуру. Когда вы направляете аудио обратно в динамик, вам может потребоваться установить streamType по умолчанию и снова инициализировать плеер.

Я не знаю точно, почему ваш обратный звонок рекордера запускается через 100 мс вместо 5 мс. Но в любом случае, я думаю, вы правильно установили audio sampling rate of your device.

И еще одна вещь, чтобы проверить размер буфера. Да, 240 в порядке. Но вы можете попробовать установить более низкий размер, поскольку вам нужно часто запускать обратный вызов рекордера.

Надеюсь, что это поможет.

+0

Благодарим за ответ. Рекордер срабатывает каждые 5 мс, пока я не сменю аудиодорожку на громкоговоритель, поэтому рекордер работает нормально, пока не произойдет что-то неправильное. Итак, вы говорите, что мне нужно повторно инициализировать плеер каждым звуковым маршрутом? – VitalyD

+0

Не понял. Сожалею. В чем проблема? –

+0

Проблема в том, что когда я меняю звук на динамик, сторона дальнего конца не слышит меня, так как мой обратный вызов рекордера перестает работать. Это происходит, только если я использую быстрый путь, то есть, только если я использую собственный размер буфера и частоту дискретизации. – VitalyD

Смежные вопросы