計算機65-SLZ-MK+視頻網站技術_第1頁
計算機65-SLZ-MK+視頻網站技術_第2頁
計算機65-SLZ-MK+視頻網站技術_第3頁
計算機65-SLZ-MK+視頻網站技術_第4頁
計算機65-SLZ-MK+視頻網站技術_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

視頻網站技術

第1章視頻快速下載技術研究.....................................................2

1.1基礎概念和使用工具......................................................2

1.1.1PcH模塊介紹.......................................................2

LMP...................................................................................................................3

DBI.....................................................................................................................3

1.1.2Perl正則表達式.....................................................4

1.1.3網頁抓取...........................................................4

1.1.4視頻地址瑁藏技術...................................................5

不同的協議...................................................5

頁面源碼......................................................6

隱戒接口......................................................6

1.1.4.4視頻分段.....................................................6

1.1.5工具介紹...........................................................7

curl.....................................................................................................................7

rtmpdump..........................................................................................................8

ffmpcg................................................................................................................8

mcncoder............................................................................................................8

mediainfo...........................................................................................................9

httpwatch...........................................................................................................9

開發工具一vim.............................................................................................10

1.1.6linux下數據共享方式...............................................10

1.1.7小結...............................................................II

1.2系統架構................................................................12

1.2.1系統框架圖整體說明................................................12

1.2.2數據格式..........................................................13

1.2.3數據庫表的設計....................................................16

1.2.4函數庫的實現......................................................17

1.2.5小結...............................................................18

1.3系統詳細設計............................................................19

1.3.1分析抓取模塊......................................................19

13.2下載視頻模塊....................................................20

1.3.3擦除圖標模塊......................................................23

1.3.4上傳視頻模塊......................................................25

1.3.5郵件提醒模塊......................................................26

1.3.6處理異常模塊......................................................27

1.3.7小結..............................................................27

第1章視頻快速下載技術研究

主流的視頻網站提供給用戶的都是一個觀看縫接,我們不可能一個一個的觀

看,然后根據緩存來下載視頻,那樣是不現實的,也沒有必要,所以,有沒有一

種方法可以提供給你一個下載列表或者連下載列表都不給你,給你視頻網站的一

個主頁,然后能夠下載這個站下的所有視頻呢,答案是肯定的,這也就是本章的

研究內容。

當前國內的主流視頻網站包括優酷視頻,土豆視頻,騰訊視頻,搜狐視頻,

新浪視頻等,其中本文還列舉了一些新聞媒體的下載方法,包括海南新聞,齊魯

新聞,江蘇衛視,安徼衛視等,這些視頻媒體是一般客戶接觸最多的視頻媒體,

而且這些媒體也是提供的視頻資源最豐富的視頻媒體,如果能提供這些視頻媒體

的下載方法,我們也就滿足了幾乎所有的視頻用戶或者一些視頻企業的需求。當

然,面向一些國外用戶,或者國內一些一心向往國外視頻的用戶,也提供了包括

youtube視頻在內的一些國外網站的抓取,這樣,也就滿足了大部分的快速下載

需求。雖然沒有提供所有的視頻網站的抓取方法,但是應該也能滿足95%用戶的

快速下載方法要求。

本章的視頻快速下載方法是基于分布式視頻抓取系統的設計。

1.1基礎概念和使用工具

主要介紹了所有運用的一些語言基礎以及工具,以及在視頻抓取過程中需要

用到的一些相關技術,主要包括Perl模塊,正則表達式,Linux共享數據的方

式,主流的視頻隱藏技術,以及curl等工具的介紹。

1.1.1Perl模塊介紹

Perl最初的設計者為拉里?沃爾(LarryWall),他于1987年12月18日

發表。Perl借取了C、sed、awk>shellscripting以及很多其他程序語言的特

性。其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代

碼庫CPAN。簡而言之,Perl象C一樣強大,象awk、sed等腳本描述語言一樣方

便。Perl一般被稱為"實用報表提取語言"(PracticalExtractionandReport

Language),你也可能看到“perl”,所有的字母都是小寫的。一般,“Perl”,有

大寫的P,是指語言本身,而“perl”,小寫的p,是指程序運行的解釋器。Perl

追求的是簡單,解決一個一般的問題用它幾行代碼就完成了.一個稍復雜一點的

問題代碼也不會超過一屏!在軟件測試中,Perl通常是非常重要的角色。一般一

個測試通用函數庫就要分十幾個文件,甚至更多,包含多達上千個定制功能。而

這些函數將在主函數運行時,不定數量的被調用。幾乎可以說,一切自動過程都

是由Pe門自己完成的,可見其功能的強大和在當今計算機技術高速發展的時期

仍然發揮著重要的作用。Perl最初是當做一種Unix的腳本語言設計的,但是她

早就移植到大多數其它操作系統里了。因為Perl幾乎可以在任何地方運行,所

以Perl可以說是當今最具有移植性的編程環境。要想寫可移植的C/C++程序,

得在程序里加上一大堆#ifdof標簽來區分不同的系統。要想寫可移植的Java程

序,必須理解每種新的Java實現的特質。要想寫可移植的shell,可能要己住

每條命令在每種操作系統上的語法,走運的時候可能可以找到一些公共的東西。

