源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java实现优酷视频地址解析示例代码分享

  • 时间:2021-05-15 08:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java实现优酷视频地址解析示例代码分享
举个例子比较好理解,比如我现在要下http://v.youku.com/v_show/id_XNDM2Mjc0MzAw.html这个视频。这里我们要获得的是视频的id,就是XNDM2Mjc0MzAw这部分,这是一个视频唯一的,所以在解析的时候肯定会用到。 为了能看清楚youku视频的播放过程,可以使用火狐的插件firebug对网页进行跟踪,如下图。 [img]http://files.jb51.net/file_images/article/201401/20140110111714.jpg?2014010112056[/img] 可以看到有很多GET,我们要找的应该是以这个id作为参数的GET,在下面我们可以找到这个链接 http://v.youku.com/player/getPlayList/VideoIDS/XNDM2Mjc0MzAw/timezone/+08/version/5/source/video?ran=3545&password=&n=3 这是youku获取播放列表的GET,打开它的响应,这是一个json,我们需要的内容是seed、streamfileids和segs。segs里面放的是视频的分段key,streamfileids是一串乱码,要用seed对他解码。下面我截取了下载器的一部分来说明解码的过程,解析json用的是json-lib-2.4-jdk15。
[u]复制代码[/u] 代码如下:
List<Video> videos = new ArrayList<Video>(); JSONObject data; //json就是刚获得的响应,类型为String。 data = JSONObject.fromObject(json).getJSONArray("data").getJSONObject(0); double seed = Double.valueOf(data.getString("seed")); String title = data.getString("title"); String fileid = data.getJSONObject("streamfileids").getString("flv");//如果要下的是mp4格式的话 String realFileid = getFileID(fileid, seed);            //把flv改成mp4(前提是这个节点存在) String fileid1 = realFileid.substring(0, 8);//解码出来的id分成两部分,中间要插入视频分段 String fileid2 = realFileid.substring(10); JSONArray segs = data.getJSONObject("segs").getJSONArray("flv");//segs部分解析 for (Iterator iterator = segs.iterator(); iterator.hasNext();) {     JSONObject object = (JSONObject) iterator.next();     int order = object.getInt("no");     String size = object.getString("size");     int seconds = object.getInt("seconds");     String key = object.getString("k");     String no = String.format("%1$02x", order);     String youUrl = "http://f.youku.com/player/getFlvPath/sid/" + "00_"         + no + "/st/flv/fileid/" + fileid1 + no + fileid2 + "?K="         + key;              videos.add(new Video(order, seconds, youUrl, size, key, title)); }
youUrl就是我们要的视频地址,比如上面那个视频的第一段是: http://f.youku.com/player/getFlvPath/sid/134434081131213125530_00/st/flv/fileid/030001090050201D77EDBC04650AC2DD6027D5-ED5F-27F6-8E73-DEF478121887&K=b499f3d5df944cfc2827e2ec 蓝色的是随机生成的,可以用00代替。 flv表示所要下载的视频格式,也可以选mp4,如果有的话。 黄色的两个00是分段码,十六进制,比如第一段是00,第二段01,第十五段0f。 后面的是fileid,需要通过seed和streamfileids来破解,每段视频都一样。 最后面的K是在segs中获得的,不需要破解,每段视频都不一样。 其中的两个解码函数为:
[u]复制代码[/u] 代码如下:
private String getFileID(String fileid, double seed) {     String mixed = getFileIDMixString(seed);     String[] ids = fileid.split("\\*");     StringBuilder realId = new StringBuilder();     int idx;     for (int i = 0; i < ids.length; i++) {         idx = Integer.parseInt(ids[i]);         realId.append(mixed.charAt(idx));     }     return realId.toString(); } private String getFileIDMixString(double seed) {     StringBuilder mixed = new StringBuilder();     StringBuilder source = new StringBuilder(         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");     int index, len = source.length();     for (int i = 0; i < len; ++i) {         seed = (seed * 211 + 30031) % 65536;         index = (int) Math.floor(seed / 65536 * source.length());         mixed.append(source.charAt(index));         source.deleteCharAt(index);     }     return mixed.toString(); }
代码最后将得到一个Video类型的List,Video中的order是视频的编号,seconds是时间长度,size是字节长度,youUrl就是真正的视频地址,还有视频的标题title。还有一些其他的内容都可以从json中获得。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部