-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add support to send TS via UDP #4
base: master
Are you sure you want to change the base?
feat: add support to send TS via UDP #4
Conversation
Massa! Essa opção de bitrate tem alguma função? |
Eu particularmente gosto de buffers circulares pra "amortecer" qualquer soluço do sistema. Eg.: |
Lembrei do código. |
Na verdade vai precisar de duas constantes mesmo. uma na thread que le do device, output_thread(), mantem o BUFFER_SIZE com o valor que tah, e de fato cria outra constante que vai ser o tamanho pra ler do buffer circular (que poder o mesmo para todos os players, 5 * 188. |
Sim, o bitrate administra a velocidade transmissão, quanto tempo vai levar a cada sleep.
sim sim, é uma solução que costumo usar também em muitos casos, pensei em buffer maior para fazer uma implementação menor, para não precisar envolver com o final do buffer rotativo ter meio pacote TS complemetado pelo inicio.
Bom, eu acreditava que não precisaria, que utilizaria a própria velocidade de leitura como a velocidade de saida, e assim seria o mesmo bitrate que a transmissora, porém por algum motivo não funcionou, um dos meus equipamentos reconhece os pacotes TS chegando, mas ao todo só da imagem na tv por um leve instante.
sobre essa parte de quantidade de pacotes TS por envio, não entendo muito bem, já vi em outras implementações e outras conversas outros números como @rafael2k fico no aguardo se preciso mudar para buffer circular ou não, eu optaria pelo buffer multiplo de 188 que vai acumulando, eu optaria na verdade só por mover da eu conheço buffer circular em memoria, que é um pouco chato de trabalhar quando está próximo da borda, se ring_buffer.c traz facilidades, posso reutiliza-lo então para ler pacotes e enviar os pacotes, mas a gravação do outputfile e player pode manter como está um buffer de 4096 é perfeito. |
fazendo alguns testes, eu vi que tem que balencear a quantidade de pacotes e velocidade, mas mandar poucos muito rápido ou muitos muito lento causa uma instabilidade. |
O buffer circular já está lá. Não precisa mexer no código do buffer nem usar outro buffer. A cadencia da leitura do device já dá a cadência do pipeline, visto que a leitura do buffer é bloqueante. Entendo ali que também o sleep seja somente para amortecer o jitter da transmissão dos datagramas UDP com 4 pacotes TS, confere? O ideal é não ter o sleep... mas se precisar, paciencia. ps: como a cadência do TS é dada pelo device de captura, não vejo muito sentido em setar um valor de bitrate (talvez uma medida do bitrate recebido pelo device possa fazer sentido). |
aqui está a feature, consegui testar em hardware real, acredito que talvez tenha muitos ajustes ainda a fazer, conforme a revisão irei trabalhar neles.
nanosleep
na minha implementação, a principio não teve impactos).BUFFER_SIZE_UDP
com número magico192512
são 1024 pacotes TS, foi a maneira mais simples que pensei entre concilicar o buffer fs do linux de4096
com buffer TS de188
sem precisar de uma fila de buffer rotativo.<ip>:<porta>:<numero de pacotes TS>:<bitrate in ms>
closes #2