而要想寫可移植的VisualBasic程序,那么只需要對“移植”有個更靈活的定

義就可以了。高興的是Pe門避免了所有這些問題,同時還保留了這些語言中的

許多優點,同時還有一些自己的特色。Perl的特色來自許多方面:它的特性集

的工具,Perl社區的創造性,以及開源運動的大環境。不過,許多這些特性都

是混合的東西;Perl的身世復雜,它總是把事物看成是優點的不同方面,而不

是弱點。Perl是“背黑鍋我來”的語言。

Perl的許多功能都是集成在模塊中,Pori有很多供編程人員選擇的模塊,

它們提供簡單的API,就可以實現很多復雜的功能,本節將介紹幾種在分布式抓

取系統中應用很多的模塊。

LMP

現在的網站應用越做越復雜,要想簡單的寫一個Sockettelnet去用GET指

令獲取資源簡直是不可能的,特別是一些需要用口令登陸的網站。如果只想簡單

獲取一些資源而不想寫太多比較復雜的代碼的話,那么就應該選用一個合適的封

裝起來的IITTPD模塊。LWP就是這樣產生的,它是LibraryforWWaccessinPerl

的縮寫,是一個訪問呢b服務器的Perl包。利用LWP這個包,可以很方便的在

我們的perl腳本里面訪問外部的Web服務器上面的資源。LWP可以提供許多功

*

使用文檔的URL從一個遠程的Web服務器上請求它;

向Web服務器發送數據,模擬填充表單的提交;

鏡像遠程Web服務器上的文檔,只傳輸比本地拷貝更新的文檔;

解析HTML文檔,獲取鏈接和其他有趣的特性;

將HTML文檔當作文本和postscript格式化;

處理cookie、HTTP重定向、代理服務器,以及HTTP用戶認證。事實

上,LWP實現了使用Perl編寫Web瀏覽器所需的所有功能。

LWP也有一些約束,比如輕量級進程(LWP,lightweightprocess)是一

種由內核支持的用戶線程。它是基于內核線程的高級抽象,因此只有先支持內核

線程,才能有LWP。每一個進程有一個或多個LWPs,每個LWP由一個內核線程支

持。這種模型實際上就是一對一線程模型。在這種實現的操作系統中,LWP就

是用戶線程。由于每個LWP都與一個特定的內核線程關聯,因此每個LWP都是一

個獨立的線程調度單元。即使有一個LWP在系統調用中阻塞,也不會影響整個進

程的執行。輕量級進程具有局限性。首先,大多數LWP的操作,如建立、析構以

及同步,都需要進行系統調用。系統調用的代價相對較高:需要在usermode

和kc門mod。中切換。其次,每個LWP都需要有一個內核線程支持,因此LWP

要消耗內核資源(內核線程的棧空間)。因此一個系統不能支持大量的LWP。

DBI

PerlDBI是Perl數據庫接口(PerlDatabaseInterface,簡稱DBI)o通過

提供一系列在內部上能夠轉化成原始調用函數的功能,DBI模塊為很多不同的數

據庫提供了一個統一的接口。由此,使用Perl就可以很容易地利用數據庫和建

立動態Web網頁。DBD是相應的數據庫的驅動程序,DBI和DBD的不同關系模型

如下圖1T所示。

Oracle

RDBMS

mSQL

RDBMS

DBD::lnforinixI->

~?Informix

RDBMS

圖1-1:DBI與DBD關系模型圖

當前,MySQL是廣泛用于Web網站開發的數捱庫,它是一種免費、開源的SQL

操作。本文所使用的數據庫就是Mysql數據庫。

1.1.2Perl正則表達式

本文在處理網頁的鏈接的時候會大量使用正則表達式,正則表達式當前應用

的非常廣泛。正則表達式通常縮寫成"regex”,些數有regexp,regex,復數有

regexps、regexesregexeno

正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定

字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”

用來表達對字符串的一種過濾邏輯。

給定一個正則表達式和另一個字符串,我們可以達到如下的目的:

1.給定的字符串是否符合正則表達式的過濾乏輯(稱作“匹配”);

2.可以通過正則表達式,從字符串中獲取我們想要的特定部分。

正則表達式的特點是:

1.靈活性、邏輯性和功能性非常的強;

2.可以迅速地用極簡單的方式達到字符串的復雜控制。

3.對于剛接觸的人來說,比較晦澀難懂。

由于正則表達式主要應用對象是文本,因此它在各種文本編輯器場合都有應

用,小到著名編輯器EditPlus,大到MicrosoftWord.VisualStudio等大型

編輯器,都可以使用正則表達式來處理文本內容。

1.1.3網頁抓取

Perl語言的LWP模塊也是利用相關爬蟲原理來實現網頁抓取的,本文主要

是利用LWP模塊現有的網頁抓取技術來獲取網頁內容,其實它的原理仍然是和上

面講到的網頁抓取差不多。在使用LWP獲取網頁的時候,只要引入LWP模塊,然

后按照如下操作,即可獲得網頁的頁面內容。

1.my$ua=LWP::UsorAgont->now;創建一個用戶代理對象。

2.$ua->timeout(30);設置超時情況。

3.my$rsp=$ua->gct($url);獲取網頁的內容,保存到一個變量中。

4.unless($rsp->is_success){

}判斷是否獲M成功。

