织梦CMS - 轻松建站从此开始!

罗索

探究视频加速器的原理

jackyhwei 发布于 2011-11-14 09:55 点击:次 
视频加速器如何截获HTTP浏览器的资源请求并将从P2P网络接受到的数据又回传给它呢?我的第一个念头就是 :BHO.经过分析,我发现他们使用了自动代理配置技术Proxy Auto-Config,简称PAC, 结合注册表和WinInet库的使用,很好的解决了上面的问题。
TAG:

1.视频加速器的原理
视频加速器能够提供对HTTP浏览器从HTTP服务器获取.flv,.mp4等类型的流媒体内容进行实时加速,其下载原理类似于典型的 BT下载,由Tracker服务器+客户端构成,当一个HTTP Agent向HTTP服务器请求.flv,.mp4类型的数据时,视频加速器能够定位该资源,并向Tracker服务器发送节点请求,实际的下载分为两部分,这两部分同时进行:一部分为从HTTP服务器的下载;一部分走P2P网络,从拥有此资源的其它节点处下载。其实我们完全可以将成熟的P2SP的下载技术和框架应用于此。
那么剩下一个问题:视频加速器如何截获HTTP浏览器的资源请求并将从P2P网络接受到的数据又回传给它呢?我的第一个念头就是 :BHO.经过分析,我发现他们使用了自动代理配置技术Proxy Auto-Config,简称PAC, 结合注册表和WinInet库的使用,很好的解决了上面的问题。通过动态修改注册表:

  1. [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
  2. \Internet Settings\Connections] 
  3. DefaultConnectionSettings 
  4. SavedLegacySettings 
  5.  
  6. [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion
  7. \Internet Settings\Connections] 
  8. DefaultConnectionSettings 
  9. SavedLegacySettings 

将代理服务器设置为:

  1. Use automatic configuration script 
  2. 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的文件获取进行代理加速。

  1. function FindProxyForURL(url,host){ 
  2.     if(host == "localhost" || host == "127.0.0.1"
  3.     { 
  4.        return "DIRECT"
  5.     } 
  6.  var private_re = /^http:\/\/((lisbon)|(0\.0\.0\.0)|(127\.\d+\.\d+\.\d+)|(10 
  7. \.\d+\.\d+\.\d+)|(172\.(1[6789]|2[0-9]|3[01])\.\d+\.\d+)|(169\.254\.\d+\.\d+)
  8. |(192\.168\.\d+\.\d+)|(22[3-9]\.\d+\.\d+\.\d+)|(2[3-5][0-9]\.\d+\.\d+\.\d+))+/ig 
  9.     if(private_re.test(url) || url.substring(0,7) != "http://"
  10.     { 
  11.         return "DIRECT"
  12.     } 
  13.     var pattern = /[^\/&]+(\.flv|\.mp4)+(\?|$)/ig; 
  14.     if(pattern.test(url)) 
  15.     { 
  16.         return "PROXY localhost:9000"
  17.     } 
  18.     else 
  19.     { 
  20.         return "DIRECT"
  21.     } 
(cr0_3)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201111/15313.html]
本文出处:hi.baidu.com/cr0_3 作者:cr0_3
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容