项目用到,所以花点时间分析,这里记录下来备份和分享
土豆完全通过javascript来判断,我们不能暴力修改这些javascript,但是我们可以修改我们自己的plugins来满足其判断条件。
1 flash的object HTML块是通过javascript动态生成的,如下
<DIV class="player">
<SCRIPT>
tudouPlayer.load({ iid: iid, lid: lid, name: 'playerObject',
player: "http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf",
mobile: "http://js.tudouui.com/bin/player_online/as2player_0.swf",
mini: "http://js.tudouui.com/bin/tudoumini/TudouMini_36.swf"
});
</SCRIPT>
</DIV>
2 这里的load函数会判断:
if ((/apple.*mobile.*safari/.test(navigator.userAgent.toLowerCase()))){ 。。。 }
如果你的浏览器的userAgent不幸含有“/apple.*mobile.*safari/”这个正则规则,很不幸,土豆认为您是使用iPad。
虽然,Android 2.2的浏览器也符合这个正则规则!!
3 判断flash插件是否安装,以及版本符合要求:
if (navigator.plugins && navigator.mimeTypes.length) {
var a = navigator.plugins["Shockwave Flash"];
if (a && a.description) {
b = a.description.replace(/^/D+/, "").replace(//s*r/, ".").replace(//s*[a-z]+/d*/, ".0").split(".")
}
} else { 。。。 }
你自己的插件必须叫“Shockwave Flash”,其description必须满足被上面的正则刷过以后返回3位数组,而且数组[0]的值大于9
直接抄袭Adobe Flash插件就是了,这么麻烦去想它干什么?
以下是我firefox地址栏输入:about:plugins的相关打印,供参考。
MIME 类型 | 描述 | 后缀 | 已启用 |
---|---|---|---|
application/x-shockwave-flash | Shockwave Flash | swf | 是 |
application/futuresplash | FutureSplash Player | spl | 是
|
二补充,土豆如何取的真正视频地址:============= 2010 08 23=======
在满足上述条件以后,我们会得到一个通过javascript生成的<objecet> ... </object> 块。下面对这个object块进行说明:
---------
<object id="playerObject" width="100%" height="100%" name="playerObject" data="http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf" style="" type="application/x-shockwave-flash"><param name="bgcolor" value="#000000"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="quality" value="high"><param name="flashvars" value="iid=57694134&lid=9877405&uid=0&channel=0&default_skin=0&tudouMini=http://js.tudouui.com/bin/tudoumini/TudouMini_36.swf&hd=0&referrer=&href=http%3A%2F%2Flocalhost%2F1.htm&USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Safari/533.4&document_title=&juid=bcgn14049ck&isRec=0&durl=http://fpdownload.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_plugin.msi&ports=100:0&statratio=1000&safekey=IAlsoNeverKnow&gettime=tudouLoadTime.get&theme=black&noHd=0&cs=350&ct=180&ca=0&cb=0.1&ctime=5000&cp=20&nc=0&actionID=0&ID=0&adOwnerId=0&adPositionId=0&isNielson=0&isRenhe=0&playHd=0&vurl="></object>
---------
在进一步精简后得到:
-------------
<object width="100%" height="100%"
data="http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf"
type="application/x-shockwave-flash"
>
<param name="flashvars" value="iid=57694134& >
</object>
-------------
走到这里我们发现土豆的整体思路是:通过javascript取得相关参数,format成HTML的object块,然后通过“flashvars"将视频的具体参数发送到”TudouVideoPlayer_Homer_152.swf“这个flash文件由它和服务器通讯,取得最终需要播放的视频文件。
剩下的事情:
1 研究这个swf文件,得到其算法,通讯协议
2 在设备上播放这个swf文件
三,研究结果
To Be Continue...