5.my$content=$rsp->decoded_content;對獲取的內容進行解碼,因為

網頁的編碼與機器的編碼不一樣,這樣后就得到了網頁的內容。

1.1.4視頻地址隱藏技術

現在幾乎所有的視頻網站幾乎都使用了視頻隱藏技術,因為不可能直接分享

給用戶任意下載,如果那樣的話,很多用戶就會直接任意下載,視頻網站會減少

很多用戶量,網絡負載也會帶來很大的問題,就給視頻網站的帶來了很大的損失。

所以當前的網絡視頻都不同程度的隱藏了視頻下載鏈接,但是當前的主要隱藏技

術有如下幾種。

不同的協議

1.http協議

這是一種主流的網絡協議,當前幾乎所有的互聯網都是采用這種技術來分享

數據的。超文本傳輸協議(HTTP,HyperTextTransferProtocol)是互聯網上應

用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP

最初的目的是為了提供一種發布和接收HTML頁面的方法。

HTTP在視頻分享網站中是先通過HS將FLV下載到本地緩存,然后再通過

NetConnection的本地連接來播放這個FLV,這種方法是播放本地的視頻,并不

是播放服務器的視頻。因此在本地緩存里可以找到這個FLV。其優點就是服務器

下載完這個FLV,服務器就沒有消耗了,節省服分器消耗。其缺點就是FLV會緩

存在客戶端,對FLV的保密性不好。一般用戶由于服務端采取了地址隱藏技術,

所以下載視頻也就是采取這種方法,他們先看完視頻,然后再利用緩存來獲得視

頻。

采用HTTP方式來播放視頻,如果服務器端沒有限制速度,客戶端的帶寬越

寬,服務器消耗的帶寬也越寬,但是結果總是限速會影響用戶體驗。

2.rtmp協議

實時消息傳送協議(RTMP,RealTimeMessagingProtocol)是AdobeSystems

公司為Flash播放器和服務器之間音頻、視頻和數據傳輸開發的私有協議。它有

三種變種;

1)工作在TCP之上的明文協議,使用端口1935;

2)RTMPT封裝在HTTP請求之中,可穿越防火墻;

3)RTMPS類似RTMPT,但使用的是IITTPS連接;

RTMP協議被Flash用于對象,視頻,音頻的傳輸。這個協議建立在網絡協議

TCP協議或輪詢HTTP辦議之上,它好像一個用來填充數據包的容器,這些數據可

以是AMF格式的數據,也可以是FLV中的視/音頻數據。

RTMP通過NetConr.ection連接到FMS/Red5服務器,并實時播放服務器的FLV

文件,這種方式可以任意選擇視頻播放點(SEEK。),并不象HTTP方式需要緩存

完整個FLV文件到本地才可以任意選擇播放點,其優點就是在本地緩存里是找不

到這個FLV文件的。其優點就是FLV不會緩存在客戶端,FLV的保密性好,其缺

點就是消耗服務器資源,連接始終是實時的。RTMP協議下的視頻也會進行相關

隱藏,由于他不會緩存,如果客戶要下載視頻的話,就必須采取相關的方法才能

辦到,如果想用HTTP的緩存方法是萬萬不可能的,所以本文所講的抓取策略就

顯得有為必要了。

3.比較

一句話,一個是本地播放,一個是服務器實時播放,因需而定。HTTP現在

應用的比較多,因為這個完全不需要RED5或者FMS的服務器端的支持,普通的

WEB服務器都可以實現(虛擬主機),rtmp就必須有服務器了,不過保密性會強

一些。之所以大多數站點都用HTTP模式,一個是因為對服務器來說壓力小一些,

另外一種對FLASH來講,播放器的參數更容易設置一些,因為只要修改

XXX.swf?file=xxx就可以了。RTMP流媒體方式播放,只要客戶端達到最低帶寬

要求,不管客戶端的帶寬如何,服務器消耗的帶寬都一樣。

1.1.4.2頁面源碼

當前主要的視頻網站都會數據全部或者一部分隱藏在頁面源代碼中,網頁中

主要隱藏的數據包括,vid,tag,title,content,url,等等,這些數據對我

們后期的抓取都有重要的作用。上節已經講到怎么獲得頁面源代碼了,那么得到

頁面源代碼之后,怎么能得到前面所講到的那些數據呢,前面的正則表達式在這

里得到了廣泛的運用,具體步驟如下:

1、提取網頁的純文本。這個其實就LWP的功能。

2、將網頁的內容進行拆分成一個一個的文本,因為大部分情況下網頁的內

容是一段很長很長的文本,如果要清晰的分析,所以一般情況下要拆分了一個一

個的小段,拆分的方法是利用函數split函數,根據網頁的特殊構成,一般用

來拆分,但是也有不是這樣的,這個要根據具體的網頁來判斷。

3、運用正則表達式來提取網頁的title等數據,這個是主要目的,不過這

里正則表達式的運用是重點。

4、保存提取到的數據,為后面分布式下載視頻所用。

1.1.4.3隱藏接口

大部分情況下,數據不會僅僅隱藏在網頁中就能夠得到的,往往要經過很多

次嘗試或者調用很多不同的接口才能得到,這些接口的獲得也是最難發現的,這

種隱藏技術是幾乎所有大型的視頻網站所采取的一貫方法。實際上不僅僅是一個

