只用MulticastLock是不够的。
先看ubuntu miniDLNA/android BubleUPnP 的抓包例子:
# 192.168.2.103:33940 --> 239.255.255.250:1900
M-SEARCH * HTTP/1.1
Man: "ssdp:discover"
Mx: 3
Host: 239.255.255.250:1900
St: ssdp:all
# 192.168.2.109:1900 --> 192.168.2.103:33940
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1810
DATE: Mon, 05 Jan 2015 15:27:27 GMT
ST: uuid:4d696e69-444c-164e-9d41-206a8a7025d1
USN: uuid:4d696e69-444c-164e-9d41-206a8a7025d1
EXT:
SERVER: 3.13.0-43-generic DLNADOC/1.50 UPnP/1.0 MiniDLNA/1.1.4
LOCATION: http://192.168.2.109:8200/rootDesc.xml
Content-Length: 0
miniDLNA是开源的C代码,而我只关心android上怎么实现dlna client, 无赖BubleDLNA是闭源的。网上搜了一个例子UpnpDemo[1],核心部分是cling[2]。
而我关心的是里面的AndroidRouter。
# AndroidRouter
super.lock();
setWiFiMulticastLock(true);
setWifiLock(true);