Por que o VNC no Windows é tão lento?

27

Em um teste, eu podia transmitir um filme em HD completo em nossa rede a partir do computador do meu amigo, sem problemas. É o mais rápido que eu poderia querer.

Mas o VNC é dolorosamente lento. Tentamos o Real VNC e o Tight VNC, eu brinquei com as Capture Methodconfigurações, mas nada parece fazer a diferença; é tão lento.

Alguém tem alguma dica sobre o uso do VNC, sobre como melhorar a velocidade, ou talvez alguma alternativa?

É a natureza de não ser possível notar partes invalidadas da tela com bastante rapidez ou talvez haja algo na rede que esteja diminuindo a velocidade?

Nós dois estamos usando o Windows 7.

Precisamos ser capazes de visualizar e controlar os computadores uns dos outros sem bloquear o host, para que o RDP não funcione (a menos que alguém saiba de outra forma).

Josh Comley
fonte

Respostas:

26

O VNC é simplesmente ineficiente. O VNC funciona praticamente fazendo uma série de capturas de tela, compactando-as e lançando-as pela rede

No Windows, o RDP oferecerá melhor desempenho, mas você precisa de profissional ou melhor no servidor / origem para obter o RDP adequado, acredito.

uma assistência remota estranha pode funcionar melhor para suas necessidades - seu RDP com o usuário no terminal e o usuário no sistema remoto vendo a mesma tela

Edição: 4 anos depois, estou usando o nomachine para tarefas semelhantes - funcionaria em sistemas operacionais e faz algumas outras coisas úteis.

Journeyman Geek
fonte
2
Sim, não funciona em versões não profissionais, embora haja uma solução alternativa , suponho. (E um claro, VNC é uma porcaria)
slhck
Ah, eu deveria ter estipulado o que fiz na minha edição agora mesmo!
Josh Comley
sessões simultâneas, pode ser feito com alguns [hackery] ( missingremote.com/guide/... coisas estilo VNC ... assistência remota talvez Editado minha resposta para incluir assistência remota?..
Journeyman Geek
josh Sua edição faz sentido, mas observe a última linha do post do @journeyman, onde ele diz que "assistência remota" pode funcionar melhor. Você já viu a Assistência remota? Eu uso ocasionalmente e funciona muito bem.
Jay R. Wren
Editado para refletir que a assistência remota é realmente o que você precisa usar;)
Journeyman Geek
15

O VNC não é comparável ao streaming de vídeo. Na transmissão de vídeo, você normalmente transfere uma transmissão de vídeo pré-compactada pela rede. Para fluxos HD, geralmente é codificado em H.264. Se você usa o VNC, o computador host precisa tirar instantâneos da tela e compactá-los antes de enviá-los à rede. Existem várias restrições aqui:

  • A compactação forte precisa de muita energia da CPU. Por exemplo, a codificação de um filme de 90 minutos em H.264 em alta qualidade geralmente leva mais de 4 horas de tempo de compactação no meu servidor Athlon X2 4450e. Geralmente, essa compactação forte é inadequada para aplicativos em tempo real, como controle remoto.
  • Uma compressão menos forte, por sua vez, exigirá mais largura de banda da rede, o que pode se tornar um problema em conexões de baixa largura de banda, como a Internet.

Bem, existem alguns "truques" aplicados por codecs de vídeo e utilitários de controle remoto e compartilhamento de tela. Primeiro, eles tentam detectar as alterações na tela e transferir apenas a imagem (compactada) das alterações. Isso geralmente economiza MUITA largura de banda e poder de processamento. No entanto, para transferência de vídeo em tela cheia, não ajuda muito, pois a tela inteira precisa ser transferida com muita frequência. Conforme escrito acima, as máquinas atuais provavelmente não poderão codificar em tempo real o conteúdo da tela em Full-HD e transmiti-lo para um aplicativo de controle remoto, pois o host precisará decodificar o conteúdo do vídeo e recodificar as imagens brutas antes de enviar para a rede. Algumas máquinas Dual-Core mais antigas estão no limite ao decodificar o conteúdo de vídeo em Full HD.

Para melhorar a velocidade do controle remoto do VNC, faça o seguinte:

  • A maioria dos servidores / clientes VNC suporta múltiplos algoritmos de compactação. Alguns deles são otimizados para largura de banda pequena, outros para boa qualidade de imagem e outros para baixa latência. Isso toca outro aspecto do controle remoto. Como o serviço é um assunto interativo de latência (você não deseja ver a reação a um clique do mouse logo após 5 minutos de codificação).
  • Tente reduzir a quantidade de alterações na tela em sua máquina host. Por exemplo, tente desativar os efeitos da área de trabalho do Windows, animações etc. Isso economiza largura de banda, pois apenas partes alteradas da tela são transferidas pela rede.
  • Tente desativar outros efeitos visuais no host, como transparência. Janelas transparentes usadas pelo Vista / Win7 reduzem a "compressibilidade" das imagens. Áreas uni-coloridas / "planas" são muito mais eficientes para compactar do que cores vibrantes e detalhes sofisticados. Desabilitar os efeitos de transparência e área de trabalho do Aero realmente acelera a experiência do controle remoto. A maioria das ferramentas de controle remoto ainda permite desativar esses efeitos automaticamente na conexão (por exemplo, Microsoft RDP e algumas implementações de VNC).
  • O mesmo se aplica às imagens de fundo. Tente usar a configuração de fundo colorido em vez de imagens em HD.