接口,而且這個接口的調用還需要別的數據才能正確調用,得到一個正確的返回,

這些數據還要通過別的接口或者源代碼又或者是某些接口的源代碼中獲得,這實

際上是一個加密與解密的過程,所以這種情況下,一般用戶很難去分析,然后獲

得下載視頻的方法,這同樣是本文研究的重點以及分布式抓取系統的必要性。中

國當前的視頻網站都不是采用一個接口調用就可以得到我們想要的數據的,他們

往往要調用好幾個接口才能得到想要的某些數據,如果要得到全面的數據,還要

接下來的幾種隱藏技術的綜合使用。

1.1.4.4視頻分段

視頻隱藏的第三種技術就是采用視頻分段,因為這樣的話,即使采取了某種

技術下載了某些視頻,但是那些不是原生的視頻,用戶也很難使用或者拼接,所

以這種技術對于一些長視頻是一般視頻網站普遍采用的技術,因為它可以防止一

般用戶下載他們的視頻,這樣可以提高網站流量,但是也同樣限制了一般用戶的

一些特殊要求。但是當前的視頻分段信息是普遍保存在某一個接口中的,如果可

以知道是哪一個接口保存了這個分段信息,那么那些隱藏的信息也就不難拿到

了。

當前的視頻網站主要是采取這幾種方法來隱藏他們的視頻,本文也主要是根

據這些隱藏技術,來解密國內主流的視頻網站的信息來展開的。作為一個分布式

的抓取系統,當然不可能只分析一個視頻網站,而是應該得到國內90%以上的用

戶的需求,來得到視頻下載鏈接,然后下載視頻。再下一個章節中,講全面介紹

怎么得到下載鏈接。

1.1.5工具介紹

由于采用了一般企業采用的Perl語言,所以它利用了很多工具,這一節將

介紹本文所用到的大部分工具,了解這些工具的吻能和使用對于本文的開展以及

分布式系統的設計是一個非常重要的環節。

curl

它支持很多協議:FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE以及

LDAPocurl同樣支持HTTPS認證,HTTPPOST方法,HTTPPUT方法,FTP上傳,

kerberos認證,HTTP上傳,代理服務器,cookies,用戶名/密碼認證,下載文

件斷點續傳,上載文件斷點續傳,http代理服務器管道(proxytunneling),

甚至它還支持IPv6,socks5代理服務器,,通過http代理服務器上傳文件到FTP

服務器等等,功能十分強大。

Windows操作系統下的網絡螞蟻,網際快車(FlashGet)的功能它都可以做

到。準確的說,curl支持文件的上傳和下載,所以是一個綜合傳輸工具,但是

按照傳統,用戶習慣稱curl為下載工具。

Curl作為一種功能強大的工具,它有許多參數,大約有好幾百個,curl

的各個功能完全是依靠這些參數完成的。本文所用到的參數主要是如下:

一一connect-timeout---超時時間。

-max_time--最長下載時間。

-limit-rate--最大下載速度。

—retry----重復次數。

一retry-delay<seconds>---傳輸出現問題時,設置重試間隔時間。

一retry-max-time<seconds>----傳輸出現問題時,設置最大重試時間。

-A——設置用戶代理發送給服務器。

-o/-output--把輸出寫到該文件中。

一cookie---處理登錄問題。

rtmpdump

前面講過http協議是采用緩存可以下載視頻,可以采用curl也可以下載視

頻,但是基于rtmp協議的視頻如何下載呢,對于這個問題,國內的答案是很少

有用這個協議的視頻網站,但是國內沒怎么普遍使用,不表示沒有用處,rtmp

在adobe公司開發之初就已經有人在準備開發一個工具,讓它能夠適合在rtmp

協議下下載視頻,rtmpdump就是這樣一個工具,是一個匈牙利人的作品,應用

RTMP協議的服務器較好能較好的保護視頻,不被用戶輕易的下載到本地。但是

萬事萬物都有突破口,RTMP協議是為傳輸視頻文件而服務的,這些視頻站點都

有選用FLV格式的視頻文件,FLV文件格式是對外公開的。但是過程遠遠沒有說

的這么簡單。實際上,應用RTMP協議的服務器在發送完一段數據后,會等待客

戶端的Acknowledgement響應,沒有此響應,服務器就一直等著,不再傳送新的

數據。Rtmpdump的使用比curl簡單,例如:rtmpdump-r

Mrtmp://host/dir/filc.flv,r-ofilename,flv,如果發現收到"WARNING:

Downloadmaybeincomplete,try—resume!"信息,那么下載方法需要

添加一個一resume參數。例如:rtmpdump-r"rtmp://host/dir/file.flvM

-ofilename,flv——resume。

ffmpeg

Libav是一個自由軟件,可以運行音頻和視頻多種格式的錄影、轉檔、流功

能,包含了libavcodec—這是一個用于多個專案中音頻和視頻的解碼器庫,以

及libavformal------個音頻與視頻格式轉換庫。"FFmpeg"這個單詞中的"FF"指

的是"FastForward\ffmpeg是一個命令行工具,用來對視頻文件轉換格式,

也支持對電視卡實時編碼。FFmpeg可使用眾多參數,參數內容會根據ffmpeg版

