¿Por qué VNC en Windows es tan lento?

28

En una prueba, podría transmitir una película Full HD a través de nuestra red desde la computadora de mi amigo, no hay problema. Es tan rápido como podría desear.

Pero VNC es dolorosamente lento. Hemos probado Real VNC y Tight VNC, he jugado con la Capture Methodconfiguración, pero nada parece hacer la diferencia; Es muy lento.

¿Alguien tiene algún consejo sobre el uso de VNC, sobre cómo mejorar la velocidad, o tal vez alguna alternativa?

¿Es la naturaleza de no ser capaz de notar partes invalidadas de la pantalla lo suficientemente rápido, o hay algo en la red que lo ralentiza?

Los dos estamos usando Windows 7.

Necesitamos poder ver y controlar las PC de los demás sin bloquear el host, por lo que RDP no funcionará (a menos que alguien sepa lo contrario).

Josh Comley
fuente

Respuestas:

27

VNC es simplemente ineficiente. VNC funciona más o menos tomando una serie de capturas de pantalla, comprimiéndolas y colocándolas en la red.

En Windows, RDP le brindará un mejor rendimiento, pero creo que necesita profesionales o mejores en el servidor / fuente para obtener un RDP adecuado.

extrañamente, la asistencia remota puede funcionar mejor para sus necesidades: su RDP con el usuario en la terminal y el usuario en el sistema remoto viendo la misma pantalla

EDITAR: 4 años después, estoy usando nomachine para tareas similares, funcionaría en sistemas operativos y hace algunas otras cosas útiles.

Journeyman Geek
fuente
2
Sí, no funciona en versiones que no sean Pro, aunque supongo que hay una solución alternativa . (Y +1, por supuesto, VNC apesta)
slhck
¡Ah, debería haber estipulado lo que hice en mi edición ahora mismo!
Josh Comley
sesiones simultáneas, se pueden hacer con algún [hackery] ( missingremote.com/guide/… VNC style ... ¿asistencia remota tal vez?. Edité mi respuesta para incluir asistencia remota.
Journeyman Geek
josh Su edición tiene sentido, pero observe la última línea de la publicación @journeyman donde dice que "asistencia remota" puede funcionar mejor. ¿Has mirado en Asistencia remota? Lo uso ocasionalmente y funciona muy bien.
Jay R. Wren
Editado para reflejar que la asistencia remota realmente es lo que necesita usar;)
Journeyman Geek
15

VNC no es comparable a la transmisión de video. En la transmisión de video, generalmente transfiere una transmisión de video precomprimida a través de la red. Para transmisiones en HD a menudo está codificado en H.264. Si usa VNC, su computadora host debe tomar instantáneas de pantalla y comprimirlas antes de enviarlas a la red. Aquí hay varias restricciones:

  • La compresión fuerte necesita mucha potencia de la CPU. Por ejemplo, codificar una película de 90 minutos en H.264 en alta calidad a menudo requiere más de 4 horas de tiempo de compresión en mi servidor Athlon X2 4450e. Por lo general, una compresión tan fuerte no es adecuada para aplicaciones en tiempo real como el control remoto.
  • Una compresión menos fuerte a su vez requerirá más ancho de banda de red, lo que podría convertirse en un problema en conexiones de bajo ancho de banda como Internet.

Bueno, hay un par de "trucos" que aplican los códecs de video y las utilidades de control remoto y uso compartido de pantalla. En primer lugar, intentan detectar los cambios en la pantalla y transferir solo la imagen (comprimida) de los cambios. Esto generalmente ahorra MUCHO ancho de banda y potencia de procesamiento. Sin embargo, para la transferencia de video a pantalla completa no ayuda mucho ya que toda la pantalla tiene que volver a transferirse con demasiada frecuencia. Como se escribió anteriormente, las máquinas actuales probablemente no podrán volver a codificar en tiempo el contenido de su pantalla en Full-HD y transmitirlo a una aplicación de control remoto ya que su host tendrá que decodificar el contenido de video y luego volver a codificar las imágenes en bruto antes de enviar ellos a la red. Algunas máquinas antiguas de doble núcleo incluso están al límite cuando decodifican contenido de video Full-HD.

Para mejorar su velocidad de control remoto VNC puede hacer lo siguiente:

  • La mayoría de los servidores / clientes VNC admiten múltiples algoritmos de compresión. Algunos de ellos están optimizados para un ancho de banda pequeño, algunos para una buena calidad de imagen y otros para baja latencia. Esto toca otro aspecto del control remoto. Dado que el servicio es interactivo, la latencia es importante (no desea ver la reacción a un clic del mouse justo después de 5 minutos de codificación).
  • Intente reducir la cantidad de cambios de pantalla en su máquina host. Por ejemplo, intente deshabilitar los efectos de escritorio de Windows, las animaciones, etc. Esto ahorra ancho de banda ya que solo las partes cambiadas de la pantalla se transfieren por la red.
  • Intente deshabilitar más efectos visuales en el host como la transparencia. Las ventanas transparentes utilizadas por Vista / Win7 reducen la "compresibilidad" de las imágenes. Las áreas unicolor / "planas" son mucho más eficientes para comprimir que los colores vibrantes y los detalles elegantes. Entonces, deshabilitar la transparencia Aero y los efectos de escritorio realmente aceleran la experiencia del control remoto. La mayoría de las herramientas de control remoto incluso permiten desactivar dichos efectos automáticamente en la conexión (por ejemplo, Microsoft RDP y algunas implementaciones de VNC).
  • Lo mismo se aplica a las imágenes de fondo. Intente utilizar la configuración de fondo de un color en lugar de imágenes HD.

