Flv下载地址探测算法

晴
2008-6-1 16:14 by:果面 程序开发 » 思路分析 本站原创 | |
这篇文章里主要介绍FlvDownloader2.0中采用的Flv探测算法。

在前面的文章中已经提到,由于各大flv的网站都对自己的flv地址进行了加密,要获取flv的下载地址并不是很容易。常用的Flv地址探测算法有如下两种:

   1.
      分析网页的html代码和加密算法,得出实际 flv地址
   2.
      通过ie访问原始播放网页,截取httprequest和httpresponse头信息并分析,从而flv实际地址。

第一种方法的优点就是解析速度快,并且可以很容易的分析出相关的flv信息(如分段的flv视频,整个专辑的所有视频地址)。然而这种方式没有什么通用性,并且需要对flash、html。javascript等比较熟悉。分析的过程也比较复杂和费时间。一旦网站的加密算法变化,还需要重新写解析算法。

第二种方法有一定的通用性,并且一般可以直接通过request头的url地址就能判断出flv的地址。网上的大多数flv探测程序都是这种思路。但不足之处在于:

   1.
      一旦对大量网页进行批量解析,解析过程相对慢。
   2.
      如果网页的视频被分割为多个,只能解析到第一个的地址。

flvdownloader的flv地址探测算法综合了这两种方式:

   1.
      首先通过内嵌的隐藏浏览器访问访问网页
   2.
      捕获浏览器访问网页过程中产生的Http请求和应答信息,并分析出flv视频地址。
   3.
      经过上述两个步骤,可以获取第一个flv视频的实际地址,然后根据各网站的特点和第一个flv视频地址分析出被分割的其它的flv视频地址,并对flv网站发出请求验证分析结果。
   4.
      为了方便的捕获http请求和应答,我采用的方法是建立一个代理服务器,浏览器通过代理服务器访问网页,这样代理服务器可以很容易的获取所有http信息。

整个探测过程中包括如下几个角色:

    *
      FlvDetector:     Fvl地址探测者,主要负责发出flv探测请求,并负责分析处理探测结果。
    *
      Explorer:        浏览器,用以访问实际播放网页,产生flv请求。
    *
      HttpProxy:        Http代理服务器,用来截取浏览器的http请求和应答信息,将结果返回给FlvDetector分析。
    *
      FlvServer:        Flv视频网站

具体的流程如下:

   1.
      FlvDetector调用Explorer访问视频所在的网页。
   2.
      Explorer通过代理服务器HttpProxy发起Http请求
   3.
      HttpProxy将Explorer的请求转发给FlvServer
   4.
      FlvServer向HttpProxy发出应答
   5.
      HttpProxy将应答转发给Explorer
   6.
      结果3、4两步后,HttpProxy已经知道Explorer的所有信息,将这些信息发给FlvDetector。
   7.
      FlvDetector分析Http头信息,获取第一个flv视频地址,并根据所访问的视频网站的视频特点分析出其它关联视频,将分析出来的视频地址直接发给Flvserver验证。
   8.
      FlvServer返回验证结果。

经过上述几步后,就已经获取到所有的flv地址了。其中第7步是需要根据不同的网站进行不同的分析的,因为已经获取了第一个视频的地址,只要继续抓一下包分析是很容易获取分割为多段的其它视频地址的。因此第7步的分析过程比直接分析网页代码是要简单的多的,一般直接分析http头信息和对网站抓包分析一下就行了。但由于不同的网站解析算法均不同,因此FlvDownloader中只写了优酷的分析算法。
评论(0) 引用(0) 阅读(2384)