·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0优酷地址解析方案及实例下载

时间:2014-02-26 09:02oschina.net
优酷地址解析方案及实例下载,酷播优酷插件集成了极酷阳光播放器,使用优酷开放API,实现直接读取youku视频id或网址,分析并播放视频,功能非常强大。

酷播优酷插件(V1.0)(基于极酷阳光播放器V2.5版) 效果图示例

实例下载

http://www.52player.com/VideoPlayer/2014/021327.html

先来看一下解析后的视频地址:

http://f.youku.com/player/getFlvPath/sid/130086939328910582812_00/st/flv/fileid/03000201004D8858360BD1047C4F5FF471CDD7-C742-8D74-3EED-90A9EF54EEC1?K=de1515a31372faac182698bc

以上三段红色部分分别代表sid、fileid和key。

优酷的视频下载有以下几个特点:

  1. 地址动态生成,每次请求返回的地址都不一样。
  2. 有效时间短,得到的下载地址大约只有1小时的有效时间。
  3. 视频地址经过加密,需在客户(用户)端进行解密。
  4. 长视频会被分割成多段短视频。
  5. 对视频下载没有限制,即用户A得到的下载地址,用户B也可以下载。

我们来分析一下这个地址,除了固定的部分以外,整个地址由sid、fileid和key三部分组成,下面我们逐一来分析如何解析这三个值。

以普通的优酷视频播放地址为例,

http://v.youku.com/v_show/id_XMjUyODAzNDg0.html

把其中的红色部分复制出来,拼在

http://v.youku.com/player/getPlayList/VideoIDS/

后面,得到

http://v.youku.com/player/getPlayList/VideoIDS/XMjUyODAzNDg0

访问该地址得到json格式的字符串,其中我们感兴趣的内容是:

  1. "seed":6302, 
  2. "key1":"bd7c3d19", 
  3. "key2":"de1515a31372faac", 
  4. "fileid":"13*18*13*13*13*11*13*42*13*13*39*44*41*41*47*41*18*29*13*60*44*42*13*39*17*33*39*56*47*56*56*39*17*42*33*44*44*17*54*33*17*39*11*54*41*44*17*39*54*18*55*55*44*54*38*13*57*38*55*56*47*39*55*55*33*42*",  

我们的解析工作需要用到上面的这些内容。这里要说明一下,因为地址是动态生成的,每次请求返回的结果都不一样,所以你看到的和上面是不一样的,但是不影响解析的过程。

生成sid

sid是一个随机数,我们可以这样获得

  1. private String genSid() {   
  2.   int i1 = (int)(1000+Math.floor(Math.random()*999));   
  3.   int i2 = (int)(1000+Math.floor(Math.random()*9000));   
  4.   return System.currentTimeMillis()+"" + i1+"" + i2;   
  5. }   

假设返回”130086939328910582812″。

生成fileid

优酷返回的fileid已经做了加密工作,好在并不难解,利用上面得到的fileid和seed

  1. private String getFileID(String fileid,double seed){   
  2.   String mixed = getFileIDMixString(seed);   
  3.   String[] idsfileid.split("\\*");   
  4.   StringBuilder realId = new StringBuilder();   
  5.   int idx;   
  6.   for (int i=0; i< ids.length; i++){   
  7.     idx = Integer.parseInt(ids[i]);   
  8.     realId.append(mixed.charAt(idx));   
  9.   }   
  10.   return realId.toString();   
  11. }   
  12.    
  13. private String getFileIDMixString(double seed){   
  14.   StringBuilder mixed = new StringBuilder();   
  15.   StringBuilder source = new StringBuilder(   
  16.     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");   
  17.   int index, len = source.length();   
  18.   for (int i=0; i< len;++i){   
  19.     seed = (seed * 211 + 30031) % 65536;   
  20.     index = (int)Math.floor(seed/65536 * source.length());   
  21.     mixed.append(source.charAt(index));   
  22.     source.deleteCharAt(index);   
  23.   }   
  24.   return mixed.toString();   
  25. }   

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器