《计算机6.5-SLZ-MK+视频网站技术--修改完成稿.doc》由会员分享,可在线阅读,更多相关《计算机6.5-SLZ-MK+视频网站技术--修改完成稿.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、视频网站技术第1章 视频快速下载技术研究31.1 基础概念和使用工具31.1.1 Perl模块介绍31.1.1.1 LMP41.1.1.2 DBI51.1.2 Perl正则表达式51.1.3 网页抓取61.1.4 视频地址隐藏技术61.1.4.1 不同的协议61.1.4.2 页面源码71.1.4.3 隐藏接口71.1.4.4 视频分段81.1.5 工具介绍81.1.5.1 curl81.1.5.2 rtmpdump91.1.5.3 ffmpeg91.1.5.4 mencoder101.1.5.5 mediainfo101.1.5.6 httpwatch101.1.5.7 开发工具 vim111
2、.1.6 linux 下数据共享方式111.1.7 小结121.2 系统架构131.2.1 系统框架图整体说明131.2.2 数据格式141.2.3 数据库表的设计171.2.4 函数库的实现181.2.5 小结191.3 系统详细设计201.3.1 分析抓取模块201.3.2 下载视频模块211.3.3 擦除图标模块241.3.4 上传视频模块261.3.5 邮件提醒模块271.3.6 处理异常模块281.3.7 小结28第1章 视频快速下载技术研究通常情况下,我们在浏览视频网站时都能够看到一个链接,观看步骤就是将这些网址打开,然后缓存把视频下载下来看,但这样比较繁琐,而且会浪费我们的时间。
3、针对这一问题,本章对视频下载目前存在的状况进行了研究,目的就是希望能够建立一个网站,我们打开其主页就可以把所有视频下载下来。如今在我国最主要的视频网站是优酷、土豆以及新浪等,在文中还介绍了江苏卫视和安徽卫视等新闻媒体的下载方法,这些媒体能够为观众们提供非常丰富的视频资源,使我国大多数观众对视频的需求都能够得到满足。不仅如此,有些国内的网站开始将资源提供给外国用户,也有国外的视频网站进入国内市场,这样使得大多数快速下载的要求得到满足,约95%的观众的下载方法需求得到满足。本章选择分布式视频抓取的方法进行视频的下载。1.1 基础概念和使用工具本章对本文用到的相关编程语言和相关工具进行了介绍,并对抓
4、取视频时运用到的技术进行了阐述,这些主要内容包括:Perl模块机器正则表达式,Linux以及curl。1.1.1 Perl模块介绍拉里沃尔于1987年12月18日首次发布了Perl。Perl集成了C语言、sed、awk、shell scripting等各编程语言的优点。其具有C语言强大的功能,也具有awk、sed等语言的操作方便的特性。Perl的优点就是简单便捷,普通的问题几行代码就能够解决,复杂点的问题几十行代码就能够解决。通常在进行软件测试时测试函数库有多大十几甚至更多的文件,定制功能达到上千种,而Perl的软件测试功能非常强大,在软件测试时基本由其独立完成,节约测试时间。在初始阶段,Pe
5、rl知识作为Unix系统的一个脚本语言,而目前它能够在所有系统里运行,是移植性最强的编程软件。要想使C/C+程序具有可移植性就需要在其中增加#ifdef来对不同系统进行区分;要想是Java程序具有可移植性,就需要理解其实现原理。Perl语言的出现很好的解决是其他语言在移植这一方面的缺陷,并且将其他语言的优点保留下来,同时拥有自己的特色。其特色是将万事看做不同的优点,所有事物都不存在弱点。Perl在实现其功能时是通过其集成模块进行的,供用户选择的模块较多,能够利用简单的API完成复杂的功能,这一节主要对其中主要的模块进行介绍。1.1.1.1 LMP当前网站的应用逐渐复杂,只有封装的HTTPD模块
6、才能够实现简单代码获取资源的功能。LWP就是基于这种大环境下出现的,其主要作用是用于对Web进行访问。由此,我们能够在自己的perl脚本里对外部Web服务器中的资源进行访问。LWP能够提供非常多的功能,主要功能如下所示:(1) 由远程Web服务器对URL进行请求;(2) 将数据传输给Web服务器,并对表单进行模拟填写;(3) 对远程Web服务器上的文档进行复制,只对新增内容进行传送;(4) 研究HTML文档,并将连接与重要内容保存下来;(5) 把HTML文档看成文本并对postscript进行格式化;(6) 可以利用Perl对Web所需的一些功能进行编写。1.1.1.2 DBIDBI为Perl
7、编程语言的数据库接口,能够将许多不一样的数据库的接口统一起来。在运用数据库以及创建动态Web网页方面,Perl可以方便的实现。DBD是对数据库进行驱动的程序,如图1-1所示为DBI以及DBD的模型不同关系图。图1-1:DBI与DBD关系模型图目前,在Web网站的研发中MySQL是最常使用的数据库,它是免费提供给使用者的。本文在进行系统开发时,所选择的数据库是MySQL。1.1.2 Perl正则表达式 正则表达式一般情况下可以缩写为“regex”,本文选择“regex”进行网页链接的处理。正则表达式是一个逻辑公式,能够对字符串进行操作,主要原理就是将特定字符以及它们的组合,组成“规则字符串”,然
8、后利用它来进行字符串的过滤逻辑进行表达。因此,通过给定正则表达式能够实现下列的目的:1.所给出的字符串与正则表达式能够匹配;2.客户需要实现的特定功能也能够由正则表达式中获取。正则表达式的主要特征如下所示:1.使用起来灵活、具有很强的逻辑性以及强大的功能;2.能够在短时间内用非常简易的方法对字符串的复杂进行控制;3.初学者难以掌握。正则表达式主要运用于文本,所有在EditPlus编辑器以及Visual Studio编辑器中都有应用,能够用正则表达式对它们当中的文本内容进行处理。1.1.3 网页抓取 在进行网页抓取时,LWP模块主要通过爬虫原理实现的,文中便利用这一方法来获得网页中的内容。在利用
9、LWP模块获得网页内容时,将LWP引入,接着进行如下操作,便可获取网页内容。 1.my $ua = LWP:UserAgent-new;进行用户代理对象的建立。 2.$ua-timeout(30);设定超时条件。 3.my $rsp = $ua-get($url);对网页中的内容进行抓取,并将其储存至变量里面。 4.unless ( $rsp-is_success ) 对结果进行判断,看网页内容的获取成功与否。 5.my $content = $rsp-decoded_content;将上述获得的内容进行解码处理。1.1.4 视频地址隐藏技术 目前大多数视频网站都运用了这一技术,这样做的目的就
10、是限制用户对网站上视频进行直接下载,从而降低网站因此带来的损失。现在有下列几种隐藏下载链接的技术:1.1.4.1 不同的协议 1.http协议 Http协议是目前运用最广的网络协议,互联网基本上都是运用这一技术来对数据进行分享的。任何WWW文件都得遵守该准则。在网站进行视频分享时,该协议先利用IIS把FLV下载并保存起来,接着利用NetConnection里的本地连接在对其进行播放,所播放的为本地的视频,并非服务器中的视频。所有在本地缓存在能够寻找到FLV。Http协议的优势就是将FLV下载完毕之后,服务器就不会再次出现能量消耗了。Http协议的缺点是保密工作不到位。用户在下载视频时是先将视频
11、观看完毕然后再通过缓存获取视频。在运用Http进行视频播放时,若在服务器不进行速度限制,用户家的宽带速度越快其服务器中带宽消耗也会越大,这样使用者的体现就会收到限速的影响。2.rtmp协议 Rtmp协议是一种实时消息传输协议,它是Adobe Systems公司为了实现Flash播放器与服务器之间视频等信息传播而特意开发的协议。Rtmp协议利用NetConnection 连接在FMS/Red5服务器上面,并对FLV文件进行实时的播放,能够随意选择播放点对视频进行播放,主要优点为FLV文件不存在于本地缓存中。在客户端FLV也不会发生缓存,且具有良好的保密性能,任何事情都并非完美,Rtmp协议也存在
12、一些缺点,使服务器资源发生消耗,只能进行实时的连接。在Rtmp协议中的视频也会对其进行隐蔽处理,因其不发生缓存,若使用者想对视频进行下载,就需要选择其他方法才能实现。因此,本文所阐述的抓取测量非常重要。3.比较 Rtmp协议与http协议并非都是十全十美的,我们应该根据使用条件对其进行选择。目前,http协议应该非常广泛,只需普通的Web服务器就能够实现其功能。相比较而言,rtmp协议必须通过服务器才能实现其功能,其优点是具有很强的保密性。大部分站点使用的都是http模式,主要是因为它不会对服务器造成太大的压力。Rtmp模式,在进行播放器参数设计时相对较简单,通过对xxx.swf?file=x
13、xx的修改即可实现。Rtmp协议在进行视频播放时,只要用户自己的网速达到最低要求,无论其带宽大小,在服务器端所消耗的带宽相同。1.1.4.2 页面源码 目前主要的视频网站都会将数据全部或者一部分隐藏在页面源代码中。网页中主要隐藏的数据包括:vid、tag、title、content以及url等,在以后的网页内容抓取中,上述数据十分重要。前一节已经对如何获取页面源代码进行了介绍,在获取源代码后,如何获取隐藏数据。一般通过正则表达式来实现,其具体操作步骤如下:1、对网页文本进行提取。 2、将网页的内容拆分成单独的文本,一般情况下网页的内容是一段很长的文本。若需对其进行清晰的分析,就需要将其拆成单独
14、的小段。拆分的方法是通过函数split实现。 3、运用正则表达式来提取网页的title等数据。 4、对所获取的数据进行保存。 1.1.4.3 隐藏接口 一般情况下,难以从网页中直接得到所需数据,要经过多次尝试或对多种接口进行调用才能得到。目前基本上所有的大型视频网站都采用了这一方法。实际上这一接口还需要其他数据才能调用,从而获得正确的返回。目前,中国的视频网站想要获取自己需要的数据,要调用多个接口才能实现,若要全面的获取数据,需要综合运用下列几种隐蔽技术。1.1.4.4 视频分段 视频分段也是一种视频隐藏技术。即使用户提供特殊技术下载到网站的视频,而他们所获得的视频都是处理过的,用户难以对其进
15、行使用。在长视频网站中该技术得到广泛应用,这样做的目的是防止用户下载其视频,能够提高网站访问量,用户的某些特殊要求会受到限制。上述几种技术是目前视频网站使用最多的方法。本文主要基于上述的隐藏技术,对国内主要视频网站的信息进行解密。下一章中,将详细讨论如何获取下载链接。1.1.5 工具介绍 本文选用的是Perl语言,本节将对本文用到的工具进行介绍。掌握好这些工具的功能与使用方法对后面的研究非常重要。1.1.5.1 curl Curl支持多种协议,包括:FTP、FTPS、HTTP等。curl同样支持HTTPS认证、HTTP PUT方法、FTP上传等,它有着非常强大的功能。Curl中有许多参数,通过
16、调整这些参数可以使其能够产生不同的功能。文中出现的参数如下所示:-connect-timeout-超时时间。 -max-time-最长下载时间。 -limit-rate-最大下载速度。 -retry-重复次数。-retry-delay-传输出现问题时,设置重试间隔时间。 -retry-max-time-传输出现问题时,设置最大重试时间。 -A-设置用户代理发送给服务器。 -o/-output-把输出写到该文件中。 -cookie-处理登录问题。 1.1.5.2 rtmpdump 前文视频的下载是通过缓存来实现的,curl也具有同样的功能。在中国对怎样通过rtmp协议下载视频进行说明的网站很少。
17、在adobe公司开发rtmp之前已有人对其进行研究,例如匈牙利人开发的rtmpdump协议。在对http协议进行使用后可以维护网站的视频,使用户不能对其进行下载。Rtmpdump的操作比 curl 要简单。 1.1.5.3 ffmpeg FFmpeg属于一种命令工具,主要作用是转换视频文件的格式。FFmpeg可以对许多参数进行使用,ffmpeg版本不同其参数也会发生改变。经常使用的参数如下所示: -i 对输入的文件名称进行设定。 -f 对视频文件的输出格式进行设定。-y 当有输出的文件时则选择将其覆盖。-fs 若文件大小超过预定值,转换停止。-ss 在规定的时间进行转换。-title 对其名称
18、进行设置。 -timestamp 对时间戳进行设定。 -vsync 调整Frame, 让视频和声音可以同步播放。 1.1.5.4 mencoder Mencoder也是一种对视频进行处理的软件,能够实现全部格式的视频转换,其功能非常广,对所有格式都有效。它当中存在很多参数,因此用它处理视频之前一定要对其使用方法进行熟练的了解,在对合并视频时就用到mencode。1.1.5.5 mediainfo MediaInfo的主要作用是对视频以及音频的编码与内容进行研究。它能够实现如下功能:1)能够在多种视频与音频文件的格式中使用。2)查看办法较多:如文本、网页等。 3)可以对查看方式进行自行定义。 4
19、)可以导出多种信息形式:如文本,HTML等。 5)发布时有下列三种版本:图形界面,命令行,DLL。 6)能够同 Windows 资源管理器实现合并。 7)国际通用性强。8)本地化容易。 1.1.5.6 httpwatch Httpwatch的作用是对页面进行分析。本文主要研究的就是页面分析,无法获取视频链接,本文的分布式抓取系统将不能完成,在获取链接时httpwatch的作用巨大。Httpwatch具有十分强大的数据分析性能,实际使用时主要将其集成在Internet Explorer工具栏中。它不需要借助其他的工具,就可以轻松同时完成网页显示、网页请求、网页回应等功能。1.1.5.7 开发工具
20、 vim Vim是实现分布式系统时所使用的编辑工具。其主要作用是程序员用它进行代码补充、编译以及错误跳转等。1.1.6 linux 下数据共享方式 目前,用户总是希望能够在多个计算机之间实现文件共享。使用较多的2类操作系统为windows与linux。存在多种方法来实现它们之间的文件传输。两个windows系统只需要利用网上邻居就可以进行文件分享。两个Linux之间则利用NFS和SAMBA来完成。现在使用最多的就是SAMBA,本文在进行文件共享时也是选择的该方法。在两个Linux系统之间以及Linux与Windows系统之间传输文件都是使用的SAMBA。其使用过程如下:1、 修改/etc/sa
21、mba/smb.conf 文件 security=user encrypt passwords=yes smb passwd file=/etc/samba/smbpasswd 2、生成口令文件 adduser sb123 (添加 linux 用户) passwd sb123 (设置 sb123 的 linux 密码,可以和 smbpasswd 不一样) cat /etc/passwd | mksmbpasswd.sh /etc/samba/smbpasswd 3、利用 smbpasswd 命令为刚才建立的帐号设置 samba server 口令 smbpasswd sb123(设置 sb12
22、3 的 smb 密码,可以和 linux 不一样) 4、重起 samba server service smb restart 1.1.7 小结 本章主要对文中运用到的基础知识进行了详细的介绍。首先对Perl模块进行介绍,其中的核心内容是网页的抓取技术;接下来对常见的几种视频地址隐藏技术进行介绍;最后对编写Perl语言用到的所有工具进行了介绍。1.2 系统架构 1.2.1 系统框架图整体说明 本文所研究的系统具有整体框架,其开发语言是Perl。Perl只是脚本语言,其优点较多,如性能较高、开发时能够维持稳定。该系统能够划分成抓取模块、下载模块、图表去除模块、视频上传模块、邮件提醒模块和处理突发
23、事件的模块。其框架图如图1-2所示。图1-2: 系统整体框架图 分析抓取模块:对网页上的内容进行分析,并形成统一任务,传输到SAMBA服务器上面的共享目录中,接着分布式机器对其进行处理,该任务以json数据文本的形式保存。下载视频模块:依照上一模块形成处理任务文件,对下载的任务进行处理,在下载任务结束后,以json格式对其保存。擦除图标模块:对别的网站上的视频进行抓取,并为己所用。上传视频模块:主要应用对象是大型网站。在视频下载完成之后,要将其上传至主站才可以给用户观看。邮件提醒模块:在后面的维护时期应用较多。异常处理模块:主要对特殊的任务进行处理。1.2.2 数据格式当前有下面几种数据格式,
24、如json、xml等。在系统中使用的数据格式是json。json数据比较简单。在进行编码时,json与xml使用的都是自己的编码工具,在编码时json比xml要容易。在解析时,运用xml时都需要复杂的代码,开发效率低。因为json数据具有简单灵活的优点,在分布式系统中得到非常大的应用。表1-1: 分析抓取模块产生的数据字段分布式抓取系统中有非常多的字段,而json以及xml是运用的最多的数据字段。如表1-1所示,是每个数据字段的名称与实现的功能。表1-2: 下载视频模块产生的数据字段在后面的模块中都用到抓取模块中形成的数据,在下载视频之后,其后处理阶段也需要一定的数据。其数据的传送也是通过js
25、on实现。下载模块产生的数据字段其名称与功能如表1-2所示。 1.2.3 数据库表的设计 由前文分析可知,本系统需要处理大量的数据、页面以及视频,为了简化处理过程,采用数据库的形式对这些数据进行处理。在分布式系统中,系统一共具有几个模块,每个模块中的状态都会发生更新,因此需要保存一些字段。可以将所有的任务划分成若干个子任务,因此需要进行数据库的设计,分别叫做母任务和子任务。可以将它们分别命名为parent_task, task,子表和母表中的字段具体内容如表1-3和1-4 所示。 表1-3: parent_task 表的字段一般的任务都可以由上述两个表格完成。若表中的数据无限增多,在需要对数据
26、进行查询的时候,速度就会变慢。因此,需要设计两张附表,其字段与parent_task 和 task一致。区别就是在任务完全执行完毕时,定期移动数据库表中的数据到附表中,附表分别命名为parent_task_log,task_log,在进行统计时,只需查询附表即可,所以优化了系统的性能。 为了保存已经下载过的视频,需要设计另外一个表格来对视频地址的url的 md5 值进行保存。将其命名为exist表,字段如表1-5所示。 表1-5: exist 表结构 1.2.4 函数库的实现 为了提升系统的性能,需要增加系统的可扩展性。因此,选择一些需要重复调用的代码,将其建立为函数库。1.页面抓取:sub
27、get_html_content 页面抓取是一项十分重要的内容,大部分http以及rtmp协议视频都将其视为核心内容。都是先对网页进行抓取,接着再对其进行分析,获取相应的数据,主要通过Perl中的LWP模块来实现抓取功能。其主要过程如下所示:第一步,通过LWP:UserAgent 类来建立对象,将超过时间调整为30毫秒。第二步,对其对象的get方法进行调用,获得相关内容,若失败,则将其写入日志;若成功,则将其内容解码,获取内容。2.任务相关的函数 put_task select_json_task get_task_info 抓取时,要完成的任务就是产生任务文件,并对其进行选择,获取相关信息,
28、put_task即为产生任务文件,不仅如此,还要具有以下参数:哈希数据以及目录名称。函数select_json_task的作用就是对文件进行选择,其执行标准为根据时间进行。由于本文项目的分布式的,机器之间会形成竞争,并会对资源进行争夺。因此,文件被选择后需要将其名字进行更改,这样可以对其他机器正面该文件已经被执行。函数get_task_info的作用是获取任务文件内容,在执行时,首先以文件的名称为参数,接着获取文件中的内容,然后调用decode_json 函数,返回哈希数据。如此,任务文件的全部信息便可以获得,同时进行相应的后续任务。为使项目扩展性更强,函数库所具备的功能十分重要,项目的设计以
29、及代码的编写都是基于其基础之上完成的。1.2.5 小结 本章首先对分布式视频抓取系统的整天结构进行阐述,接着对系统中各个模块的功能进行详细的分析,然后对数据的格式进行了简要介绍并分析了数据库表的设计内容,最后对函数库进行了详细分析。1.3 系统详细设计1.3.1 分析抓取模块 在所有的分布式系统中,抓取是其余任务的开端,其流程图如图1-4 所示。 图1-4: 分析抓取模块流程图抓取模块的主要作用是对页面的内容进行分析,并生产任务。因此,由它能够生产许多任务。在抓取模块中集成了世界范围内重要视频网站的抓取内容。1.3.2 下载视频模块 分布式系统中最重要的模块就是视频下载模块。整个系统中的工作都
30、是围绕它进行的。若视频下载不了,所有的工作都是白做。因此,开发出稳定的视频下载模块非常重要。视频下载模块的流程图如图1-5所示。图1-5: 下载视频模块流程图 首先将要完成的任务的数目确定下来,获得系统的负载。若负载过大,下载任务取消,在进行负载获取时,需要读取相关内核信息,从而判断系统任务是否超过负载,若超过上限,则打印一些信息,取消任务;若没有超过负载,则任务开始执行,通过调用select_json_task来对任务文件进行选择。接着调用connect 函数来连接数据库。其次,调用do_one_task函数,执行下载任务。在do_one_task函数中,第一步是调用get_task_inf
31、o函数,获取哈希值,接着获得每个字段的值;第二步调用check_dead函数,检查该任务重复次数是否大于三次,若是则把任务文件移至dead目录下面;若不是则将重复次数减少一次,检查代码如图1-6所示。若无需对任务文件进行移动,则依照协议来对下载方法进行选择。如图1-7所示为视频下载的核心代码,它是属于http协议的代码。如果下载的视频为分段式的,则需要通过ffmpeg将这些视频整合起来,如图1-8所示为其整合视频的核心代码。图1-6: 检查死文件核心代码图1-7: 下载视频核心代码 图1-8: 整合分段视频核心代码 若视频能够成功下载,就对其MD5值进行计算。如果计算成功,则把视频的路径储存在
32、哈希值内,接着将任务文件neu的哈希值集成起来,形成另一个任务文件。若要将图表去除,则将该任务文件放入delogo_dir目录中,否则将其放入upload_dir目录中。在全部的任务都完成之后,则do_one_task 函数返回1,若执行过程中有一步不能成功,则该函数值返回1。最后,通过do_one_task函数的返回值来对下一步的操作进行判断。第一步,获取数据库中任务文件的名称,并得到parent_task_id 函数的值,下载成功,则对下载状态进行更新,同时依照下载到文件的机器名称进行更新。将任务文件移至成功目录中,若操作不成功,则将子任务的状态设置为失败,并将任务文件移至失败目录中。若次
33、数大于三次,接着定期移动,确保任务可以顺利进行。最后将数据库关闭,结束任务。1.3.3 擦除图标模块 通常情况下,下载下来的视频都不能直接使用,需要对其进行适当的处理,如去除图标。其操作步骤跟下载模块差不多,最核心的内容就是对擦出图标的坐标进行确定。在进行图标擦除时要用到mencoder等工具。其流程图如图1-9所示。图1-9: 擦除图标模块流程图擦除图标的整个过程和下载差不多,但在很多细节方面有非常大的差异,尤其在do_one_task 函数内,它是整个过程中最重要的内容。在进行擦除图标时,最核心的步骤就是将需要擦除的位置的坐标显示出来,有了坐标任务实现起来非常简单。目前,大多数网站视频的图
34、像位置都是一致的,因此对不同的视频给出具体的方向,接着依照方向将图像的坐标计算出来。在前面介绍的内容中的哈希值中有一个参数为direction,其表示的就是方位。在计算出该值后,调用get_coordinate函数,然后便可以得到所要擦除图像的坐标。图像的长宽以及对应的坐标由四个参数来表示,分别将左上角的坐标和高、宽定义成x,y,w,h。这四个数的值可以通过下面的方式计算处理: 公式中的v_width值是通过mediainfo获取的,logo_width是一个经验数据,一般设定为156,all_width则是和播放器相关的参数,目前一般设定为640。同样,公式中的v_width值是通过medi
35、ainfo获取的,logo_height也是一个经验数据,一般设定为77,all_height的取值也和播放器有关,目前一般设定为480。 目前,一些大型视频网站的坐标基本相似。因此,通过具体方位可以进行计算。有分析可知,ref_x 与 ref_y一般能够近似设为20,若图标在视频的左上方,则x,y的大小就是图标的坐标,若在右上方,则y不变,x需要做如下变化。如果是左下方,那么x的坐标是固定的,而y的坐标需要调整。如果是右下方,那么x,y都必须做出调整。上述计算公式并不是凭空想象的,是通过大量研究分析得出的公式。利用这些公式,能够得到坐标值,就能够方便的进行图标擦除了,在利用mencoder
36、的工具将坐标计算出来,便可以完成擦除任务。1.3.4 上传视频模块 在下载和擦除过程完成之后,整个系统的任务已基本完成,若只是个人娱乐来设计系统的,则任务进行到此便能够停止。但作为视频网站,还得实现其他的相关功能,这样才能实现对视频资源的扩充以及上传。其过程与下载模块也类似,但在实际的操作上还是存在明显的区别的。首先,对负载情况进行判断,若负载过大,下载任务取消,否则继续进行数据库的连接。接着调用select_json_task函数对任务文件进行选择,接下去调用get_task_info函数获取相关内容,从而得到视频路径相关的信息。而且是否进行过擦除图标处理其操作步骤是有很大区别的。若没有经过
37、该处理,则下载模块中获取的路径即为上传视频的地址,通过调用put_src_file 函数就可以实现视频的上传了。其代码如图1-10所示:图1-10: 上传视频核心代码 在视频上传完毕后,在长传模块中,对数据库进行操作是其中一个重要的步骤,因为它是在获取视频以及长传视频后最后的一个流程。在前一章内容中,笔者已经讲到,设计出两个附表,若整个上传步骤完整实现,则能够把主表内的数据全部移至附表当中,若数据量不大,则可以使系统的系统得到提升,因此,移动数据十分重要。其次,在一个步骤完成之后,需要对视频状态进行更新。例如,在一个子任务完成后,其状态就需要从0变成1,这样就能够说明子任务已经完成,在目标中已
38、完成的任务的数量就会自动加1。在预定任务总数与已完成任务的总数相等时,则将母任务的状态进行更新处理,把数据移至副表当中,则整个上传过程完成。若失败,则判断为第几次失败,若数量大于3,则将目表中的状态更新为1,任务数量增加。若失败次数小于3,则无需更新子、母任务的状态。这样做的目的是给任务文件三次不成功的机会,减少网络因素的干扰,提高系统的性能以及可靠性。1.3.5 邮件提醒模块 在分布式系统当中,邮件提醒模块属于额外设定的功能。该功能最重要的内容就是怎样通过系统的邮件来实现邮件的发送。有如下两种方法能够实现此功能:第一种方法是通过运用Net:SMTP模块,在电子邮件中其属于最底层,能够直接实现
39、与stmp的交流,利用Internet对电子邮件进行传送,该模块在实现电子邮件传送时主要通过调用函数来实现。除此之外,在linux系统中,还有一个叫做mutt的工具,能够实现邮件的发生,它是linux系统内的email程序。Mutt与Windows系统中的邮件程序有非常大的区别。Mutt类似与文件管理器,区别就是它是对邮件进行管理的。要想实现Mutt功能需要利用一些程序作为支撑才可以完成,而Mutt不是操作系统自带的软件,在使用时需要先对其进行安装,为了方便的接受到邮件,在本文的系统中使用的就是Mutt。该模块的主要作用是进行邮件的提醒与统计,在使用时需要详细的了解所发送的数据的内容,由此才能
40、够依照要求实现相关的功能。在分布式抓取系统中,需要对每天完成抓取的数目进行统计,然后将统计结果写成heml数据格式,接着将其作为邮件中的内容进行发送。如图1-11所示为邮件发送核心代码。图1-11: 发送邮件关键代码 $html主要对表格里面的数据进行保存,之后的项目中的数据里有表格的表头;$count_html主要用来保存页面的信息,它属于一个html表格,在$count_html里面主要保存了当天以及以往一些成果的数据;$today表示的则是日期,每天都会收到该邮件,然后通过对邮件内容的查看,就能够了解到系统运行是否正常,这样便可以使系统的管理变得原来越简单。1.3.6 处理异常模块该模块
41、在整个系统中地位相对较低,主要原因是不是每个下载任务都需要用到异常处理模块,只是欲打破一些特殊情况才需要用到这一模块。如,在对优酷视频进行处理时,其下载链接的有效性能受到一定限制,如果发生很多这一的情况,该任务就难以完美的执行下去,任务就会发生堆积,最后任务就会过期不能执行。为了有效的解决这一问题,需要在系统中加入处理异常以及处理超时的模块。其主要工作原理是通过机器来将某些任务进行优先的处理,将视频下载到本地计算机内,接着再分布式项目中继续出现任务文件。新出现的任务文件的下载地址就会出现改变,变成ftp地址。因此,在对任务进行处理时无须对超时问题进行考虑。不仅如此,网络端口问题的处理也需要用到
42、同样的方法。如果需要对视频做非常多的处理,例如对视频进行编辑等,那么处理方法就是在前期将不同的地方全部处理完,在后面对相同的任务进行统一的处理,例如下载以及上传等。这样分布式的处理方法就会获得更多的处理细节,灵活性加大。在处理异常模块中,存在着两个非常复杂的过程,ftp上传便是其中之一。在完成视频下载之后,要将其上传至ftp服务器中,将地址保存起来,再其生产任务后,继续进行后面的过程。异常处理模块与视频上传模块类似,唯一的区别就是需要将其上传至ftp服务器中。第二个复杂的过程便是对ftp中的文件进行删除。在文件上传至ftp服务器后,在后续处理完毕之后需要对ftp内的文件进行删除,为了实现这一目标需要通过调用一些函数来实现。如库函数中的ftp_delete_file 函数,向该函数中传递文件的路径以及用户的密码等,就能够对ftp中的文件进行删除。处理异常模块虽然不是系统的核心模块,但它也是一个不能缺失的部分,有了它系统工作的稳定性与兼容性都能够得到提升。1.3.7 小结 本章对核心模块的流程图进行了设计,并对各模块的设计与执行过程进行了详细的分析。并对重要技术进行了代码的编写。分布式视频抓取系统已经基本实现。