Outro problema para o VNC é que ele precisa detectar as alterações na tela. Algumas implementações de VNC fazem capturas de tela "burras" e as comparam com a captura de tela anterior para detectar alterações. Isso já está tomando muito poder. Algumas implementações mais avançadas funcionam com drivers de vídeo especiais (verifique UltraVNC), que são mais eficientes aqui, mas exigem a instalação de drivers especiais.

Claro que tudo isso não ajuda se você estiver reproduzindo um vídeo em sua máquina host. Nesse caso, o VNC terá que recodificar ~ 30 imagens em tela cheia por segundo e enviá-las via rede. Na maioria das compressões que podem ser executadas em tempo real pelas CPUs atuais, esse fluxo levaria> 8Mbps de largura de banda. Portanto, é inadequado para a maioria das conexões à Internet (pense especialmente em conexões DSL assimétricas com velocidade de upload tipicamente menor que 1 Mbps e, sim, é a velocidade de upload que importa no lado do host).

Pode ser adequado para uso em LAN, mas aqui você provavelmente deve pensar mais sobre a configuração de um servidor de mídia ou compartilhar sua mídia usando o servidor de mídia DLNA / UPnP (até o reprodutor de mídia Win7 pode fazer isso). Em seguida, use um cliente DLNA para reproduzir a mídia compartilhada.

SkyBeam
fonte
1
+1, boa explicação. Eu também iria para a versão DLNA / Media Server.
slhck
Boa tentativa, mas totalmente errada, nem a carga da CPU nem o uso da rede são altos. Mesmo com uma simples diferença de transferência, ele poderia fazer 20fps em uma rede de 1gib.
Lothar
4

A variante VNC mais rápida que eu já usei é o UltraVNC com o driver de espelho de vídeo instalado. O RDP ainda é visivelmente mais rápido, mas não é tão ruim assim.

Também ouvi coisas muito boas sobre o ZeroRemote , mas nunca o testei. Parece que TrueRemote é seu sucessor.

afrazier
fonte
Não suportado no GNU / Linux.
Hi-Angel
1

Se você está tentando assistir vídeo através de uma LAN, a solução mais rápida em termos de velocidade de desenho de tela é provavelmente o Radmin .

Shinrai
fonte
3
Tentei Radmin e, sim, é comercial, mas vale a pena! Muito rápido. Fantástico.
Josh Comley
1

Como diz o @Journeyman Geek, o VNC é ineficiente. Isso ocorre por design, para que o VNC não precise "entender" o que o cliente remoto está tentando exibir.

O RDP, na verdade, funciona, portanto, é possível usar atalhos e renderizar imagens mais rapidamente. O RDP informa ao outro lado, por exemplo, "o cliente abriu uma janela neste local" em vez de enviar os dados de bitmap que representam a alteração da tela.

Existem hacks de "servidor de terminal" por aí que adicionam capacidade de RDP às versões do Windows que não os apresentam, mas eu não os recomendo oficialmente e você os usa por seu próprio risco. No entanto, acho que até as versões "Starter" do Windows 7 vêm com "Assistência remota" (msra.exe) que você pode tentar usar.

O que você pode fazer para melhorar o desempenho do VNC, no entanto, inclui diminuir a profundidade da exibição para 8 bits, diminuir a resolução da tela do cliente e usar o cache de bitmap do lado do cliente. Isso significa que o VNC precisa enviar menos dados por cabo e você terá um desempenho melhor (mas não ficará bonito).

LawrenceC
fonte
1

Você também pode experimentar o TeamViewer, é gratuito para uso não comercial e foi bastante rápido para mim. Eu ainda não testei em vídeo HD.

wizzard0
fonte
0

Se você está procurando desempenho, não precisa usar o VNC, tente algo como o LogMeIn . É grátis e funciona bem.

Jeff F.
fonte
Apenas tentei o LogMeIn, não gostei nada!
Josh Comley
3
Adoro o LogMeIn para controle remoto, mas para vídeo? Sem chance. O VNC é pelo menos P2P. Vai diretamente entre a fonte e o destino. O LogMeIn apresenta uma conexão através do servidor deles, o que significa que você tem uma latência muito maior. Todos os problemas com o VNC e mais alguns. É poderoso para o que foi projetado, mas não para vídeos em tela cheia em tempo real.
Music2myear 18/05
Eu não estou tentando fazer vídeo, eu só usou o vídeo como um teste para assegurar a ligação entre os dois computadores não era lento
Josh Comley
0

Para mim, mesmo na internet (com taxas de ping> 50ms e largura de banda decente> 1mbit / s), eu tenho um comportamento muito bom no UltraVNC. A mágica vem com a alteração das configurações de conexão.

Depois de iniciar o visualizador, vá para "Opções de conexão", desative "Selecionar automaticamente as melhores configurações", ative "Apertado" e abaixe o "JPEG" para obter qualidade inferior, se necessário (2-4 funciona bem).

Essa é a única maneira que eu conheço de oferecer o Full Colors com desempenho decente. Você receberá vários qps depois, o suficiente para obter uma apresentação de slides rápida em um filme em tela cheia (o suficiente para tudo o que estou fazendo, incluindo desenvolvimento remoto, para assistir a filmes reais muito devagar e também sem áudio).

Além disso, no servidor "Propriedades", é útil ter (se não estiver usando o driver espelhado, o que ajuda muito o desempenho) a ter "Tela cheia de pesquisa", "Janela de primeiro plano de pesquisa", "Janela de pesquisa sob o cursor", "System HookDll", " Precisão baixa "ativada. Basicamente, quase tudo à esquerda.

Andreas Reiff
fonte