1.视频加速器的原理
视频加速器能够提供对HTTP浏览器从HTTP服务器获取.flv,.mp4等类型的流媒 体内
容进行实时加速,其下载原理类似于典型的BT下载,由Tracker服务器+客户端构
成,当 一个HTTP Agent向HTTP服务器请求.flv,.mp4类型的数据 时,视频加速器能
够定位该资源,并向Tracker服 务器发送节点请求,实际的下载分为两部分,这两
部分同时进行:一部分为从HTTP服务器的下载;一部分走P2P网络,从拥有此资源
的其它 节点处下载。其实我们完全可以将成熟的P2SP的 下载技术和框架应用于此。
那么剩下一个问题:视频加速器如何截获HTTP浏览器的资源请求并将从P2P网络接
受到的数据又回传给 它呢?我的第一个念头就是:BHO.经 过分析,我发现他们使
用了自动代理配置技术Proxy Auto-Config,简称PAC, 结合注册表和WinInet库的使
用,很好的 解决了上面的问题。通过动态修改注册表:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Connections]
DefaultConnectionSettings
SavedLegacySettings
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Connections]
DefaultConnectionSettings
SavedLegacySettings
将 代理服务器设置为:
Use automatic configuration script
Adress=http://localhost:9000/application.pac.
通 过WinInet API:InternetSetOption
OPTION=INTERNET_OPTION_SETTINGS_CHANGED来 实现代理服务器的实时改动。
这样我们通过PAC文 件中FindProxyForURL的 实现,就可以实现截获HTTP浏 览器
的资源请求;同时,由于我们采用的是HTTP Proxy技术来实现于HTTP浏览器的交
互,这样将P2P网络中接收到的数据经过HTTP协议封装再传给HTTP浏览器即可。
2.一个视频加速器的PAC文件
以下是一个某视频加速器的PAC文件,主要实现了对本机地址和LAN地址进行直通,
对URL开头为http://并且内容为.flv和.mp4的文件获取进行代理加 速。
function FindProxyForURL(url,host){
if(host == "localhost" || host == "127.0.0.1")
{
return "DIRECT";
}
var private_re = /^http:\/\/((lisbon)|(0\.0\.0\.0)|(127\.\d+\.\d+\.\d+)|(10
\.\d+\.\d+\.\d+)|(172\.(1[6789]|2[0-9]|3[01])\.\d+\.\d+)|(169\.254\.\d+\.\d+)|(192\.168
\.\d+\.\d+)|(22[3-9]\.\d+\.\d+\.\d+)|(2[3-5][0-9]\.\d+\.\d+\.\d+))+/ig
if(private_re.test(url) || url.substring(0,7) != "http://")
{
return "DIRECT";
}
var pattern = /[^\/&]+(\.flv|\.mp4)+(\?|$)/ig;
if(pattern.test(url))
{
return "PROXY localhost:9000";
}
else
{
return "DIRECT";
}
0 件のコメント:
コメントを投稿