¿Qué tipo de búfer debo implementar para un dispositivo de audio de una sola vía?

8

Estoy trabajando en un proyecto donde los datos de audio se transmiten a un dispositivo. Los datos de audio se codifican a través de opus y se transmiten a una carga útil de 20 ms a la vez. La transmisión se realiza a través de TCP para evitar la pérdida de paquetes por completo. El objetivo de la transmisión es tener lo más cerca posible de la transmisión de audio en vivo, sin pérdida de audio ni vibraciones.

Actualmente, lo que sucede en conexiones de Internet más lentas, el audio puede vibrar un poco. Actualmente no estoy usando ningún búfer, pero el objetivo es poder tener la mayor cantidad posible de "transmisión en vivo", pero al mismo tiempo eliminar el jitter.

He investigado los buffers de jitter, y parece que también se supone que los buffers de jitter deben manejar los retrasos en ambos extremos para que ambos extremos estén lo más sincronizados posible, lo que parece una exageración para mi situación. Me temo que si hago un tamaño de búfer estático, se eliminará el aspecto de transmisión en vivo si esto no es necesario.

Esto me deja con algunas preguntas, todas relacionadas de alguna manera.

  1. ¿Qué es un buen método o algoritmo para detectar la longitud del búfer?
  2. ¿Cuál es la mejor manera de comenzar a enviar datos al decodificador en el extremo del receptor? ¿Es cuando el búfer alcanza una cierta cantidad de milisegundos llenos y comenzará a suministrar datos en cargas útiles de 20 ms?
  3. ¿Retraso la reproducción si el búfer no se llena?
  4. ¿El búfer estará en bytes o en tiempo?

¡Muchas gracias!

    
pregunta Mikey A. Leonetti 14.05.2015 - 00:56

1 respuesta

1

Depende completamente del rendimiento de su red: si puede mantener un solo segundo de datos llenos, ¡eso es todo lo que necesita! Obviamente, debe determinar el tiempo durante el cual su red va a tartamudear y fallará al llenar el búfer. Pruébalo y mira.

De lo contrario, podría ser más fácil configurar el tamaño del búfer, las redes rápidas pueden tener un búfer de segundo (nadie notará el audio detrás de la captura 1 segundo) y las redes lentas de alta latencia o rendimiento deficiente pueden almacenar más. Es posible que pueda cambiar el tamaño de su búfer durante la reproducción si alguna vez se vacía por completo, pero en este caso es muy probable que no se interrumpa la reproducción.

En general, solo retrasas la reproducción si el búfer se vacía por completo. No tiene sentido tener un búfer si no lo usas.

Si su audio es de paquetes de 20 ms, entonces tamaño == tiempo.

    
respondido por el gbjbaanb 27.04.2016 - 00:33

Lea otras preguntas en las etiquetas