1. 背景
目前基于Wi-Fi Display的应用越来越少,随着Android AOSP放弃UI上对Wi-Fi Display的支持,后续对ChromeCast的支持力度会不断增加。而ChromeCast 则是基于DIAL协议进行的扩展和封装。
对于多屏幕的支持,目前除了保持对Wi-Fi Display现有的力度,后续会逐渐切换到DIAL协议或Amazon的WhisperPlay SDK的学习上。 此篇则记录了基于最新的DIAL协议的一些简单分析。
2. 资料
DIAL specification: http://www.dial-multiscreen.org/dial-protocol-specification(v2.1) 对应的中文版本下载(csdn需1积分):
DIAL Server/Client Sample Code:https://github.com/Netflix/dial-reference
测试设备:2台android设备(因后续交叉编译需要有编译环境,使用公司设别进行测试)
测试抓取的wireshark 封包(server IP:192.168.43.105 Client IP:192.168.43.208 AP:192.168.43.1),使用filter (!(ip.addr == 192.168.43.1)&&!(ip.addr == 8.8.8.8))后只查看server和client通讯
3. 基本原理
DIAL是DIscoveryAndLaunch的缩写,主要应用是让second-screen上的应用发现并启动first-screen设备上的应用。
这里需要解释一下一下几个名词:
- First-screen : a TV, Blu-ray player, set-top-box, or similar device,可以简单认为是大屏幕的设备
- Second-screen : a smartphone, tablet, or similar device,即小屏幕设备
- DIAL Server: a device implementing the server side of the DIAL protocol, usually a first-screen device.
- DIAL Client : a device that can discover and launch applications on a DIAL server, usually a second-screen device.
DIAL Service Discovery
M-Search
- Client端向239.255.255.250:1900地址广播M-Search消息,消息会设定ST(Seach Target)为urn:dail-multiscreen-org:service:dial 1。
- Server会监听该端口,并回复该端口的广播信息。回复信息中会包含LOCATION URL(包含本地IP地址)或WAKEUP字段(如果支持WoL或WoWLAN)。Client收到回复后,需要存储支持WAKEUP字段的Server信息,用于远程唤醒。
GET Location URL
- Client端发送HTTP GET消息用于获取Server更多信息。
- Server回复消息中会包含Application-URL