<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[观夏Note]]></title> 
<link>//gm.angeldm.com/index.php</link> 
<description><![CDATA[新技术番]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[观夏Note]]></copyright>
<item>
<link>//gm.angeldm.com/post//</link>
<title><![CDATA[Flv下载地址探测算法]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[思路分析]]></category>
<pubDate>Sun, 01 Jun 2008 08:14:08 +0000</pubDate> 
<guid>//gm.angeldm.com/post//</guid> 
<description>
<![CDATA[ 
	这篇文章里主要介绍FlvDownloader2.0中采用的Flv探测算法。<br/><br/>在前面的文章中已经提到，由于各大flv的网站都对自己的flv地址进行了加密，要获取flv的下载地址并不是很容易。常用的Flv地址探测算法有如下两种：<br/><br/>&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分析网页的html代码和加密算法，得出实际 flv地址<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过ie访问原始播放网页，截取httprequest和httpresponse头信息并分析，从而flv实际地址。 <br/><br/>第一种方法的优点就是解析速度快，并且可以很容易的分析出相关的flv信息（如分段的flv视频，整个专辑的所有视频地址）。然而这种方式没有什么通用性，并且需要对flash、html。javascript等比较熟悉。分析的过程也比较复杂和费时间。一旦网站的加密算法变化，还需要重新写解析算法。<br/><br/>第二种方法有一定的通用性，并且一般可以直接通过request头的url地址就能判断出flv的地址。网上的大多数flv探测程序都是这种思路。但不足之处在于：<br/><br/>&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一旦对大量网页进行批量解析，解析过程相对慢。<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果网页的视频被分割为多个，只能解析到第一个的地址。 <br/><br/>flvdownloader的flv地址探测算法综合了这两种方式：<br/><br/>&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先通过内嵌的隐藏浏览器访问访问网页<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;捕获浏览器访问网页过程中产生的Http请求和应答信息，并分析出flv视频地址。<br/>&nbsp;&nbsp; 3.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;经过上述两个步骤，可以获取第一个flv视频的实际地址，然后根据各网站的特点和第一个flv视频地址分析出被分割的其它的flv视频地址，并对flv网站发出请求验证分析结果。<br/>&nbsp;&nbsp; 4.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了方便的捕获http请求和应答，我采用的方法是建立一个代理服务器，浏览器通过代理服务器访问网页，这样代理服务器可以很容易的获取所有http信息。 <br/><br/>整个探测过程中包括如下几个角色：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvDetector：&nbsp;&nbsp;&nbsp;&nbsp; Fvl地址探测者，主要负责发出flv探测请求，并负责分析处理探测结果。<br/>&nbsp;&nbsp;&nbsp;&nbsp;*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explorer：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器，用以访问实际播放网页，产生flv请求。<br/>&nbsp;&nbsp;&nbsp;&nbsp;*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpProxy：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Http代理服务器，用来截取浏览器的http请求和应答信息，将结果返回给FlvDetector分析。<br/>&nbsp;&nbsp;&nbsp;&nbsp;*<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvServer：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flv视频网站 <br/><br/>具体的流程如下：<br/><br/>&nbsp;&nbsp; 1.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvDetector调用Explorer访问视频所在的网页。<br/>&nbsp;&nbsp; 2.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explorer通过代理服务器HttpProxy发起Http请求<br/>&nbsp;&nbsp; 3.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpProxy将Explorer的请求转发给FlvServer<br/>&nbsp;&nbsp; 4.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvServer向HttpProxy发出应答<br/>&nbsp;&nbsp; 5.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpProxy将应答转发给Explorer<br/>&nbsp;&nbsp; 6.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结果3、4两步后，HttpProxy已经知道Explorer的所有信息，将这些信息发给FlvDetector。<br/>&nbsp;&nbsp; 7.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvDetector分析Http头信息，获取第一个flv视频地址，并根据所访问的视频网站的视频特点分析出其它关联视频，将分析出来的视频地址直接发给Flvserver验证。<br/>&nbsp;&nbsp; 8.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FlvServer返回验证结果。 <br/><br/>经过上述几步后，就已经获取到所有的flv地址了。其中第7步是需要根据不同的网站进行不同的分析的，因为已经获取了第一个视频的地址，只要继续抓一下包分析是很容易获取分割为多段的其它视频地址的。因此第7步的分析过程比直接分析网页代码是要简单的多的，一般直接分析http头信息和对网站抓包分析一下就行了。但由于不同的网站解析算法均不同，因此FlvDownloader中只写了优酷的分析算法。
]]>
</description>
</item><item>
<link>//gm.angeldm.com/read.php?&amp;guid=0#topreply</link>
<title><![CDATA[[评论] Flv下载地址探测算法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>//gm.angeldm.com/read.php?&amp;guid=0#topreply</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>