Depois de comprar um novo laptop, Pierre Couy percebeu que faltava um recurso essencial: DisplayPort sobre USB-C. Isso levou Guoy a criar sua própria solução de streaming de tela virtual alimentada por um Raspberry Pi 3B.
A premissa é simples, transmitir os dados da tela usando Ethernet para o Raspberry Pi e, em seguida, enviar a tela pela porta HDMI do Pi. No entanto, este projeto exigiu muitos processos e habilidades diferentes para ser executado.
O laptop anterior de Cuoy era capaz de produzir via VGA e HDMI simultaneamente. No entanto, apenas HDMI estava disponível para sua compra mais recente, levando Cuoy a tirar a poeira de um Raspberry Pi 3B antigo e pressioná-lo em serviços para transmitir uma tela adicional. A escolha foi simples, pois o Raspberry Pi era gratuito, mas havia alguns compromissos que incluíam obter o equilíbrio entre qualidade de imagem, latência e taxa de quadros, dada a porta Ethernet de 100 m e a CPU quad-core.
Os objetivos estabelecidos por Cuoy eram simples:
- A latência não deve ser perceptível ao rolar ou mover o mouse
- A qualidade da imagem deve ser alta o suficiente para ler texto pequeno
- Como planejei usá-lo principalmente para conteúdo de texto estático, decidi pegar leve comigo mesmo definindo uma meta baixa de 10 FPS.
- Se a extremidade receptora do fluxo ficar atrasada, ela deve alcançá-la para viver o mais rápido possível
- Usar Gerente de Renderização Direta para exibir o fluxo no Pi em vez de depender de um servidor X.
- Pesquisei ferramentas de reprodução remota e VNC porque pareciam soluções de baixa latência fáceis de usar. No entanto, eu não estava interessado em transmitir entradas do Pi para o laptop.
Além disso, Cuoy queria configurar um servidor DHCP no Raspberry Pi, iniciar o software necessário na inicialização e configurar o laptop para começar a transmitir os dados da tela. Esse último objetivo exigia o uso de xrandr para criar um monitor virtual.
A primeira tarefa de Cuoy foi criar o canal de vídeo e optou por usar o ffmpeg em seu laptop. Depois de instalar um servidor DHCP (udhcpd), Cuoy configurou as duas máquinas para se comunicarem. Com a conexão confirmada, o primeiro teste real foi um fluxo não otimizado pela Ethernet. O teste foi um sucesso, mas falhou em todos os objetivos. Implacável, Cuoy continuou. Por fim, por meio de uma série de iterações, Cuoy conseguiu otimizar o fluxo a um ponto em que atingia as metas.
O objetivo final era estender a exibição do laptop usando um script bash personalizado que geraria um monitor virtual, configurado para atender às necessidades de Cuoy e transmitido para o endereço IP do Raspberry Pi. No Pi, outro script intercepta o fluxo e reproduz a reprodução pela porta HDMI.
Claro, tudo isso é um exagero; um adaptador USB DisplayLink funcionaria tão bem e com pouco ou nenhum trabalho. No entanto, o processo completo é fascinante. Ele mostra o que pode ser alcançado com hardware barato, algum conhecimento de Linux e muitas iterações.
Cuoy tem um postagem completa no blog no processo, e todos os arquivos de configuração podem ser encontrados nos respectivos Repositório GitHub.