搜狐视频代理和采集得详解实例
你可以把 搜狐视频 的电影,电视剧 的视频 所在的网址复制起来,然后粘帖到下面播放器中的输入文本枢,
最后按确定 就可以看到代理,或者采集的过程序了
http://www.flashcs5as3.com/bfs/搜狐视频代理.swf
备用2个测试地址
电视剧测试 http://tv.sohu.com/20120402/n339672627.shtml
电影测试 http://tv.sohu.com/20100706/n273317584.shtml
实例效果地址;http://www.flashcs5as3.com/bfs/搜狐视频代理.swf
源文件下载地址;http://www.flashcs5as3.com/bfs/搜狐视频代理.zip
脚本如下/*-------------------搜狐视频 代理与采集-------------
| 2012-06-18-日编 |
| 编啊城QQ 475830480 |
| www.flashcs5as3.com |
---------------------------------------------------*/
//---------------------------常规参数设置---------------
var i = 0;
var 总片段数量;
var ii = 1;
var 剧集列表id;
// 例子 http://tv.sohu.com/20120601/n344624004.shtml http://tv.sohu.com/20120502/n342149564.shtml
System.useCodepage = true;//防止乱码
_root.bfs = new Object();//新建原始参数
//--------搜狐管方内部的代理-----------------------------------------------------------
_root.bfs.搜狐视频代理 = "http://hot.vrs.sohu.com/vrs_flash.action?vid=";
_root.bfs.搜狐剧集列表 = "http://hot.vrs.sohu.com/vrs_videolist.action?playlist_id=";
//本人开发的代理 http://q475830480.cn/bfs/代理程序/搜狐.asp?vid=
//------------------------------------------------------------------------------------
_root.bfs.mySound = new Sound();//新建声音
_root.bfs.my_nc = new NetConnection();//新建视频连接
_root.bfs.my_nc.connect(null);//插定连接为空
_root.bfs.my_ns = new NetStream(_root.bfs.my_nc);//新建视频流
_root.bfs.my_ns.setBufferTime(1);//设置续冲时间 值为 1 秒
_root.bfs.buffer_ns = new NetStream(_root.bfs.my_nc);//新建副视频流
_root.bfs.buffer_download = false;//设置 视频流 加载的装态
_root.bfs.downloading = false;//视频流的长度 装态
_root.bfs.musicPlayId = _root.bfs.listPlayId=_root.bfs.listOpenId="0";
_root.bfs.vol_value = 80;//设为音量为40
_root.bfs.isPlaying = true;
_root.bfs.搜狐视频url = 输入地址.text;
scrollList._visible = false;
loadhtm();
//-------------------输入按钮------------------------
确定输入按钮.onPress = function() {
System.useCodepage = true;//防止乱码
//----------清除文本枢内容----------
网页html的源文件.text = "";
视频代理编号.text = "";
flv_多少集.text = "";
flv_多少片段.text = "";
合并完整flvurl.text = "";
剧集txt.text = "";
剧集列表txt.text = "";
flv_xml.text = "";
集数例表.text = "";
_root.scene.cfvideo.close();//清除视频
delete _root.bfs.my_nc;//清除视频流
delete 搜狐代理htm_id;//清除 加载视频 的网页地址
delete 搜狐代理xml;//清除 加载 XML 地址
delete 剧集列表;//清除剧集列表XML
_root.bfs.musicPlayId = _root.bfs.listPlayId=_root.bfs.listOpenId="0";
_root.bfs.搜狐视频url = 输入地址.text;
};
确定输入按钮.onRelease = function() {
i = 0;
ii = 1;
loadhtm();
};
//----------------------load 视频网页 html---------------------------
function loadhtm() {//加载视频所在的网页地址
var 搜狐代理htm_id:XML = new XML();//新建一个XML
搜狐代理htm_id.ignoreWhite = true;//防止xml中的空格参数
搜狐代理htm_id.load(_root.bfs.搜狐视频url);//加载 html
搜狐代理htm_id.onLoad = function(如果加载成功) {
if (如果加载成功) {//加载OK后,积行动作
网页html的源文件.text = 搜狐代理htm_id;// 所有的html 源文件的代码
var 代理编号 = 网页html的源文件.text.split("vid="");//先找到 电影分之类 的位置
视频代理编号.text = 代理编号.split("";");
if (网页html的源文件.text.lastIndexOf("vrs_playlist_id=""") != -1) {
flv_多少集.text = "1";
loadok();
} else {
var 剧集 = 网页html的源文件.text.split("vrs_playlist_id="");
flv_多少集.text = 剧集.split("";");
剧集列表m();
}
} else {
loadhtm();//如果没有加载成功,就接着再次加载
}
};
}
//---------------------load剧集列表-------------------------------------
function 剧集列表m() {
System.useCodepage = true;//防止乱码
var 剧集列表:XML = new XML();//新建一个XML
剧集列表.ignoreWhite = true;//防止xml中的空格参数
剧集列表.load(_root.bfs.搜狐剧集列表+flv_多少集.text);//加载列表 xml
剧集列表.onLoad = function(加载列表xml) {
if (加载列表xml) {
剧集txt.text = 剧集列表;
剧集xml列表();
} else {
剧集列表m();
}
};
}
function 剧集xml列表() {
this.onEnterFrame = function() {
if (剧集txt.text.lastIndexOf("第"+ii+"集") != -1) {
剧集列表txt.text = 剧集txt.text.split("videoId":");//"relativeVideoId":
} else {
delete this.onEnterFrame;
剧集列表id = (ii-1);
flv_多少集.text = 剧集列表id;
loadok();
PlayList();
//trace(剧集列表id);
}
ii++;
};
}
//--------------------------------------Play List------------------------------------
function PlayList() {
System.useCodepage = true;
var _loc3;
var _loc4 = new String("");
var _loc5;
var _loc5000;
var _loc6 = flv_多少集.text;//剧集列表.firstChild.childNodes.length;
var _loc2 = -1;
var 影片名称 = 剧集txt.text.split("videoName":"");
var 当前影片名称 = 影片名称.split("第");
while (++_loc2<_loc6) {
var _loc3 = 当前影片名称+"第"+(_loc2+1)+"集";
//---------------设定 点播后改变例表中的 色彩-----------------
_loc5 = "#ffffff";
if (_loc2 == _root.bfs.musicPlayId) {
if (_root.bfs.listPlayId == _root.bfs.listOpenId) {
_loc5 = "#00ff00";
}
}
_loc4 = _loc4+("<font color=\""+_loc5+"\"><a href=\"asfunction:d,"+_loc2+"\"></a>"+(_loc2+1)+":<a href=\"asfunction:p,"+_loc2+"\">"+_loc3+"</a></font>"+"\n");
}
集数例表.html = true;
集数例表.htmlText = _loc4;
if (flv_多少集.text<=19) {
scrollList._visible = false;
} else {
scrollList._visible = true;
}
//集数例表.setTextFormat(lrcFormat);
false;
if (_root.bfs.listPlayId == _root.bfs.listOpenId) {
集数例表.scroll = _root.bfs.musicPlayId-3;
} else {
集数例表.scroll = 1;
}
if (_root.bfs.isPlaying) {
delete 搜狐代理xml;
Playflvxml();
}
}
//-----------------------------------------------------------------------------
function d(id) {
剧集列表.childNodes.childNodes.removeNode();
//PlayList();
}
function p(id) {
playThis(id);
}
function playThis(id) {
_root.bfs.musicPlayId = id;
_root.bfs.listPlayId = _root.bfs.listOpenId;
_root.bfs.isPlaying = true;
剧集列表txt.text = "";
PlayList();
trace(_root.bfs.musicPlayId);
}
function Playflvxml() {
_root.bfs.isPlaying = false;
var mmtt = 剧集txt.text.split("videoId":");
剧集列表txt.text = mmtt.split(","isNeedCaption");
loadok();
}
//---------------------------loadflvxml ------------------------------------
function loadok() {//加载代理中的XML相关 flv 信息
System.useCodepage = false;
var flvurl;
var 搜狐代理xml = new XML();
搜狐代理xml.ignoreWhite = true;
if (_root.bfs.musicPlayId == "0") {
搜狐代理xml.load(_root.bfs.搜狐视频代理+视频代理编号.text);
} else {
搜狐代理xml.load(_root.bfs.搜狐视频代理+剧集列表txt.text);
}
搜狐代理xml.onLoad = function(加载xml信息) {
if (加载xml信息) {
flv_xml.text = 搜狐代理xml;
var 总片段 = flv_xml.text.split("totalBlocks":");
总片段数量 = 总片段.split(","ck"");
flv_多少片段.text = 总片段数量;
//trace(总片段数量);
loadxml();
}
};
}
function loadxml() {
var flv_url = flv_xml.text.split("su":["");
var flvxml_t = flv_url.split(""],"sT"");
if (flv_xml.text.lastIndexOf("220.181.61.229") != -1) {//用字符串 搜索 视频源 的 服务器的 IP
var url = flvxml_t.split("","");
flvurl = "http://220.181.61.229/?new="+url;//采用 ?new 防止 视频源 的 服务器 对客户方封锁IP (指观看影片者)
合并完整flvurl.text = flvurl;
//trace(flvurl);
} else if (flv_xml.text.lastIndexOf("abcdefghijklmnopqrstuvwxyz0123456789") != -1) {//如果说 搜索不到 视频源 的 服务器的 IP 有可能是采用 别站 的资源
//采用别站的资源: 优酷奇艺乐视 腾讯
var video_flvURL;
var 优酷 = "http://www.youku.com/";
var 奇艺 = "http://www.iqiyi.com/";
var 乐视 = "http://www.letv.com/";
var 腾讯 = "http://v.qq.com/";
var 资源目录路径;
//------按时间来计算-调用 video 资源的路径-----------
var 本地时间 = new Date();
var 本地时间的值 = 本地时间.getHours();
if (本地时间的值<8) {
资源目录路径 = "Q";
} else if (本地时间的值<10) {
资源目录路径 = "W";
} else if (本地时间的值<12) {
资源目录路径 = "E";
} else if (本地时间的值<13) {
资源目录路径 = "R";
} else if (本地时间的值<14) {
资源目录路径 = "T";
} else if (本地时间的值<15) {
资源目录路径 = "Y";
} else if (本地时间的值<16) {
资源目录路径 = "U";
} else if (本地时间的值<17) {
资源目录路径 = "I";
} else if (本地时间的值<18) {
资源目录路径 = "O";
} else if (本地时间的值<19) {
资源目录路径 = "P";
} else if (本地时间的值<20) {
资源目录路径 = "A";
} else if (本地时间的值<21) {
资源目录路径 = "S";
} else if (本地时间的值<22) {
资源目录路径 = "D";
} else if (本地时间的值<23) {
资源目录路径 = "F";
} else {
资源目录路径 = "qwertyuiopasdfghjklzxcvbnm";
}
//---------------分析解密的路径------------------
loadurl(本地时间的值+"?new");//采用 ?new 防止 视频源 的 服务器 对客户方封锁IP
function loadurl(str) {
var _local2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var _local1 = 0;
var _local5 = new String("");
var _local11;
var _local7;
var _local4;
var _local6;
var _local10;
var _local9;
var _local8;
var _local12 = str.length;
while (_local1<_local12) {
_local11 = _local2.indexOf(str.charAt(_local1++));
_local7 = _local2.indexOf(str.charAt(_local1++));
_local4 = _local2.indexOf(str.charAt(_local1++));
_local6 = _local2.indexOf(str.charAt(_local1++));
_local10 = (_local11 << 2) | (_local7 >> 4);
_local5 = _local5+String.fromCharCode(_local10);
if (_local4 != 64) {
_local9 = ((_local7 & 15) << 4) | (_local4 >> 2);
_local5 = _local5+String.fromCharCode(_local9);
}
if (_local6 != 64) {
_local8 = ((_local4 & 3) << 6) | _local6;
_local5 = _local5+String.fromCharCode(_local8);
}
}
video_flvURL = _local5;
return (_local5);
}
//---------------结束 解密的路径------------------
//----------根据 各站的域名 来进行 合并完整视频的地址----------
if (flv_xml.text.lastIndexOf("youku") != -1) {
flvurl = 优酷+url+video_flvURL+"flv";
} else if (flv_xml.text.lastIndexOf("iqiyi") != -1) {
flvurl = 奇艺+url+video_flvURL+"flv";
} else if (flv_xml.text.lastIndexOf("letv") != -1) {
flvurl = 乐视+url+video_flvURL+"flv";
} else if (flv_xml.text.lastIndexOf("qq") != -1) {
flvurl = 腾讯+url+video_flvURL+"mp4";
} else {
trace("代理资源过期");
}
合并完整flvurl.text = flvurl;
}
playflv(flvurl,flvurl);//传达给 播放 接口
i++;
}
//---------------------play video -------------------------------------
function playflv(mu, t) {
if (t == undefined) {
_root.bfs.my_ns_duration = 180;
} else {
_root.bfs.my_ns_duration = t;
}
_root.bfs.my_ns.play(mu);
if (_root.bfs.buffer_download) {//清除相关视频流通
_root.bfs.buffer_ns.close();
_root.bfs.my_ns.seek(0);
}
_root.bfs.my_ns.onMetaData = function(infoObject) {//检查回调 从中获取FLV文件的总时间长度
_root.bfs.my_ns_duration = infoObject.duration;//视频流的总长度
//---------显示当前的视频总时间参数-------
mmm = infoObject.duration;
tm1 = int(mmm/60);
tm2 = int(mmm%60);
tm1 = ((tm1<10) ? ("0"+tm1) : (tm1));
tm2 = ((tm2<10) ? ("0"+tm2) : (tm2));
tmm = (tm1+":")+tm2;
};
//---------显示当前的视频 已经播放时间参数-------
function 纯环() {
mmm = _root.bfs.my_ns.time;
tta = int(mmm/60);
tts = int(mmm%60);
tta = ((tta<10) ? ("0"+tta) : (tta));
tts = ((tts<10) ? ("0"+tts) : (tts));
mmmm = (tta+":")+tts;
}
clearInterval(纯环事件目标);//先清除周期性时间值
var 纯环事件目标 = setInterval(纯环, 100);//声明 一个含数的值为 周期性时间 计算方法:1000为1秒
//------------------------检测视频流的播放状态-------
_root.bfs.my_ns_downloaded = false;
_root.bfs.my_ns.onStatus = function(infoObject) {
switch (infoObject.code) {
case "NetStream.Play.StreamNotFound" ://当视频流 播放时,是否可充全屏
//自己定义全屏接口();
break;
case "NetStream.Buffer.Empty" ://开始检查视频源 是否有效
if (_root.bfs.my_ns_downloaded) {//如果视频源出错
if (i<总片段数量) {
loadxml();
} else {
下一集();
}
} else {
var _local3 = setInterval(checkBufferTime, 100);//声明 一个含数的值为 周期性时间 计算方法:1000为1秒
}
break;
case "NetStream.Play.Start" ://播放后,续冲视频流不到位,进行续冲
var _local3 = setInterval(checkBufferTime, 100);
break;
case "NetStream.Buffer.Full" ://续冲完毕后,结束 周期性得设定时间值
clearInterval(_local3);//清除周期性时间值
break;
case "NetStream.Buffer.Flush" ://检查视频源 一切正常
_root.bfs.my_ns_downloaded = true;//传达值数 为正常
break;
case "NetStream.Play.Stop" ://检查视频流 是否播放 完
if (i<总片段数量) {
loadxml();
} else {
下一集();
}
break;
default :
break;
}
};
changesize(438,278);//定义 video 的宽与高
sound.volset.setVol();//设置音量
_root.scene.cfvideo.attachVideo(_root.bfs.my_ns);//设定视频流对象要显示给video视频输入
_root.bfs.my_ns_mc.attachAudio(_root.bfs.my_ns);//执行 视频流对象
_root.bfs.mySound = new Sound(_root.bfs.my_ns_mc);//从 视频流 中设定 Sound 声音
//------------------------------video加载与 缓冲-------------------------------
function checkBufferTime() {
var _loc2 = Math.round(_root.bfs.my_ns.bufferLength/_root.bfs.my_ns.bufferTime*100);
ffff = Math.round(_root.bfs.my_ns.bytesLoaded/_root.bfs.my_ns.bytesTotal*100)+"%";
if (_loc2<100 && _root.bfs.my_ns.bytesLoaded != _root.bfs.my_ns.bytesTotal) {
_root.scene.bufferinfo.text = "缓冲 "+_loc2+"%";
} else {
_root.scene.bufferinfo.text = "";
}
}
function changesize(w, h) {
var _loc3 = w;
var _loc2 = h;
var _loc4 = mu;
if (cn(_loc4)) {
_loc3 = _loc3*_loc4/100;
_loc2 = _loc2*_loc4/100;
}
_root.scene.cfvideo.smoothing = true;//设置视频平滑
btn_play._visible = false;
btn_Stop._visible = true;
}
}
//------------------------控制播放 各 按钮--------------------------
btn_play.onRelease = function() {
ps = true;
btn_play._visible = false;
btn_Stop._visible = true;
bfs_pause();
};
btn_Stop.onRelease = function() {
ps = false;
btn_play._visible = true;
btn_Stop._visible = false;
bfs_pause();
};
btn_nextFrame.onRelease = function() {
下一集();
};
btn_prevFrame.onRelease = function() {
上一集();
};
function bfs_pause() {
if (ps) {
_root.bfs.my_ns.pause(false);
} else {
_root.bfs.my_ns.pause(true);
}
}
//---------------------------------------------
function 下一集() {
_root.bfs.musicPlayId++;
_root.bfs.listPlayId = _root.bfs.listOpenId;
_root.bfs.isPlaying = true;
剧集列表txt.text = "";
PlayList();
trace(_root.bfs.musicPlayId);
}
function 上一集() {
_root.bfs.musicPlayId--;
_root.bfs.listPlayId = _root.bfs.listOpenId;
_root.bfs.isPlaying = true;
剧集列表txt.text = "";
PlayList();
trace(_root.bfs.musicPlayId);
}
感谢啊城分享~~辛苦了~~端午节快乐! {:soso__8961432591078930798_3:}阿城太专业了问好端午快乐 视频网站盗链需要这个,阿城高手啊!{:soso_e179:} 清音王梓 发表于 2012-6-22 21:57 static/image/common/back.gif
视频网站盗链需要这个,阿城高手啊!
这个真的很专业!
页:
[1]