本而有差異,下列為較常使用的參數。

-I設置輸入文件名。

-f設置輸出格式。

-y若輸出文件已存在時則覆蓋文件。

-fs超過指定的文件大小時則退出轉換。

-SS從指定時間開始轉換。

-title設置標題。

-timestamp設置時間戳。

-vsync增減Frame使影音同步。

由于ffmpeg可以使用的參數很多,本文使用的地方主要是在對下載的視頻

做音頻視頻處理的時候,特別是那些分段視頻,如果音頻視頻出錯,那么就算下

載回來的視頻也沒有實際價值,所以ffmpeg在本文有非常重要的作用。

mencoder

niencoder是一款命令行方式的視頻處理軟件,是Mplayer自帶的編碼工具

(Mplayer)是Linux下的播放器,開源,支持匚乎所有視頻格式的播放,現在

有windows和Mac版本)。在linux下,安裝完Mplayer后,就有mencoder,

無需另外安裝。mencoder支持幾乎所有的格式的視頻轉換,可以將任意格式轉

換到任意格式,轉換功能可以說是相當強大。目前市面上流行的格式轉換器,都

是基于mencodcr開發的GUI,比如暴風轉碼,格式工廠等。可以說轉換器能辦

到的,mencoder都能辦到,但mencodcr能辦到的,轉換器就不一定能辦到了。

mencoder同樣包含許多參數,如果要了解視頻的知識,就必須掌握

mencoder的使用,在分布式的抓取系統中,我們會對視頻進行合并和擦除圖標

等,就使用了mencoder,使用方法如下:

mcncoder-oaccopy-ovccopy-idx-ooutput,avivideol.avividco2,avi

video3.avi

*其中,-oaccopy選項告訴mencoder要正確拷貝音頻流。而-ovccopy選

項則是拷貝視頻流。

*如果在視頻文件中沒有找到索引的話,那么-idx選項會要求mencoder

建立它。

*-。選項指定輸出文件的名稱。

*最后幾個參數為需要合并的幾個視頻片段。

1.1.5.5mediainfo

MediaTnfo用來分析視頻和音頻文件的編碼和內容信息,是一款是自由軟件

(免費使用、免費獲得源代碼,許可協議:GNUGPL/LGPL)0它具有出色的特點

和功能,具體分為下面幾種。

1)支持眾多視頻和音頻文件格式。

2)多種查看方式:文本,表格,樹形圖,網頁……

3)自定義查看方式。

4)信息導出:文本,CSV,HTML...

5)三種發布版本:圖形界面,命令行,DLL(動態鏈接庫)。

6)與Windows資源管理器整合:拖放,右鍵菜單。

7)國際化:有多種界面語言供選擇。

8)(軟件界面)輕松實現本地化。

1.1.5.6hltpwatch

前面都是幾種視頻相關的工具,這些視頻工具是為了處理視頻、音頻的內容

而需要的,但是還有一種工具對分析頁面非常重要的,那就是httpwatch。頁面

的研究和分析是本文的核心,如果沒有得到主流視頻網的視頻鏈接,那么后面的

分布式抓取系統就無從談起,而下載鏈接的獲取,httpwatch又起到了決定性的

作用,因為我們拿到一個頁面,不可能憑肉眼就能看到視頻的鏈接,網站提供給

用戶的是一個觀看鏈接,也許有寫網站的隱藏不夠深入,那么憑頁面的源代碼就

能發現視頻的下載鏈接,但是那種網站基本上是不存在的,特別對于一些主流的

視頻網站來說,他們也不可能這么簡單。所以httpwatch就顯得尤為重要了。

HttpWatch是一種非常強大的網頁數據分析工具。它集成在

TnternetExplorer工具欄。包括Cookies管理,緩存管理,消息頭發送/接受,

字符查詢,POST數據和目錄管理等功能,是一款很好地收集并顯示頁頁深層信

息的軟件。它完全不用代理服務器或其他復雜的網絡工具,就能夠很容易的在顯

示網頁同時顯示網頁請求和回應的日志信息。甚至可以顯示瀏覽器緩存和IE之

間的交換信息。集成在InternetExplorer工具欄。Httpwatch的使用在后面

分析頁面的時候會再次講到。

1.1.5.7開發工具一vim

最后簡單介紹一些在實現分布式系統時用到的編碼工具一vimoVim是從vi

發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別

豐富,在程序員中被廣泛使用。和Emacs并列成為類Unix系統用戶最喜歡的

編輯器.Vim的第一個版本由布萊第?米勒在1991年發布。最初的簡稱是Vi

IMitation,隨著功能的不斷增加,正式名稱改成了ViIMprovedo現在是在開

放源代碼方式下發行的自由軟件。

Vim具有6種基本模式和5種派生模式。其中基本模式包括普通模式、插

入模式、可視模式、選擇模式、命令行模式、Ex模式。衍生模式包括操作符等

待模式、插入普通模式、插入可視模式、插入選擇模式、替換模式。

1.1.6linux下數據共享方式

當前一般用戶在使用操作系統時,總會想到怎么才能使多臺機器共享文件,

windows和linux是當前一般用戶使用最多的兩種操作系統,那么實現這兩種

操作系統之間的共享文件呢,包括windows和windows之間共享文件,linux與

linux之間共享文件,以及windows和linux下共享文件。具體的實現方法有

