Estou trabalhando em um projeto em que os dados de áudio são transmitidos para um dispositivo. Os dados de áudio são codificados via opus e transmitidos com cargas úteis de 20 ms por vez. A transmissão é feita via TCP para evitar completamente a perda de pacotes. O objetivo do streaming é ter o mais próximo possível do streaming de áudio ao vivo, sem perda de áudio ou tremulação.
Atualmente, o que acontece em conexões mais lentas com a Internet, o áudio pode tremer um pouco. Atualmente, não estou usando nenhum buffer, mas o objetivo é poder ter o mais próximo possível da "transmissão ao vivo", mas ao mesmo tempo eliminando a instabilidade.
Examinei os buffers de jitter, e parece que os buffers de jitter também devem lidar com atrasos nas duas extremidades, para que ambas as extremidades estejam o mais sincronizadas possível, o que parece um exagero para a minha situação. Receio que, se eu criar um tamanho de buffer estático, ele removerá o aspecto de transmissão ao vivo, se isso não for necessário.
Então, isso me deixa com algumas perguntas, que são de alguma forma relacionadas.
- Qual é um bom método ou algoritmo para detectar o comprimento do buffer?
- Qual é a melhor maneira de começar a alimentar dados para o decodificador na extremidade do receptor? Quando o buffer atingir uma certa quantidade de milissegundos cheio, ele começará a alimentar dados em cargas úteis de 20 ms?
- Atraso na reprodução se o buffer ficar insuficiente?
- O buffer terá bytes ou duração de tempo?
Muito obrigado!