iOS/Android 모바일 디바이스들 사이에서 P2P 형태로 데이터 전송을 하는 방법에 대해 리서치 할 일이 있어서 알아본 내용을 간단히 공유합니다.
네트웍 타입별 Android/iOS P2P 연결 가능성 체크
- Bluetooth
- 애플 MFi인증 디바이스만 iPhone/iPod과 Bluetooth 연결 가능
- MFi는 apple에서 accessary 제조업체들이 만든 하드웨어를 인증하는 제도 (안드로이드는 인증되지 않음)
- Bluetooth Low Energy
- BLE는 애플 MFi인증 제약이 존재하지 않아서 안드로이드/iOS간 연결 가능
- BLE는 말그대로 저전력으로 설계된 spec이기때문에 전송 속도가 매우 느림
- iOS는 모두 지원하지만 안드로이드 디바이스별로 지원 스펙이 다름 (제대로 지원안하는 경우도 있음)
- BLE의 최대 전송속도
- Apple guide line을 따르는 BLE 디바이스라면 디바이스에따라 이론적인 최대 전송속도 8~32kbps 정도가 한계
- packet interval, MTU size 파라메터에 맞춰 application이 전송하는 데이터를 완벽하게 fit 시켰을때 나올 수 있는 이론적인 수치. 실제로는 더 느릴것 같음
- https://devzone.nordicsemi.com/question/3440/how-do-i-calculate-throughput-for-a-ble-link/
- Apple guide line을 따르는 BLE 디바이스라면 디바이스에따라 이론적인 최대 전송속도 8~32kbps 정도가 한계
- WiFi
- 동일 네트워크 라우터에 접속한 디바이스들사이에서 P2P 연결 가능
- multicast를 지원하는 라우터인경우 mDNS(ex: Apple Bonjour)를 이용하여 자동으로 동일 네트웍상의 디바이스를 찾아 주는 것이 가능
- 개인적으로 사용하는 office/home wifi가 아닌 WiFi hotspot 같은 공용 라우터의 경우 P2P 연결이 안될 가능성이 높음.
- 뮤직 서버에서 P2P연결 시작만 중계하는
- NAT 뒤에 연결된 디바이스들도 연결이 가능하긴 함 UDP 홀펀칭 등의 방식을 사용하면 어느정도 커버가능하긴하지만 100% 연결 보장은 힘듦
- 동일 네트워크 라우터에 접속한 디바이스들사이에서 P2P 연결 가능
- 참고자료
3rd party frameworks
- Google Nearby
- Bluetooth, BLE, WiFi 등의 연결방식을 상황에따라 적절히 조합해서 근처에 있는 device를 찾아서 연결해주는 framework
- 아래 두가지 API set이 있는데 상황/용도에따라 다르게 사용
- Message API
- iOS/Android
- small payload only through google server (devices do have to be connected to the Internet).
- 음원전송은 불가능
- Connection API
- Android ONLY
- P2P connection: message, file, stream transfer support
- 음원전송에 적합
- http://p2pkit.io
- 유료 framework
- $0.01/ MAU
- Android/iOS 둘다 서포트 하지만 GoogleNearBy 와 동일하게 대역폭한계로 음원전송에는 부적합해보임
- 20 messages per second and cannot exceed the size of 100KB
- 유료 framework