很多種。

windows與windows之間共享文件可以通過網上鄰居來實現共享。Linux

與linux可以通過NFS與SAMBA來提供文件共享,通常還會遇到windows和

linux共存的網絡環境,那么SAMBA就是一種特殊的共享文件的方式,SAMEA目

前應用非常廣泛,本文后面的分布式系統也采取這種方式來共享文件,因為它特

別適合在局域網中使民。還有一種文件共享的方式,那就是FTP,這種方式在實

際網絡環境中也經常使用,但是由于操作比較麻煩,而且它比較適合廣域網,所

以本文的分布式系統沒有采用。

多種共享方式來實現文件共享,Samba(SMB是其縮寫)是一個很好網絳服

務器,用于Linux和Windows共享文件,Samba服務也是Unix中的一個服務;

Samba既可以用于Windows和Linux之間的共享文件,也一樣用于Linux和

Linux之間的共享文件;不過對于Linux和Linux之間共享數據文件還有網絡文

件系統NFS,NFS也需要架設服務器等操作的;它的作用是Unix機器和

windows機器的文件共享。可以用windows的網上鄰居來訪問Unix機器上的

文件,當然每種共享文件的方式各有各的優點,由于本文只采用了SAMBA,所以

這里簡單介紹一下SAMBA的搭建。

1、修改/etc/samba/snb.conf文件

security=user

encryptpasswords=yes

smbpasswdfi1e=/etc/samba/smbpasswd

2、生成口令文件

addusersbl23(添加linux用戶)

passwdsbl23(設置sbl23的linux密碼,可以和smbpasswd不一樣)

cat/etc/passwdInksmbpasswd.sh>/etc/samba/smbpasswd

3、利用smbpasswd命令為剛才建立的帳號設置sambaserver口令

smbpasswdsbl23(設置sbl23的smb密碼,可以和linux不一樣)

4、重起sambaserver

servicesmbrestart

1.1.7小結

本章是全文的理論基礎,分別介紹了語言基礎中的重要模塊,其次是在頁面

分析中經常用到的正則表達式,以及視頻隱藏技術,由于主流的視頻網站都不會

直接告訴用戶是哪些接口,所以需要采取相關的分析方法,熟悉主要的隱藏技術,

在這一章節中都有提到。再加上本文是采用了腳本來實現分布式系統,那么所用

到的工具就比較多,包括基于不同協議的下載工具一curl和rtmpdump,頁面分

析工具一httpwatch,視頻音頻操作工具一ffmpeg.inencoder等,還有linux

環境下的編碼工具一vim。這些工具的介紹,為后面分析具體實現做了鋪墊,既

然本文是要實現一個分布式的抓取系統,那么就要針對不同機器共享文件采取相

關方法,最后一節總結了一些文件共享的方式,詳細介紹了在分布式系統中用到

的SAMBA服務器的配置,這也是它實現分布式抓取系統的前提。

任何一種研究成果的取得,都必須建立在一定的理論基礎之上,本文對國內

外主流視頻網的下載鏈接的研究以及分布式抓取系統的設計與實現也同樣如此,

因為它的每一個細節都建立在本章之上,整個第二章就是全文的基礎。

1.2系統架構

本章開始主要是分布式系統架構方面的內容,對于分布式系統的整體說明,

包括系統系統架構圖的說明,多網站多鏈接的數據如何整合,以及為了應對一些

單大任務多子任務,去除重復等內容,考慮利用數據庫來保存現有的數據,涉及

到數據庫表的設計,其次為了應對后面任務的簡單運行,考慮設計一些函數庫。

1.2.1系統框架圖整體說明

分布式的視頻抓取系統是一個整體的系統,它有一個整體的框架,整個系統

是用Perl語言開發和設計的,雖然是一種腳本語言,但是是一個高性能,高并

發,高定穩性的一個系統,系統的整體框架分為分析抓取模塊,下載視頻模塊,

擦除圖標模塊,上傳視頻模塊,郵件提醒模塊,如果有一些差異化的下載任務,

還需要有差異化的處理方式的異常處理模塊,圖1-2是整個系統的一個系統框

架圖。

分布式抓取系統

分下

抓標

圖1-2:系統整體框架圖

分析抓取模塊:主要是分析一些頁面信息,生成一個統一的任務到SAMBA

服務器上的共享目錄里面,供后面分布式的機器來處理,這個任務生成的是一個

統計的json數據的文本,如果不能生成統一的格式,是不能分布式下載的,所

以處理json數據格式一個重點,后面的章節會詳細介紹。

下載視頻模塊:主要根據分析模塊生成的處理任務文件,下載模塊處理下載

任務,當完成下載任務后,也會生成自己的一個json格式的數據,但是這個文

本的json數據會放到一個專有的目錄下面,這個目錄并不是共享的,因為這樣

會造成系統的資源的競爭過多,網絡資源的浪費。一個機器處理一個任務,當然,

下載模塊最主要的還是下載任務文件中的視頻,下載到一個專有的機器上,供系

統的后面幾個模塊處理。

擦除圖標模塊:這個是一個商業性比較強的模塊,因為抓取其他視頻網站的

視頻為自己所用,所以是需要處理掉一些圖標的,如果僅僅個人所用,那這個模