Otro problema para VNC es que tiene que detectar los cambios en su pantalla. Algunas implementaciones de VNC hacen capturas de pantalla "tontas" y las comparan con la captura de pantalla anterior para detectar cambios. Esto ya está tomando mucho poder. Algunas implementaciones más avanzadas funcionan con controladores de pantalla especiales (verifique UltraVNC) que son más eficientes aquí pero requieren la instalación de controladores especiales.

Por supuesto, todo esto no ayuda si está reproduciendo un video en su máquina host. En este caso, VNC tendrá que volver a codificar ~ 30 imágenes de pantalla completa por segundo y enviarlas a través de la red. En la mayoría de las compresiones que se pueden realizar en tiempo real por las CPU de hoy en día, dicha transmisión requeriría> 8Mbps de ancho de banda. Por lo tanto, no es adecuado para la mayoría de las conexiones a Internet (especialmente piense en las conexiones DSL asimétricas con una velocidad de carga de menos de 1 Mbps, y sí, es la velocidad de carga lo que importa en el lado del host).

Puede ser adecuado para el uso de LAN, pero aquí probablemente debería pensar más en configurar un servidor de medios o compartir sus medios usando el servidor de medios DLNA / UPnP (incluso el reproductor de medios Win7 puede hacer esto). Luego use un cliente DLNA para reproducir los medios compartidos.

SkyBeam
fuente
1
+1, buena explicación. También elegiría la versión DLNA / Media Server.
slhck
Buen intento pero totalmente equivocado, ni la carga de la CPU ni el uso de la red son altos. Incluso con una simple transferencia de diferencia, podría hacer 20 fps en una red de 1 gib.
Lothar
4

La variante VNC más rápida que he usado es UltraVNC con el controlador Video Mirror instalado. RDP sigue siendo notablemente más rápido, pero no es tan malo.

También escuché cosas realmente buenas sobre ZeroRemote , pero nunca lo probé. Parece que TrueRemote es su sucesor.

afrazier
fuente
No es compatible con GNU / Linux.
Hi-Angel
1

Si está tratando de ver videos a través de una LAN, la solución más rápida en términos de velocidad de dibujo de pantalla es probablemente Radmin .

Shinrai
fuente
3
Intenté Radmin y sí, es comercial, ¡pero vale la pena! Muy rapido. Fantástico.
Josh Comley
1

Como dice @Journeyman Geek, VNC es ineficiente. Esto es por diseño para que VNC no tenga que "entender" lo que el cliente remoto está tratando de mostrar.

RDP realmente lo hace, por lo que puede tomar atajos y renderizar imágenes más rápido. RDP le dice al otro extremo, por ejemplo, "el cliente abrió una ventana en esta ubicación" en lugar de enviar los datos de mapa de bits que representan el cambio de pantalla.

Existen trucos de "servidor de terminal" que agregarán la capacidad RDP a las versiones de Windows que no los incluyen, pero no los recomiendo oficialmente y los usa bajo su propio riesgo. Sin embargo, creo que incluso las versiones "Starter" de Windows 7 vienen con "Asistencia remota" (msra.exe) que puede intentar usar.

Sin embargo, las cosas que puede hacer para mejorar el rendimiento de VNC incluyen reducir la profundidad de visualización a 8 bits, disminuir la resolución de la pantalla del cliente y usar el almacenamiento en caché del mapa de bits del lado del cliente. Eso significa que VNC tiene que enviar menos datos por cable y experimentarás un mejor rendimiento (pero no se verá bonito).

LawrenceC
fuente
0

Si busca rendimiento no necesita usar VNC, pruebe algo como LogMeIn . Es gratis y funciona bien.

Jeff F.
fuente
¡Acabo de probar LogMeIn, no me gustó en absoluto!
Josh Comley
3
Me encanta LogMeIn para el control remoto, pero ¿para video? De ninguna manera. VNC es al menos P2P. Va directamente entre el origen y el destino. LogMeIn introduce una conexión a través de su servidor, lo que significa que tiene una latencia mucho mayor. Todos los problemas con VNC y algunos más. Es potente para lo que está diseñado, pero no está diseñado para video en pantalla completa en tiempo real.
music2myear
No estoy tratando de hacer video, solo usé video como prueba para asegurar que la conexión entre las dos computadoras no fuera lenta
Josh Comley
0

También puede probar TeamViewer, es gratis para uso no comercial y fue bastante rápido para mí. Sin embargo, no lo he probado en video HD.

wizzard0
fuente
0

Para mí, incluso a través de Internet (con velocidades de ping> 50 ms y ancho de banda decente> 1mbit / s) obtengo un muy buen comportamiento en UltraVNC. La magia viene con cambiar la configuración de conexión.

Después de iniciar el visor, vaya a "Opciones de conexión", deshabilite "Seleccionar automáticamente la mejor configuración", habilite "Tight" y baje el "Jpeg" a una calidad inferior, si es necesario (2-4 funciona bien).

Esa es la única manera que conozco de obtener colores completos con un rendimiento decente. Después obtendrá varios fps, suficiente para obtener una presentación rápida de diapositivas en una película a pantalla completa (suficiente para todo lo que estoy haciendo, incluido el desarrollo remoto, para ver películas reales demasiado lento y tampoco hay audio).

Además, en el servidor "Propiedades", es útil tener (si no se usa un controlador espejo que ayuda mucho al rendimiento) tener "Encuesta de pantalla completa", "Ventana de encuesta de primer plano", "Ventana de encuesta bajo el cursor", "Sistema HookDll", " Baja precisión "activado. Básicamente, casi todo a la izquierda.

Andreas Reiff
fuente