내 Windows PC 화면을 다른 기기로.
AetherStream은 DXGI Desktop Duplication으로 Windows 화면을 캡처하고, GPU의 Media Foundation 하드웨어 인코더(소프트웨어 폴백 포함)로 H.264 인코딩한 뒤 UDP로 Windows·Android 클라이언트에 전송합니다. 키보드·마우스·컨트롤러 입력은 호스트로 되돌려 보냅니다. 현재는 알파 단계이며, 지금 되는 것과 안 되는 것을 아래에 그대로 공개합니다.
- v0.1.0에는 암호화·인증이 없습니다. 호스트가 실행 중일 때 같은 네트워크의 다른 기기가 화면을 수신하고 호스트 PC에 키보드·마우스 입력을 보낼 수 있습니다. 완전히 신뢰하는 네트워크에서만 사용하고, 스트리밍하지 않을 때는 호스트를 종료하세요. PIN 페어링과 암호화를 적용한 프로토콜 v2를 개발 중입니다.
- 방화벽 규칙. v0.1.0 인스톨러는 모든 네트워크 프로필에서 UDP 47998–47999 인바운드를 허용하며, 제거 프로그램이 이 규칙을 지우지 않습니다. 관리자 권한 터미널에서 다음 명령으로 제거할 수 있습니다:
netsh advfirewall firewall delete rule name="zerodoc AetherStream UDP" - 로컬 PIN 노출. v0.1.0 데스크톱 앱이 실행 중일 때 로컬 엔드포인트를 통해 같은 PC에서 연 웹페이지에 호스트 PIN이 노출될 수 있습니다. 수정을 진행 중입니다.
- 서명되지 않은 빌드. Windows 인스톨러는 코드 서명이 없어 SmartScreen 경고가 표시되며, Android APK는 개발용 키로 서명되어 있습니다. 반드시 이 페이지의 공식 링크로만 받으세요.
지금 되는 것과 안 되는 것
2026-11-03 내부 코드 감사 기준입니다. "진행 중"은 작업이 진행되고 있다는 뜻이며 완료가 아닙니다. 이 표는 실제 실행으로 검증된 변경이 있을 때만 갱신합니다.
| 영역 | 상태 | 내용 |
|---|---|---|
| 화면 캡처 | 구현됨 | DXGI Desktop Duplication, 프레임을 GPU 메모리에 유지. 마우스 커서는 아직 스트림에 합성되지 않습니다. |
| 영상 인코딩 | 부분 | Media Foundation 하드웨어 인코더로 H.264, OpenH264 소프트웨어 폴백. GPU 제조사별 호환성은 아직 검증하지 않았습니다. NVIDIA 인코더 직접 연동은 검토 중입니다. |
| 암호화 전송 (프로토콜 v2) | 진행 중 | SPAKE2 기반 PIN 페어링, 모든 패킷 ChaCha20-Poly1305 암호화, 단일 UDP 포트(47998). v0.1.0은 모든 데이터를 평문으로 전송합니다. |
| Windows 클라이언트 | 부분 | 테스트 하네스에서 1080p H.264 디코딩 확인. 색 변환이 CPU에서 실행되며, 디코딩을 UI 스레드에서 분리하는 작업이 진행 중입니다. 전 구간 스트리밍은 재검증하지 않았습니다. |
| 오디오 | 부분 | 호스트에서 시스템 오디오 캡처(WASAPI 루프백). Windows 클라이언트의 오디오 재생은 미구현입니다. |
| 키보드·마우스 | 진행 중 | 호스트는 Win32 SendInput으로 입력을 주입합니다. 클라이언트 간 입력 포맷 통일 작업 중입니다(v0.1.0은 키 누름/뗌과 마우스 상대 이동 처리에 오류가 있습니다). |
| 게임 컨트롤러 | 부분 | ViGEmBus 드라이버를 통한 호스트 가상 Xbox 360 컨트롤러. 공용 코어 적용 전까지 클라이언트별 버튼 매핑이 다릅니다. |
| 패킷 손실 복구 | 미구현 | 패리티(FEC) 코드는 있으나 실제 스트림에 쓰이지 않습니다. 로드맵 M5. |
| 인터넷 너머 접속 | 진행 중 | 랑데부 서비스와 STUN을 이용한 8자리 룸코드(XXXX-XXXX). v0.1.0은 같은 로컬 네트워크에서만 동작합니다. |
| Android 클라이언트 | 부분 | MediaCodec 하드웨어 디코딩 경로. 감사 시점에 실기기 검증은 하지 않았습니다. |
| iOS / iPadOS 클라이언트 | 로드맵 | 디코더·렌더러 코드는 있으나 빌드 가능한 앱이 아직 없습니다. 로드맵 M8. |
| 지연시간 측정 | 로드맵 | 종단간 지연을 측정한 적이 없습니다. Glass-to-Glass 측정 하네스는 로드맵 M1입니다. |
자세히: 아키텍처 · 공개 수치 레지스트리
동작 방식
단계별 소요 시간은 일부러 표시하지 않습니다. 기준선 측정(로드맵 M1) 후 하드웨어·해상도·프레임레이트 조건과 함께 공개합니다.
- 01 호스트캡처DXGI Desktop Duplication
- 02 호스트인코딩H.264, Media Foundation 하드웨어 인코더 또는 OpenH264
- 03 호스트암호화ChaCha20-Poly1305 (v2, 진행 중)
- 04 네트워크전송UDP 단일 포트 47998
- 05 클라이언트디코딩Media Foundation(Windows), MediaCodec(Android)
- 06 클라이언트표시 + 입력입력은 호스트로 되돌려 전송
보안 설계
원격 입력은 호스트 PC 앞에 앉아 있는 것과 같은 권한이므로, 프로토콜 v2는 모든 통신을 인증하고 암호화합니다. 아래 세 항목은 모두 진행 중이며 v0.1.0에는 적용되어 있지 않습니다.
6자리 PIN, 최초 1회
호스트가 PIN을 표시하고, 클라이언트는 SPAKE2로 PIN을 증명합니다. 도청자가 PIN을 오프라인으로 대입해 볼 수 없으며, 반복 실패 시 해당 송신자를 잠급니다.
모든 패킷 암호화
영상·오디오·입력·클립보드 전부 ChaCha20-Poly1305 봉투에 담기며, 방향별 키와 재전송 방지가 적용됩니다. 암호화되지 않은 패킷은 폐기합니다.
단일 포트, 로컬 서브넷
UDP 포트는 47998 하나입니다. 새 인스톨러는 방화벽 규칙을 개인 네트워크·로컬 서브넷으로 제한하고 제거 시 규칙을 삭제합니다.
명세: 프로토콜 v2
다운로드
바이너리는 GitHub Releases에서 배포합니다. 설치 전 이 페이지 상단의 v0.1.0 주의사항을 확인하세요.
제공하지 않음
- 빌드 가능한 앱이 아직 없음 (로드맵 M8)
- TestFlight 빌드 없음
전체 릴리즈와 노트: github.com/pqowp90/AetherStream-Release/releases.
GitHub가 v0.1.0 파일에 대해 표시하는 SHA-256 — 인스톨러: 2d028a0fae3c27a97dc9e21d42961d5f9ca967545157f4119d28e3b360d02354,
APK: d82ad289c5200f4ac7faf0f4a3f8af9cf413455a829d34f007ffc32d27a95851.
확인 방법: Get-FileHash -Algorithm SHA256 <파일>