塊是不需要,所以系統整體架構圖上有一個箭頭標志可以直接跳過這個模塊,所

以給設計帶來了很大的靈活性。

上傳視頻模塊:這個也是針對一個大型視頻網站而設計的一個模塊,因為下

載到本地機器上,是需要上傳到主站的,供用戶觀看,所以這個模塊是必不可少

的,當然,如果是自己使用,這個模塊也是不需要的,不過有時我們需要做統一

管理,也可以利用上傳模塊來處理。

郵件提醒模塊:這個一個后期維護方面而設計的一個模塊,因為只有統計和

提醒,我們才知道系統有無發生bug,只有提供了這些,才算是一個高性能,高

穩定,可維護性的系統。

異常處理模塊:這個模塊是為了應對一些需要特殊化處理的一些任務,如果

需要抓取的視頻任務而延時敏感,對抓取任務要多更多的前期處理,那么這個模

塊就顯得比較重要了,它可以給項目帶來更多的靈活性。

1.2.2數據格式

在分布式系統中,獨立的計算機展現給用戶的是一個統一的整體,就好像是

一個系統。系統擁有多種不同的通用的物理和邏輯資源,可以動態的分配系統任

務,分散的物理資源和邏輯資源,并且通過計算機網絡實現信息交換。總之,系

統中存在一個以整體且全局的方式管理資源。這樣一個分布式的系統,網站集成

多且復雜,如果沒有一個統一的數據格式,機器是無法分辨任務文件的,無法完

成統一的工作,分布式執行更是不可能的。

對于分析模塊,需要生成一個統一的數據格式,當前主流的數據格式有很多

種,包括json,xml等,系統中,使用的是json數據格式,JSON[34](JavaScript

ObjectNotation)是一種輕量級的數據交換格式。它基于JavaScript

(StandardECMA-2623rdEdition-December1999)的一個子集。JSON采

用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括

C,C++,C#,Java,JavaScript,Perl,Python等)。

XML是extensibleMarkupLanguage的縮寫。由于json相對來說是一種

更輕量級的一種數據格式,xml相對來說更重一些,同時從數據交換格式中的解

析難度來說,json數據也是一種比較簡單的數據格式,在編碼上,雖然XML和

JSON都有各自的編碼工具,但是JSON的編碼要比XML簡單。在解析上,在普

通的web應用領域,開發者經常為XML的解析傷腦筋,無論是服務器端生成或

處理XML,還是客戶端用JavaScript解析XML,都常常導致復雜的代碼,極低

的開發效率。在分布式系統中,普遍采用了json的數據格式,這是由于json數

據本身的優點,也是出于簡單靈活性的考慮。

表IT:分析抓取模塊產生的數據字段

TITLE對應視頻的標題

CONTENT對應視頻的簡介

AUTHOR對應視頻的上傳用戶

TAGO對■應視頻的標簽1

1AG1對應視頻的標簽2

1AG2對應視頻的標簽3

1AG3對應視頻的標簽4

1AG4對應視頻的標簽5

URL對應視頻的觀看地址

DELOGO是否需要擦除bg。

RETRY_TIMES重復次數

MEMBERID用戶ID

PASS_HEX用戶密碼的隨機碼

PROTOCOL.INFO協議信息,如密碼,用戶之類的信息

PROTOCOL視頻所選取的協議

DIRECTION擦除logo的位置

DELOGO_TYPE擦除logo的類型

IASK_FILENAME生成的任務文件的名字

SEGMENT分段視頻的段數

DB_TASKNAME主要是告訴任務在數據庫中的任務名

PART分段信息,保存了每個段的地址

分布式抓取系統的數據交換有很多,許多地方都會用到JSON數據和XML

數據,首先介紹一下在分析模塊中產生哪些數據字段,這些字段是對于每個視頻

都需要的。每個字段的意義和功能如表上1分析抓取模塊產生的數據字段表所

示。對于每一個抓取網站都必須產生這些數據,如果不全,后面的處理工作就不

能順利進行。特別是右于PART字段,它代表是真正的視頻下載地址,如果沒有

這個字段,那整過分布式抓取系統就沒有意義。

表1-2:下載視頻模塊產生的數據字段

TITLE對應視頻的標題

CONTENT對應視頻的簡介

AUTHOR對應視頻的上傳用戶

TAGO對應視頻的標簽1

1AGI對應視頻的標簽2

1AG2對應視頻的標簽3

1AG3對應視頻的標簽4

TAG4對應視頻的標簽5

URL對應視頻的現看地址

DELOGO是否需要擦除bg。

RETRY_TIMES重復次數

MEMBERID用戶ID

PASSJ1EX用戶密碼的隨機碼

SRCVIDEO視頻路徑

PREFIX任務的前綴名

DIRECTION擦除bgo的位置

DELOGO_TYPE擦除logo的類型

TASK—FILENAME生成的任務文件的名字

DB_TASKNAME主要是告訴任務在數據庫中的任務名

分析抓取模塊產生了許多數據為后面所有的建塊所用,但是當下載模塊將視

頻下載下來,后期的處理還是需要一些數據,同樣,也是采用json來傳遞數據

信息,下載模塊產生的數據字段的意義如表1-2下載視頻模塊產生的數據字段所

示,每個字段的每個信息都是下載和處理的需要,所以每個字段的完整同樣是必

