← 홈으로

2026 · 개인 · 비공개

RemoteDesk

휴대폰에서 Windows PC를 WebRTC로 원격 제어

역할
설계·구현 전부
기간
2026.07 – 2026.08
상태
M3 완료
스택
C#, .NET 9, WebRTC, H.264, Kotlin, Node.js
링크

배경

소파에서 휴대폰으로 방 안 PC를 조작하고 싶었습니다. 기존 원격 데스크톱은 계정·중계 서버·설치 과정이 무거워서, 내 PC와 내 폰 사이에만 필요한 최소 구성으로 직접 만들었습니다.

무엇을 만들었나

  • 호스트: .NET 9 라이브러리(RemoteDesk.Core) + WPF 트레이 앱 + 콘솔 CLI(진단 프로브 포함).
  • 시그널링: Node.js WebSocket 릴레이. 같은 포트에서 브라우저 뷰어도 서빙합니다.
  • 뷰어: Kotlin 안드로이드 앱과 브라우저 뷰어(참조 구현).
  • 조작: 직접 터치(누른 자리 클릭)와 트랙패드(상대 이동) 두 모드. 탭은 좌클릭, 길게 누르면 우클릭, 두 손가락은 스크롤, 드래그는 버튼을 누른 채 이동. Ctrl·Alt·Shift·Win은 눌린 상태로 고정됐다가 다음 입력에서 함께 발동합니다.

기술적 결정

  • 하드웨어 H.264 + WebRTC: 지연을 줄이려 소프트웨어 인코딩 대신 GPU 인코더를 쓰고, 영상은 WebRTC 미디어 채널, 입력은 데이터 채널로 보냅니다.
  • 파이프라인은 하나: 캡처·인코딩은 시청자 수와 무관하게 한 개만 돌고, 첫 시청자가 붙을 때 시작해 마지막 시청자가 나가면 멈춥니다. 대기 중인 호스트는 GPU를 쓰지 않습니다.
  • 설정은 %APPDATA%\RemoteDesk\config.json에 저장되고, 커맨드라인 인자가 설정 파일을 덮어씁니다. 창을 닫아도 트레이에 남습니다.

실측

로컬, 2560×1440 소스 기준으로 1920×1080 30fps, 약 2.1 Mbps, 패킷 손실 0, RTT 15~31 ms.

상태

M3: 브라우저를 열고 host id를 넣으면 PC 화면이 보이고 터치로 조작됩니다. 브라우저 뷰어가 기준 구현이고, 안드로이드 뷰어는 같은 프로토콜을 따릅니다.