2016년 6월 1일 수요일

Screen Mirroring via Wifi - socket 기반의 minicap 오픈소스

8인치 tablet 이 오는동안 어떻게 하면 TMap의 Screen Mirroring 을 좀 빠르고 이쁘게 할 수 있을까 고민을 해 봤다. 다양한 app 을 다 설치 해 보고, rooting 을 제외한 google 에서 검색되는 거의 모든 시도를 해 봤지만, 느린 성능과 광고 그리고 web page 에 embedding 할 수 없는 문제로 맘에 드는 것을 찾지 못했다.

그!런!데!
스타벅스에서 커피를 몇잔이나 마시고 마지막 잔이 다 식어 갈 때쯤 minicap 이라는 어마어마한 놈을 찾았다. realtime screen mirroring 을 socket 기반으로 하는데 root 권한이 필요 없고 30~40 fps 정도 나온다고 설명이 되어 있다. 며칠동안 Tmap 을 미러링 하기 위해 여러가지 solution 을 찾고 설치하고 테스트를 했는데 이거 한방으로 모든게 해결 됐다.

사용 방법은 간단하다.
1. minicap 설명대로 build 하고 실행한다.
  - easy way 만으로도 충분하다.
2. example 을 설명대로 실행 해 주고
3. web 에서 결과물 (http://localhost:9002) 을 확인한다.

example 의 public/index.html 을 보면 알 수 있지만, <img> 의 canvas 를 직접 사용할 수 있기 때문에 화면 구성을 내 맘대로 할 수 있다. Nexus6 의 홈 버튼도 숨기고 상태바로 crop 하면 깔끔한 map 만 도려 내서 html 안에 embedding 이 가능하다는 말.

백문이 불여일견 이니 그림으로 설명을 하면,
resizing / crop 을 하지 않은 원본
일반적인 screen mirroring 을 결과는 안드로이드 화면을 그대로 옮겨 오기 때문에 보기 싫은 홈버튼과 상태바가 있다.
반으로 resizing / 상태바, 홈 버튼을 crop 한 수정본
그런데 이것을 resizing, crop 이 가능하다는 말씀.

이것이 끝이 아니다. adb 기반으로 하기 때문에 굳이 usb 가 아닌 wifi 로 사용이 가능하다.
$ adb tcpip 5555
$ adb connect {android ip address}
$ adb forward tcp:5555 localabstract:minicap
$ PORT=9002 node app.js

usb 에 비해 0.5 초? 정도의 latency 는 있는 것 같지만, 거의 느껴지지 않는다.
이정도 성능이면 play 스토어에서 돈받고 파는 것들 보다 좋지 아니한가!

Wifi 로 테스트 한 것을 영상으로 남겨봐야 겠다.

이제 html 만 잘 꾸미면 아우디 부럽지 않은 dashboard 를 만들 수 있을 것 같다.

댓글 1개:

SeaMan :

양방향 미러링 기능 구현 개발을 하려고 하는데...
도움을 청하면 받을 수 있을런지요?