不可少的。有很多字段是從分析模塊中獲得的,最主要是增加了一些開放平臺的

數據處理,以及機器上的視頻路徑,這個是后面對視頻處理的關鍵。

同樣,如果需要擦除logo的話,那么擦除logo模塊也同樣會產生json

數據,它的字段和下載模塊差不多相同,只是把DELOGO相關的信息去掉即可,

所以對于這種模塊沒有紿出具體的數據格式,但是由前面表1-2分析模塊產生的

數據格式表,表1-2下載模塊產生的數據格式表,可以得到具體的數據格式。有

了這些數據,那么分布式的抓取系統就是圍繞這些數據進行的,自然就很容易實

現系統。

1.2.3數據庫表的設計

這個系統本身是可以不用采取數據庫可以簡單實現,但是經過前文的分析,

得到這樣一個結論,本系統是要要處理大數據,大頁面,大視頻的相關任務,并

且要分布式的處理,那么每天的處理信息必將非常之大,那么如果我們用文件保

存一些數據,當然也可以,但是對于重復的視頻如何處理,對于統計信息怎么獲

得,對于單母任務多子任務的任務文件怎么處理,這樣如果僅僅依靠文件來保存,

必將受困于文件索引的個數,最后肯定會超過限制,到不能使用為止,所以,設

計數據庫是必需的。

既然數據庫是必需的,那么究竟需要保存哪些數據,怎么設計表呢,在這個

分布式的項目中因為系統分為幾個模塊,那么每個模塊都會要更新狀態,所以需

要更新狀態,需要一些字段保存狀態,其次,因為所有的任務都分為子任務,母

任務,一個母任務有很多個子任務,所以需要設計一個數據庫,兩個表的名字是

parenttask,task,子表和母表中的字段具體有哪些如下表1-3,1-4所示。

表1-3:parent_task表的字段

lask_mnie任務的名字

lask_id任務id,自動增長

lask_num每個母任務中子任務的個數

Stait_task_liii^任務開始時間

Done_task_tinie任務結束時間

Status任務狀態,開始為0,結束為1

Done_comt已經完成的r任務數

Parent_task_id母任務的id

lask.id該子任務的id

lask_nanie該子任務的名字

Host_name任務被哪一臺機器獲得

Start_task_tinie任務開始時間

Done_task_time任務完成時間

Download_slatus下載是否成功

Dek)go_status擦除bg。是否成功

Upk)ad_slatus上傳是否成功

有了這兩個表,一般的任務都沒有問題,而且也能很好的處理,但是如果表

的數據無限增長,但是系統中要多次查詢數據庫,如果數據過大,那么造成查詢

速度會變得很慢,那么多帶來的效果也就變得很差,所以這個系統中,設計兩個

附表,這兩張附表和parent_task和task字段完全一樣,只是當任務完全執

行完畢的時候,定期移動數據庫表中的數據到附表中,定義附表的名字為

parent_task_log,task_log,每次進行統計功能的話,只需要查詢附表即可,

所以給系統露來了很大而性能優化。

同時,為了保存已經下載過視頻,不下載重復的視頻,需要設計另外一張表,

保存所有視頻地址的url的md5值,這樣更容易區分重復是否出現。所以這張

表的比較簡單,叫做exist表,字段如表1-5所示。

表1-5:exist表結構

ki自動增長,id

MD5Url對應的md5值

1.2.4函數庫的實現

一個高性能的系統,需要有良好的擴展性,在這個分布式的抓取系統中也有

考慮這個因素,所以為了給系統增加一些可擴展性,設計了一些函數,擴展性對

于一個抓取項目是非常重要的,因為抓取的內容是有很多重復性的東西,如果能

夠實現函數庫也是非常有必要的。選擇那些經常需要重復性的代碼的一些功能,

實現函數手。

1.頁面抓取:subget_html_content

頁面抓取是一個非常重宴的內容,基本上所有基于http和rtmp協議的視

頻都需要首先抓取頁面內容,然后分析,獲取需要的數據,這個函數的功能就是

實現抓取頁面的功能,它是運用Perl的一個LWP模塊的功能,具體內容在前面

有介紹。首先利用LWP::UserAgent類,構建對象,設置超時時間為30ms,然

后調用對象的get方法,獲取內容,如果不成功,就寫進日志,如果成功,需

要對內容進行解碼,得到內容,返回結果。之所以需要解碼,是由于頁面的編碼

和機器的編碼方式不一樣,這個函數傳入的參數只是一個頁面鏈接的字符串,基

本上所有的頁面抓取相關的功能都能實現,寫進函數庫,抓取的重復性得到了很

好的利用,很好完成了擴展性相關的內容。

2.任務相關的函數put_taskselect_json_taskget_task_info

分布式的抓取項目中,經,需要產生任務文件,選擇任務文庫,得由任務信

息,對于put_task是產生任務文件,它需要一些哈希數據,以及目錄的名字作

為參數,哈希數據中的文件名作為生成文件的名字,利用JS0N模次的

encode_json方法產生文本數據,最后寫進文件即可,這樣就把哈希數據寫進文

件,并且以json數據的格式存儲在文件中了。

選擇任務文件select_json_task,選擇任務文件的標準是按時間先后順序

來選

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論