El audio es mucho más sensible que el vídeo. El ruido y el mosaico en la imagen de video todavía son apenas aceptables, pero una vez que hay fallas en el sonido, será particularmente fácil de sentir e insoportable.
Síntomas del problema
Los problemas de audio comunes se describen a continuación:
-Sonido eléctrico, explosión sónica, sonido de chef de hipopótamo o pitido.
-No puedo oír con claridad.
-Aike, puedes escuchar tu propia voz
Investigación del problema
1 Problema de configuración de parámetros
Como se mencionó anteriormente, el audio es algo particularmente sensible e involucra muchas configuraciones de parámetros. Una vez que la configuración no coincide, el sonido sonará extraño (por ejemplo, si la frecuencia de muestreo es 32000 Hz y el reproductor está configurado como 000 Hz o 44100 Hz, el audio se reproducirá obviamente lenta o rápidamente).
Para conocer los parámetros de audio comunes y los principios básicos, consulte el artículo: Desarrollo de audio de Android (1): conocimientos básicos.
A lo que solo debemos prestar atención es a que, ya sea adquisición o reproducción, la API del sistema y las bibliotecas de terceros deben configurar los parámetros correctos, como la frecuencia de muestreo, el ancho de bits, el número de canales, etc.
2. Razones a nivel de código
Los problemas comunes a nivel de código son los siguientes:
-El tamaño del buffer de audio no coincide. Se coloca un audio de 1024 bytes en una matriz de 2048 bytes y finalmente se genera un número aleatorio.
-Un problema con el algoritmo de remuestreo de audio, causando problemas con los datos muestreados.
ByteBuffer de Android elimina la matriz. No puedes usar. método array(), pero es necesario utilizarlo. método get().
-Sistema iOS, otras apps cambian la configuración de la frecuencia de muestreo de AudioSession a través de la API del sistema.
Respuestas una tras otra
3. Fluctuaciones de la red
El vídeo consta de imágenes continuas cuadro por cuadro. Durante la reproducción, si no se puede renderizar a tiempo, se producirá un efecto de bloqueo. Si se pierden algunos fotogramas, se producirá un efecto de avance rápido.
El audio se transmite aunque también se divide en fotogramas de audio, si no se puede reproducir a tiempo o se pierden más fotogramas de audio de forma continua, obviamente se escuchará un sonido intermitente. Esta situación puede ocurrir fácilmente, especialmente en entornos de red inestables con redes débiles y altas tasas de pérdida de paquetes.
4. Cancelación de eco
El eco suele aparecer en escenarios donde la recopilación y reproducción de audio se realizan al mismo tiempo, como la interacción, mezcla y escucha de MaiMai. El audio recopilado se reproduce a través del altavoz y se recopila al mismo tiempo, produciendo un eco o silbido.
En tal escenario, generalmente es necesario procesarlo a través de la API de cancelación de eco del sistema o una biblioteca de cancelación de eco de terceros (como speexdsp, webrtc, etc.). ).
Nota: El efecto de cancelación de eco del hardware de muchos modelos de Android no es muy bueno.
5. Mezcla fuera de límites
Los datos PCM del audio generalmente se almacenan en una matriz corta. Cuando hacemos algunas funciones de mezcla multicanal, si no prestamos atención al tamaño del tipo corto, a menudo causará problemas de explosión sónica. La siguiente es una referencia al código híbrido de webrtc, utilizado específicamente para el manejo sencillo de límites híbridos.