使用xbmc/kodi作为dlna render设备时,连接到某些wifi热点/路由器上,不能被dlna control找到发现的问题——原因是WIFI模组深度优化后,从省电模式唤醒时,会丢失组播包

测试环境及条件如下:
1)wifi热点为我们工作环境用的普通路由器时,xbmc安装在开发板上,作为dlna render设备时,是可以被dlna control(为手机上的音乐apk,如魅族MX4 Pro自带的音乐apk)发现的。
但是,当wifi热点是采用tplink的TL-TR861 5200L无线路由器MIFI( http://www.tp-link.com.cn/product_290.html [ ^])或者用手机做wifi热点时,则常常找不到xbmc/kodi,无法推送音乐给开发板上的xbmc。采用上述热点,基本是非常偶尔的情况下能找到xbmc.
在开发板上用tcpdump抓包发现,开发板似乎只能抓到板子自身发出去的网络包,偶尔抓到两个其它设备发出的udp广播包 (MBNS),大部分其它设备发出的网络包抓不到。

所以,dlna推送时找不到开发板上的xbmc,应该是就没有收到手机音乐apk发出的查找dlna render的udp组播包

如果先启动手机上的推送音乐的apk,然后再启动开发板上的xbmc,此时是手机端是能够发现开发板的xbmc并推送音乐给它的。原因是手机端能收到xbmc启动上线时的notify组播包,然后主动询问连接了开发板。

2)将xbmc作为dlna render,装在其它平板上,同样链接到tplink的TL-TR861 5200L无线路由器MIFI,与我们的开发板进行对比测试。

与其它平板对比发现,在其它平板上的xbmc是能够被手机端发现的,而我们的开发板不能——主要表现为组播的丢包率比较高。

3)将xbmc与其它的dlna render的apk(采用了DLNA互动播放器)进行对比:xbmc与dlna互动播放器均安装到我们的开发板上,且wifi连接到tplink的TL-TR861 5200L无线路由器MIFI:

对比可见:使用DLNA互动播放器(基于cling开发的dlna render apk),它在开发板子上能轻易被手机找到,原因是xbmc的dlna库是采用platinum库,DLNA互动播放器采用cling库。DLNA互动播放器会以一定周期不停发送ssdp的notify组播包,通知同一网络中其它设备自己的存在,这样,即使没 有收到推送方的Search包,依旧可以通过notify包来让自己被推送方发现。
而xbmc没有周期性发送ssdp包。我们也不能采用上述方法,因为如果采用,则开发板将不能进入休眠,会比较耗电。同时,这样的方法也会给网络环境带来不影响,产生大量的垃圾包。

后与wifi模组厂商联系,发现最终原因:

我们开发板采用的wifi模组是经过深度优化的,连接到tplink的TL-TR861 5200L无线路由器MIFI上时,与连接到工作环境下的普通路由器相比,测试时,前者——TL-TR861 5200L无线路由器比较闲,只有推送设备的手机与开发板连接其上,开发板的wifi模组会进入到一个省电模式,当wifi模组被唤醒,退出省电模式时,会丢失几十到几百个组播包(单播不丢失),所以导致开发板收不到推送设备上线的组播search包。而后者——工作环境下的普通路由器因为有很多设备连接其上,比较繁忙,开发板的wifi不能进入到一个省电模式,一直工作在正常模式下,所以不会丢失组播包

至于xbmc作为dlna render被装到其它平板上,能被推送设备发现,是因为其它平板的wifi模组没有做此深度优化。

猜你喜欢

转载自blog.csdn.net/yypony/article/details/45672721