스트림과 세션
스트림이 끊기거나 흐릴 때, 세션이 저절로 끝날 때의 해결 방법입니다.
스트림 지연·끊김
원인은 보통 셋 중 하나입니다: 에이전트와 릴레이 사이 네트워크, 에이전트 Mac의 자원, 디스플레이 절전.
LAN 유선 권장
에이전트는 릴레이로 영상 프레임을 끊임없이 전송하므로, 둘 사이 연결이 기본 매끄러움을 좌우합니다. 릴레이와 에이전트 머신은 유선 이더넷을 권장합니다. Wi-Fi도 동작하지만 지연과 지터가 늘고, 특히 릴레이 Mac에서는 아래의 주기적 끊김을 일으킬 수 있습니다.
Wi-Fi에서 약 0.5초 주기로 끊기는 경우 (AWDL)
Wi-Fi에서 스트림이 일정한 리듬으로(대략 초당 두 번) 끊긴다면 AWDL(Apple Wireless Direct Link)이 원인일 가능성이 높습니다. AirDrop·AirPlay·Handoff·Sidecar를 담당하는 인터페이스로, 주기적으로 Wi-Fi 채널을 옮겨 다니며 그때마다 데이터 채널을 약 90ms씩 비웁니다. 이것이 톱니 모양 지연과 눈에 보이는 끊김으로 나타납니다.
확실한 해결책은 유선 연결입니다. 이더넷이면 데이터가 무선을 타지 않으므로 AWDL과 무관해집니다.
Wi-Fi를 써야 한다면 시스템 설정에서 AWDL을 잠재울 수 있습니다(되돌리기 쉽고 관리자 권한도 필요 없습니다):
- AirDrop → "받지 않음"
- AirPlay 수신 모드 → 끄기 (시스템 설정 → 일반 → AirDrop 및 Handoff)
- Handoff → 끄기 (같은 패널)
- Bluetooth → 끄기
AWDL은 트리거(AirDrop 검색·AirPlay 수신·Handoff·Bluetooth 근접)가 있을 때만 채널을 옮깁니다. 위 항목을 끄면 잠잠해집니다.
원인 확인은 릴레이 Mac에서 라우터로 촘촘한 간격의 ping을 보내 톱니가 보이는지로 합니다. ping -i 0.01 <router-ip>를 돌려 보고, 유선으로 바꿨을 때 톱니가 사라지면 AWDL이 맞습니다.
고급: awdl0 직접 끄기
sudo ifconfig awdl0 down은 세션 동안 AWDL을 끕니다. 일시적이고(재부팅하거나 다음에 AirDrop을 쓰면 복구됩니다) 관리자 권한이 필요하므로, 위 토글이나 유선을 먼저 쓰세요.
호스트 CPU·RAM 부족
시뮬레이터와 H.264 인코더가 자원을 많이 씁니다. 에이전트 Mac이 빠듯하면(특히 메모리 압박 시) 캡처와 인코딩이 밀립니다.
- 대시보드 Mac Resources 탭에서 해당 Mac의 CPU·RAM 사용량을 확인합니다.
- 릴레이와 에이전트를 다른 Mac으로 분리해 자원 경쟁을 없앱니다(에이전트 확장에도 유리합니다).
- 한 Mac에서 동시에 실행하는 기기 수를 줄입니다.
디스플레이 절전
에이전트는 기본적으로 세션이 활성인 동안 호스트 디스플레이를 깨어 있게 유지합니다. 디스플레이가 꺼지면 GPU가 저전력으로 묶여 시뮬레이터가 느려지기 때문입니다. TAPFLOW_ALLOW_DISPLAY_SLEEP=1을 설정했다면 디스플레이가 꺼질 때 스트림이 느려질 수 있습니다. 에이전트 설정을 참고하세요.
LAN에서 화면이 흐리거나 해상도가 낮은 경우
평문 HTTP의 LAN 연결은 Standard 프로파일을 사용하며, WASM 디코더의 반응성을 유지하기 위해 스트림을 1280px(가장 긴 변)로 제한합니다. 시뮬레이터 원본 해상도로 스트리밍하려면 릴레이를 HTTPS로 제공하세요 — 그러면 Smooth 프로파일(하드웨어 디코딩, 원본 해상도)로 전환됩니다. tapflow 설정의 인증서 방식 참고. HTTPS 없이 제한값만 높이려면 에이전트에서 TAPFLOW_MAX_SIZE_LAN 환경변수를 설정합니다 — 스트림 품질 참고.
세션 관련
세션이 자동으로 종료됨
브라우저 연결이 끊기고 5분이 지나면 릴레이가 에이전트에 기기 종료를 요청합니다. 브라우저가 연결돼 있는 동안에는 입력이 없어도 종료되지 않습니다. 이 시간은 릴레이의 IDLE_TIMEOUT_MS 환경변수(밀리초 단위)로 바꿀 수 있습니다. 대시보드에서 재연결하면 됩니다.