길이가 미안해, 좀 필요해
소개
Windows Vista / 7 용 C # 4.0에서 원격 데스크톱 소프트웨어 (재미있게)를 개발 중입니다. 나는 기본적인 장애물을 겪었습니다 : 강력한 UDP 메시징 시스템, 비교적 깨끗한 프로그램 디자인, 미러 드라이버 (DemoForge의 무료 DFMirage 미러 드라이버)가 설치되어 있으며 모두를 위해 NAT 통과를 구현했습니다. 대칭 NAT를 제외한 NAT 유형 (회사 방화벽 상황에 있음).
화면 전송 / 공유와 관련하여 미러 드라이버 덕분에 변경된 화면 영역에 대해 자동으로 알림을 받고 미러 드라이버의 계속 변경되는 화면 비트 맵을 내 비트 맵에 마샬링 할 수 있습니다. 그런 다음 화면 영역을 PNG로 압축하여 서버에서 클라이언트로 보냅니다. 상황이 꽤 좋아 보이지만 충분히 빠르지는 않습니다. VNC만큼 느립니다 (btw, VNC 프로토콜을 사용하지 않고 맞춤형 아마추어 프로토콜을 사용합니다).
가장 느린 원격 데스크톱 소프트웨어에서 가장 빠른 원격 데스크톱까지이 목록은 일반적으로 모든 VNC와 같은 구현에서 시작하여 Microsoft Windows 원격 데스크톱으로 올라간 다음 TeamViewer로 올라갑니다. CrossLoop, LogMeIn에 대해 잘 모르겠습니다. 사용하지는 않았지만 TeamViewer는 엄청나게 빠릅니다. 말 그대로 살아요. tree
명령 프롬프트 에서 명령을 실행하고 20ms 지연으로 업데이트되었습니다. 랩톱보다 몇 밀리 초 느리게 웹을 탐색 할 수 있습니다. Visual Studio에서 세로로 스크롤하는 코드의 지연 시간은 50ms입니다. 이 모든 것을 달성하기 위해 TeamViewer의 화면 전송 솔루션이 얼마나 강력해야하는지 생각해보십시오.
VNC는 폴 기반 후크를 사용하여 최악의 화면 변경 및 무차별 화면 캡처 / 비교를 감지합니다. 기껏해야 DFMirage와 같은 미러 드라이버를 사용합니다. 나는이 수준에있다. 그리고 그들은 RFB 프로토콜이라는 것을 사용합니다.
Microsoft Windows Remote Desktop은 VNC보다 한 단계 높았습니다. StackOverflow 어딘가에서 Windows Remote Desktop이 화면 비트 맵을 보내지 않고 실제 드로잉 명령을 전송한다고 들었습니다. 그것은 간단한 텍스트를 보낼 수 있기 때문에 매우 훌륭합니다 (이 좌표 에서이 사각형을 그리고이 그라디언트로 채색하십시오)! 원격 데스크톱은 실제로 매우 빠르며 집에서 일하는 표준 방법입니다. 그리고 RDP 프로토콜이라는 것을 사용합니다.
이제 TeamViewer는 나에게 완전한 미스터리입니다. 분명히, 그들은 버전 2에 대한 소스 코드를 공개했습니다 (TeamViewer는 2012 년 2 월 현재 버전 7입니다). 사람들은 그것을 읽었으며 버전 2는 쓸모가 없다고 말했습니다. 자동 NAT 통과 기능을 통해 VNC보다 약간 개선 된 것입니다.
그러나 버전 7 ... 지금 엄청나게 빠릅니다. 실제로 Windows Remote Desktop보다 빠릅니다. TeamViewer를 사용하여 DirectX 3D 게임을 스트리밍했습니다 (1fps이지만 Windows Remote Desktop에서는 DirectX를 실행할 수 없음).
그건 그렇고, TeamViewer는 미러 드라이버 없이이 모든 것을 수행합니다 . 하나를 설치하는 옵션이 있으며 조금 더 빠릅니다.
질문
제 질문은 TeamViewer가 얼마나 빠릅니까?가능하지 않아야합니다. 24 비트 깊이 (16 비트 깊이는 눈에 띄게 좋지 않음)에서 1920 x 1080 해상도를 유지하더라도 여전히 6,220,800 바이트입니다. libjpeg-turbo (대기업이 사용하는 가장 빠른 JPG 압축 라이브러리 중 하나)를 사용하여 30KB (압축률이 높음)로 압축하더라도 TeamViewer 서버를 통해 라우팅하는 데 시간이 걸립니다 (TeamViewer는 단순히 트래픽을 프록시하여 기업 대칭 NAT를 우회 함) 그들의 서버). 그리고 libjpeg-turbo 압축은 압축하는 데 시간이 걸립니다. 고품질 JPG 압축은 1920 x 1080 스크린 샷의 경우 175 밀리 초가 걸립니다. 호스트 컴퓨터에서 Atom 프로세서를 실행하면이 숫자가 올라갑니다. TeamViewer가 화면 전송을 어떻게 최적화했는지 이해하지 못합니다. 다시 말하지만 작은 이미지는 압축률이 높을 수 있습니다. 압축하는 데 수십 밀리 초가 걸립니다. 큰 이미지는 압축하는 데 시간이 걸리지 않지만 시간이 오래 걸립니다. 어떻게 든 TeamViewer는이 프로세스 전체를 완료하여 초당 약 20-25 프레임을 얻습니다. 네트워크 모니터를 사용했는데 TeamViewer는 여전히 500Kbps 및 1Mbps 속도에서 지연이 없습니다 (VNC 소프트웨어는 해당 전송 속도에서 몇 초 동안 지연됩니다). 나의 동안tree
명령 프롬프트 테스트, TeamViewer는 1Mbps의 속도로 인바운드 데이터를 수신하고 5-6fps를 계속 실행했습니다. VNC와 원격 데스크톱은 그렇게하지 않습니다. 그래서 방법?
대답은 다소 복잡하고 복잡 하기 때문에 TCP 대신 UDP를 사용하기 때문에 $ 0.02를 게시하지 마십시오 (실제로 TCP를 성공적으로 사용한다고 생각할 것입니다).
StackOverflow의 어딘가에 TeamViewer 개발자가 있기를 바랍니다.
잠재적 인 답변
사람들이 응답하면 이것을 업데이트합니다.
- 내 생각은 무엇보다도 TeamViewer가 매우 훌륭한 네트워크 제어 기능을 가지고 있다고 생각합니다. 예를 들어, 그들은 큰 패킷을 MTU 크기 바로 아래로 나누고 트립을 낭비하지 않습니다. 그들은 매우 빠른 XOR 이미지 비교와 함께 화면 변화를 감지하는 모든 종류의 멋진 고리를 가지고 있습니다.