前言
众所周知,视频在网页中使用FLV格式是最常用和方便的(原因你懂得),但是当我们在移动平台上就会遇到麻烦(FLASH不被这些移动设备支持,为啥?我也不知道!)但是这样一个需求来了,在Android平台上播放YouKu的视频。
So, 我就开始研究了!
分析
经过一番研究我发现,他们其实是有另外一个格式的视频存在,但是需要成为他们的合作伙伴(也就是想用的得意思意思)。因此得出结论方法有二:
- 成为他们的合作伙伴(这得花点买路钱)。
- 条条大路通罗马,绕道走。
过程
方法一,这里就不讨论了。我们主要讲方法二(如何绕道)。
第一步:网页内嵌的播放地址 例如:http://player.youku.com/player.php/Type/Folder/Fid/18117290/Ob/1/sid/XNDQ0MDQzMTgw/v.swf
猜测可得出“XNDQ0MDQzMTgw”这一段为视频的索引也就是ID
而优酷android app请求服务器的url为:
http://api.3g.youku.com/layout/phone2_1/play?point=1&id=XNDQ0MDQzMTgw&pid=352e7f78a0bc479b&format=4&language=guoyu&audiolang=1&guid=c7a0fd9f8f19ea5cbafde16f327f8004&ver=2.3.1&operator=%E4%B8%AD%E5%9B%BD%E8%81%94%E9%80%9A_46001&network=WIFI
返回值是一个json数据如下:
根据几次测试得出结论:
{ "status":"success", "lang":"", "title":"\u5916\u4ea4\u90e8\u56de\u5e94\u65e5\u9a7b\u534e\u5927 \u4f7f\u5750\u8f66\u60ac\u6302\u7684\u56fd\u65d7\u88ab\u62a2\uff1a\u4e2d\u65b9\u6b63\u5728 \u8ba4\u771f\u8c03\u67e5[\u770b\u4e1c\u65b9]", "weburl":"http://v.youku.com/v_show/id_XNDQ0MDQzMTgw.html", "videoid":"XNDQ0MDQzMTgw", "results":{ "3gphd":[ { "seconds":26,"url":"http://f.youku.com/player/getFlvPath/sid/134625952093737_01/st/mp4/fileid/ 0300200100503C2912CACF06F7B7BE321D4B39-09C7-D266-1DC7-72FBD749E129? K=74d69d0e9a11e5ab261c87ec&hd=0", "id":1, "size":959876 } ], "3gphd_rtsp":[ {"seconds":26,"url":"rtsp://vod1.3g.youku.com/0300200100503C2912CACF06F7B7BE321D4B3 9-09C7-D266-1DC7-72FBD749E129.mp4","id":1,"size":959876} ] }, "points":[], "totalseconds":29.3, "audiolang":[] }
根据几次测试得出结论:
results结果中的rtsp协议结果为mp4直实地址。但是悲剧的是这个协议我们用不起来!所以只能使用上面的http的url
http://f.youku.com/player/getFlvPath/sid/134625952093737_01/st/mp4/fileid/0300200100503C2912CACF06F7B7BE321D4B39-09C7-D266-1DC7-72FBD749E129?K=74d69d0e9a11e5ab261c87ec&hd=0
再请求这个url查看response的header中type为mp4数据,而且已经经过服务器根据您当前网络环境计算返回给你一个下载速度最快的url了(据猜测)。
得到json的url中参数可根据语意猜测,但是个另参数具体用途还没有揣摩清楚,不过基本没有大碍了。 以下是参数含义的猜测,不一定正确哈。
point
当前播放秒数id
视频索引IDpid
未知format
可能是视频格式language
未知audiolang
未知guid
未知ver
系统版本operator
移动信号运营商(如:中国联通)_46001(这个部分不理解)network
(当前的上网方式)
结论
把播放视频的索引id代入到api的url参数中,从服务器得到mp4视频的地址……