Como se poderia formular um comando para streaming ponto-a-ponto de 60 a 90 Hz de um PC para outro com a menor latência possível usando o ffmpeg?
Notícia completa:
Eu criei um fone de ouvido de realidade virtual a partir de uma caixa de som da Amazon, giroscópio + arduino e tela HDMI de 2 K da Alibaba. Funciona bem com o mecanismo Blender Game, mas o fio me deixa louco.
Estou tentando fazer com que seja sem fio com um Raspberry Pi ou algum outro pequeno computador. (Eu preciso adicionar um peso na parte de trás para equilibrar o fone de ouvido de qualquer maneira)
É assim que eu imagino configurando as coisas -
Servidor (PC): janela do aplicativo Stream 2K com a menor latência possível para uma das portas no IP
Client (HMD): Executa o Mplayer no modo de benchmark para a menor latência possível (por documentação do FFmpeg)
O FFmpeg é totalmente integrado ao Blender, mas o fluxo de entrada pode ser apenas uma captura de tela da área de trabalho.
O roteador doméstico do meu provedor suporta 5Ghz Wifi. Eu também tenho um pen drive USB 5Ghz Wifi CSL que é plug-and-pay com o Linux.
Como a latência é muito ruim para a RV, acho que posso reduzir alguns milissegundos ao transmitir sem compressão? Como o streaming é apenas sobre a largura de banda da LAN é limitado apenas eu acho que por 5GHz Wifi que eu acho que como 100Mb / s.
Existem centenas de maneiras de interpretar a documentação do ffmpeg, parece que você só pode realmente entender quais opções usar a partir da experiência. Não vejo ninguém tentando a mesma coisa.
Eu poderia passar uma semana tentando todas as configurações possíveis, mas tenho certeza de que alguém que lida com o ffmpeg todos os dias saberia as melhores configurações para isso imediatamente.
Este comando dá cerca de um segundo de atraso e 25 FPS:
Servidor:
avconv -f x11grab -s 2160x1200 -r 60 -i: 0.0 -f mpegts udp: //192.168.0.2: 1234
Cliente:
mplayer -benchmark udp: //192.168.0.2: 1234
Se eu usar 'rawvideo', o fluxo não será captado pelo mplayer. Ele dirá apenas "fluxo não procurado".