¿Qué tipo de búfer debo implementar para un dispositivo de transmisión de audio unidireccional?

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 20 ms cargas útiles 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 la transmisión de audio en vivo lo más cerca posible, sin pérdida de audio o fluctuaciones.

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

He examinado los buffers de jitter, y parece que también se supone que los buffers de jitter manejan 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á del aspecto de transmisión en vivo si esto no es necesario.

Entonces esto me deja con algunas preguntas, que de alguna manera están relacionadas.

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

¡Muchas gracias!

Mikey A. Leonetti
fuente
1
¿Qué tan vivo tiene que ser realmente? Incluso si tuviera un búfer de 10 segundos, ¿alguien lo notaría? Algunos programas de televisión en vivo se retrasan casi tanto tiempo por razones de control de contenido (es decir, blasfemias).
Robert Harvey
1
"La transmisión se realiza a través de TCP para evitar la pérdida de paquetes por completo". - TCP no evita la pérdida de paquetes, funciona alrededor de la pérdida de paquetes.
user253751

Respuestas:

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 período de tiempo que su red va a tartamudear y perder el llenado del búfer. Pruébalo y verás.

De lo contrario, podría ser más fácil configurar el tamaño del búfer, las redes rápidas pueden tener un segundo búfer (nadie notará el audio 1 segundo detrás de la captura) y las redes lentas de alta latencia o de bajo rendimiento pueden amortiguar 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 lo más probable es que esté tartamudeando la reproducción continuamente en este caso.

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 usa.

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

gbjbaanb
fuente