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

举个例子比较好理解,比如我现在要下http://v.youku.com/v_show/id_XNDM2Mjc0MzAw.html这个视频。这里我们要获得的是视频的id,就是XNDM2Mjc0MzAw这部分,这是一个视频唯一的,所以在解析的时候肯定会用到。

为了能看清楚youku视频的播放过程,可以使用火狐的插件firebug对网页进行跟踪,如下图。

可以看到有很多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。

复制代码 代码如下:

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中获得的,不需要破解,每段视频都不一样。

其中的两个解码函数为:

复制代码 代码如下:

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中获得。

时间: 2024-09-15 17:11:31

java实现优酷视频地址解析示例代码分享_java的相关文章

java获取优酷视频地址示例_java

复制代码 代码如下: import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern; import net.sf.json.JSONArray;import net.sf.json.JSONException;import net.sf.json.JSONObject;

页面中加载优酷视频去掉广告的方法_相关技巧

1.优酷视频去广告代码: <embed src=" http://static.youku.com/v1.0.0149/v/swf/qplayer_rtmp.swf?VideoIDS=你的视频ID&winType=adshow&isAutoPlay=true" quality="high" width="宽度" height="高度" align="middle" type="

苹果iOS6整合土豆优酷视频应用

2012年6月12日,苹果在美国旧金山召开全球开发者大会(WWDC).苹果在本届大会上发布了包括iOS6.最新MacBookPro笔记本和"山狮"(Mountain Lion)桌面操作系统等多种软硬件新品和升级.在此次大会上,苹果推出了多项针对中国用户的功能优化服务.除Siri全面支持中文和改进中文输入法外,新的iOS 6和"山狮"系统还集成了土豆视频等国人熟知的网络应用.土豆网是中国最早和最具影响力的视频分享网站,是中国网络视频行业的领军品牌,也是全球最早上线的视

如何用java程序获取优酷视频的真实地址,可以下载的?

问题描述 如何用java程序获取优酷视频的真实地址,可以下载的? 求大神指教,怎样用java代码实现获取优酷视频下载的链接地址,万分感谢 解决方案 获取优酷视频地址方法

优酷视频全屏及去广告代码

优酷网是中国领先的视频分享网站,是国内网络视频行业的第一品牌.优酷网以 "快者为王"为产品理念,注重用户体验,不断完善服务策略,其卓尔不群的"快速播放,快速发布,快速搜索"的产品特性,充分满足用户日益增长的多元化互动需求,使之成为国内视频网站中的领军势力. 2007年7月中国互联网协会发布07年度(上半年)中国互联网调查报告表明,优酷网深受用户喜爱,在品牌认知度方面领先于同行业其他网站:同年8月29日,优酷网入选 "2007年度Red Herring最具潜

优酷视频真实地址解析问题

问题描述 优酷视频真实地址解析问题 做一个播放优酷播放的app.涉及到优酷视频真实地址解析的问题!求教育!!!!!

使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http.m3u8等多种网络协议,本章将编写播放优酷视频的例子.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com    系列 1.使用Vitamio打造自己的Android万能播放器(1)

Android 使用Vitamio打造自己的万能播放器(5)——在线播放(播放优酷视频)_Android

 前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http.m3u8等多种网络协议,本章将编写播放优酷视频的例子. 系列 1.Android使用Vitamio打造自己的万能播放器(1)--准备 2.Android使用Vitamio打造自己的Android万能播放器(2)-- 手势控制亮度.音量.缩放 3.Android使用Vitamio打造自己的Andr

在iframe 中引用优酷视频可以正常播放,但是就是不能全屏!就高手指教!跪谢啊!

问题描述 在iframe 中引用优酷视频可以正常播放,但是就是不能全屏!就高手指教!跪谢啊! 在iframe 中视频可以正常播放,但是就是不能全屏!就高手指教!跪谢啊!但是扣扣空间里的优酷视频可以全屏啊!必须要用iframe 做的! 解决方案 这是代码 解决方案二: 解决方案三: 那就窗口化看吧 ,没关系的. 解决方案四: 解决方案五: 同求!! 楼主解决了吗?