欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

分布式轉(zhuǎn)碼系統(tǒng)、方法及其裝置與流程

文檔序號:12498463閱讀:227來源:國知局
分布式轉(zhuǎn)碼系統(tǒng)、方法及其裝置與流程

本發(fā)明涉及分布式轉(zhuǎn)碼系統(tǒng)、方法及其裝置。



背景技術(shù):

目前有一些為企業(yè)提供視頻托管服務(wù)的業(yè)務(wù),其中有一項服務(wù)便是將企業(yè)提供的高清視頻轉(zhuǎn)碼為適合互聯(lián)網(wǎng)進(jìn)行傳播的視頻流,在這個過程當(dāng)中就涉及到用戶在平臺上傳的視頻進(jìn)行轉(zhuǎn)碼的操作,由于涉及到的用戶和用戶視頻會非常的多,我們不可能使用單臺機器進(jìn)行轉(zhuǎn)碼,必須使用分布式的方式對用戶上傳的視頻進(jìn)行轉(zhuǎn)碼。

一般的框架設(shè)計,通常會有一個任務(wù)中央任務(wù)調(diào)配系統(tǒng),配多個任務(wù)處理機器來進(jìn)行轉(zhuǎn)碼作業(yè),這種設(shè)計完全依賴中央任務(wù)調(diào)配系統(tǒng),這個系統(tǒng)可能會被過渡設(shè)計,除了任務(wù)分配的調(diào)度,還需要實時對所有的工作機器進(jìn)行監(jiān)控來判斷是否分配任務(wù)到該工作機;并且這個調(diào)度系統(tǒng)是非常重要,必須保證其高可用以確保該調(diào)度系統(tǒng)沒有單點故障風(fēng)險;而當(dāng)該中央調(diào)度系統(tǒng)作集群,本身就需要多臺機器部署,從而增加機器成本。



技術(shù)實現(xiàn)要素:

為了克服現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供分布式轉(zhuǎn)碼系統(tǒng)、方法及其裝置,其能實現(xiàn)轉(zhuǎn)碼機器自身自行調(diào)度的分布式轉(zhuǎn)碼。

本發(fā)明的目的采用以下技術(shù)方案實現(xiàn):

分布式轉(zhuǎn)碼系統(tǒng),包括轉(zhuǎn)碼模塊、數(shù)據(jù)庫、共享文件系統(tǒng);

共享文件系統(tǒng)用于接收外部的請求端發(fā)送來的源文件并存儲;

數(shù)據(jù)庫用于接收外部的請求端發(fā)送來的任務(wù)數(shù)據(jù)包并存儲;

轉(zhuǎn)碼模塊用于從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,以及根據(jù)任務(wù)數(shù)據(jù)包從共享文件系統(tǒng)中獲取對應(yīng)的源文件,并對源文件進(jìn)行轉(zhuǎn)碼;將轉(zhuǎn)碼后的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中。

分布式轉(zhuǎn)碼方法,應(yīng)用于分布式轉(zhuǎn)碼系統(tǒng),包括如下步驟:

S1、共享文件系統(tǒng)接收源文件并存儲;數(shù)據(jù)庫接收任務(wù)數(shù)據(jù)包并存儲;

S2、轉(zhuǎn)碼模塊的守護(hù)線程從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并在轉(zhuǎn)碼模塊的工作池中創(chuàng)建一個轉(zhuǎn)碼進(jìn)程;工作池根據(jù)任務(wù)數(shù)據(jù)包中的轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件;

S3、工作池對源文件進(jìn)行轉(zhuǎn)碼,將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中。

作為優(yōu)選,工作池包括心跳單元和轉(zhuǎn)碼單元;

S2具體為:守護(hù)線程從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并在工作池中創(chuàng)建一個轉(zhuǎn)碼進(jìn)程;心跳單元定時發(fā)送心跳數(shù)據(jù)至數(shù)據(jù)庫中的任務(wù)數(shù)據(jù)包中,以使任務(wù)數(shù)據(jù)包中的心跳時間更新為接收到該心跳數(shù)據(jù)的時間;轉(zhuǎn)碼單元根據(jù)轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件。

作為優(yōu)選,S2中的守護(hù)線程從數(shù)據(jù)庫中獲取待轉(zhuǎn)碼的任務(wù)數(shù)據(jù)包;以及從數(shù)據(jù)庫中獲取運行中且心跳時間距離當(dāng)前時間超過預(yù)定時間的任務(wù)數(shù)據(jù)包。

作為優(yōu)選,守護(hù)線程還用于檢測工作池中的容量,并在工作池的容量有盈余時,守護(hù)線程再次從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并在工作池中創(chuàng)建另一個轉(zhuǎn)碼進(jìn)程。

作為優(yōu)選,S2還包括:工作池將獲取到的源文件存儲至緩存目錄中。

作為優(yōu)選,S3還包括:守護(hù)線程在轉(zhuǎn)碼單元轉(zhuǎn)碼成功后,發(fā)送轉(zhuǎn)碼成功信號至對應(yīng)的任務(wù)數(shù)據(jù)包中,并更新該任務(wù)數(shù)據(jù)包的狀態(tài)信息為完成。

作為優(yōu)選,守護(hù)線程還用于在轉(zhuǎn)碼單元轉(zhuǎn)碼失敗后,發(fā)送轉(zhuǎn)碼失敗信號至對應(yīng)的任務(wù)數(shù)據(jù)包中,更新該任務(wù)數(shù)據(jù)包的狀態(tài)信息為失敗。

作為優(yōu)選,S3中,工作池根據(jù)任務(wù)數(shù)據(jù)包中的轉(zhuǎn)碼需求對源文件進(jìn)行轉(zhuǎn)碼。

分布式轉(zhuǎn)碼裝置,應(yīng)用于分布式轉(zhuǎn)碼系統(tǒng),包括:

第一存儲模塊,應(yīng)用于共享文件系統(tǒng),用于接收源文件并存儲;第二存儲模塊,應(yīng)用于數(shù)據(jù)庫,用于接收任務(wù)數(shù)據(jù)包并存儲;

創(chuàng)建模塊,應(yīng)用于轉(zhuǎn)碼模塊的守護(hù)線程,用于從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并在轉(zhuǎn)碼模塊的工作池中創(chuàng)建一個轉(zhuǎn)碼進(jìn)程;

獲取模塊,應(yīng)用于工作池,用于根據(jù)任務(wù)數(shù)據(jù)包中的轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件;

運行模塊,應(yīng)用于工作池,對源文件進(jìn)行轉(zhuǎn)碼,將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中。

相比現(xiàn)有技術(shù),本發(fā)明的有益效果在于:將中央任務(wù)調(diào)配系統(tǒng)去除,由各個轉(zhuǎn)碼機器本身來實現(xiàn)自行調(diào)度,從而減少了發(fā)生故障的風(fēng)險,節(jié)省機器成本的投入,降低后期維護(hù)的難度。

附圖說明

圖1為本發(fā)明的分布式轉(zhuǎn)碼系統(tǒng)的模塊連接圖;

圖2為本發(fā)明的分布式轉(zhuǎn)碼方法的流程圖;

圖3為本發(fā)明的分布式轉(zhuǎn)碼裝置的模塊連接圖。

具體實施方式

下面,結(jié)合附圖以及具體實施方式,對本發(fā)明做進(jìn)一步描述:

分布式轉(zhuǎn)碼系統(tǒng),如圖1所示,包括轉(zhuǎn)碼機器、數(shù)據(jù)庫、共享文件系統(tǒng)和傳輸組件;

傳輸組件用于接收需要進(jìn)行轉(zhuǎn)碼的源文件和任務(wù)數(shù)據(jù)包,并將源文件存儲至共享文件系統(tǒng)中的源文件模塊中,以及將任務(wù)數(shù)據(jù)包存儲至數(shù)據(jù)庫的任務(wù)池中。每個任務(wù)數(shù)據(jù)包括了任務(wù)ID、轉(zhuǎn)碼源文件路徑、狀態(tài)信息(初始為“待轉(zhuǎn)碼”)、心跳時間、轉(zhuǎn)碼目標(biāo)文件路徑、轉(zhuǎn)碼需求、轉(zhuǎn)碼工作機等信息。

轉(zhuǎn)碼機器中設(shè)有轉(zhuǎn)碼模塊,轉(zhuǎn)碼模塊從數(shù)據(jù)庫中的任務(wù)池中獲取的任務(wù)數(shù)據(jù)包,并發(fā)送心跳數(shù)據(jù)至任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中更新心跳時間,以及根據(jù)任務(wù)數(shù)據(jù)包的轉(zhuǎn)碼源文件路徑從共享文件系統(tǒng)中的源文件模塊中獲取對應(yīng)的源文件。每個轉(zhuǎn)碼機器中設(shè)有多個轉(zhuǎn)碼模塊。

轉(zhuǎn)碼模塊根據(jù)任務(wù)數(shù)據(jù)包和源文件進(jìn)行轉(zhuǎn)碼,同時將源文件存儲至轉(zhuǎn)碼機器的緩存目錄中。轉(zhuǎn)碼模塊將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中的轉(zhuǎn)碼文件模塊中,并發(fā)送轉(zhuǎn)碼成功信號至數(shù)據(jù)庫中的任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中,更新該任務(wù)數(shù)據(jù)包的狀態(tài)信息為完成。

有些情況下,例如源文件的格式不支持,或者源文件損壞等原因,轉(zhuǎn)碼模塊無法將該源文件轉(zhuǎn)碼,那么轉(zhuǎn)碼就會失敗,此時轉(zhuǎn)碼模塊會將任務(wù)標(biāo)識為失敗,并且不作任何的文件拷貝動作。

分布式轉(zhuǎn)碼方法,應(yīng)用于分布式轉(zhuǎn)碼系統(tǒng),如圖2所示,包括如下步驟:

步驟100、傳輸組件接收外部的請求端發(fā)送來的需要進(jìn)行轉(zhuǎn)碼的源文件和任務(wù)數(shù)據(jù)包,并將源文件存儲至共享文件系統(tǒng)中,以及將任務(wù)數(shù)據(jù)包存儲至數(shù)據(jù)庫中;

具體的,將源文件存儲之共享文件系統(tǒng)中的源文件模塊中;以及將任務(wù)數(shù)據(jù)包存儲至數(shù)據(jù)庫的任務(wù)池中;每個任務(wù)數(shù)據(jù)包包括任務(wù)ID、轉(zhuǎn)碼源文件路徑、狀態(tài)信息、心跳時間、轉(zhuǎn)碼目標(biāo)文件路徑、轉(zhuǎn)碼需求和轉(zhuǎn)碼工作機;狀態(tài)信息包括:待轉(zhuǎn)碼、運行中、完成和失敗。

步驟101、轉(zhuǎn)碼模塊從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并創(chuàng)建一個轉(zhuǎn)碼進(jìn)程,轉(zhuǎn)碼模塊定時發(fā)送心跳數(shù)據(jù)至任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中,以及根據(jù)轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件。

轉(zhuǎn)碼模塊包括守護(hù)線程和工作池;工作池包括心跳單元和轉(zhuǎn)碼單元。具體的,轉(zhuǎn)碼模塊的守護(hù)線程從任務(wù)池中獲取任務(wù)數(shù)據(jù)包,并在工作池中創(chuàng)建一個轉(zhuǎn)碼進(jìn)程,工作池的心跳單元定時發(fā)送心跳數(shù)據(jù)至任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中,以及轉(zhuǎn)碼單元根據(jù)轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件。

轉(zhuǎn)碼源文件路徑和共享文件夾系統(tǒng)中源文件模塊相對應(yīng),轉(zhuǎn)碼模塊可以根據(jù)轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)的源文件模塊中獲取對應(yīng)的源文件。

轉(zhuǎn)碼模塊發(fā)送心跳數(shù)據(jù)具體為:轉(zhuǎn)碼模塊定時發(fā)送一個心跳數(shù)據(jù)至任務(wù)數(shù)據(jù)包,心跳時間更新為接收到心跳數(shù)據(jù)的時間。例如,轉(zhuǎn)碼模塊每隔30s發(fā)送一個心跳數(shù)據(jù)至任務(wù)數(shù)據(jù)包,轉(zhuǎn)碼模塊在06:00:20第一次發(fā)送一次心跳數(shù)據(jù)至任務(wù)數(shù)據(jù)包,心跳時間更新為06:00:20;轉(zhuǎn)碼模塊在06:00:50第二次發(fā)送心跳數(shù)據(jù)包至任務(wù)數(shù)據(jù)包,心跳時間更新為06:00:50。

進(jìn)一步地,轉(zhuǎn)碼模塊從任務(wù)池中獲取任務(wù)數(shù)據(jù)包;該任務(wù)數(shù)據(jù)包的狀態(tài)信息為待轉(zhuǎn)碼,或狀態(tài)信息為運行中且心跳時間距離當(dāng)前時間超過預(yù)定時間。例如,預(yù)定時間是3分鐘,當(dāng)前時間為06:05:00,而某一任務(wù)數(shù)據(jù)包的心跳時間為06:01:20;此時心跳時間距離當(dāng)前時間超過三分鐘,故轉(zhuǎn)碼模塊從任務(wù)池中獲取該任務(wù)數(shù)據(jù)包。

進(jìn)一步地,守護(hù)線程還用于檢測工作池中的容量,如果工作池中的容量有盈余,守護(hù)線程會從數(shù)據(jù)庫中再次獲取任務(wù)數(shù)據(jù)包,在工作池中創(chuàng)建另一個轉(zhuǎn)碼進(jìn)程。例如,每個工作池的容量為可以創(chuàng)建10個轉(zhuǎn)碼進(jìn)程,而此時工作池中有7個轉(zhuǎn)碼進(jìn)程,則守護(hù)線程可以再次從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,再次創(chuàng)建轉(zhuǎn)碼進(jìn)程。

步驟102、轉(zhuǎn)碼模塊對源文件進(jìn)行轉(zhuǎn)碼,將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中。

具體的,轉(zhuǎn)碼單元根據(jù)任務(wù)數(shù)據(jù)包中的轉(zhuǎn)碼需求對源文件進(jìn)行轉(zhuǎn)碼;例如,任務(wù)需求是將源文件轉(zhuǎn)碼成格式為高清的rmvb格式的文件,或者格式為超清的mp4格式的文件。

進(jìn)一步地,轉(zhuǎn)碼單元還將源文件存儲至轉(zhuǎn)碼模塊所在的轉(zhuǎn)碼機器的緩存目錄中;將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)的轉(zhuǎn)碼文件模塊中。

進(jìn)一步地,守護(hù)線程在轉(zhuǎn)碼單元轉(zhuǎn)碼成功后,發(fā)送轉(zhuǎn)碼成功信號至任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中,更新該任務(wù)數(shù)據(jù)包的狀態(tài)信息為完成。

進(jìn)一步地,轉(zhuǎn)碼模塊還用于將轉(zhuǎn)碼失敗后發(fā)送轉(zhuǎn)碼失敗信號至任務(wù)池中對應(yīng)的任務(wù)數(shù)據(jù)包中,更新該任務(wù)數(shù)據(jù)包的狀態(tài)信息為失敗。

以下將對各個模塊進(jìn)行詳細(xì)的解釋:

共享文件系統(tǒng)(Sharing File System),該系統(tǒng)提供接口,傳輸組件和所有轉(zhuǎn)碼模塊都依賴該接口來存取文件。在本實施例中,共享文件系統(tǒng)使用的是亦云公司提供的XNODE共享文件存儲系統(tǒng)。

數(shù)據(jù)庫(Data Base),用于存儲任務(wù)數(shù)據(jù)包,該系統(tǒng)提供接口,傳輸組件和所有轉(zhuǎn)碼模塊都依賴該系統(tǒng)的接口來保存和查詢相關(guān)的任務(wù)數(shù)據(jù)包。在本實施例中,數(shù)據(jù)庫使用的是開源的MySQL服務(wù)。

傳輸組件(Transcode Request Server),這個組件是接收轉(zhuǎn)碼請求的組件,該組件的主要職責(zé)是將需要轉(zhuǎn)碼的源文件寫入到共享目錄當(dāng)中,同時在數(shù)據(jù)庫中創(chuàng)建一條任務(wù)數(shù)據(jù)包,并將狀態(tài)信息設(shè)為“待轉(zhuǎn)碼”,由于工作內(nèi)容簡單,在實際的應(yīng)用過程當(dāng)中,這部分的邏輯甚至不需要有一個單獨的進(jìn)程處理。在本實施例中,該組件集成到了處理客戶請求的WebApp Server當(dāng)中。

轉(zhuǎn)碼模塊(Transcode Worker),是轉(zhuǎn)碼工作實際執(zhí)行的組件,轉(zhuǎn)碼模塊的設(shè)計為無狀態(tài)組件,可以隨意伸縮,這個取決于當(dāng)前數(shù)據(jù)庫中的任務(wù)隊列數(shù)量和組件的空轉(zhuǎn)情況。

任務(wù)池(Task Pool),存在于數(shù)據(jù)庫中的一個工作表,任務(wù)池包括多個任務(wù)數(shù)據(jù)包,記錄了需要轉(zhuǎn)碼的任務(wù)數(shù)據(jù)包,每個任務(wù)數(shù)據(jù)包括了任務(wù)ID、轉(zhuǎn)碼源文件路徑、狀態(tài)信息(初始為“待轉(zhuǎn)碼”)、任務(wù)心跳、轉(zhuǎn)碼目標(biāo)文件路徑、轉(zhuǎn)碼工作機等信息。其中,任務(wù)心跳包要求當(dāng)前的轉(zhuǎn)碼工作機定時更新(通常為30s),如果任務(wù)心跳包最后更新的時間距離當(dāng)前時間超過3分鐘,則該任務(wù)數(shù)據(jù)包異常,該任務(wù)會被其他轉(zhuǎn)碼模塊獲取,并從新開始轉(zhuǎn)碼。

源文件模塊(Origin File),設(shè)于共享文件系統(tǒng)中,用于存放需要轉(zhuǎn)碼的源文件目錄。

任務(wù)心跳包(Transcoded File),設(shè)于共享文件系統(tǒng)中,用于存放轉(zhuǎn)碼完成的目標(biāo)文件目錄。

守護(hù)線程(Daemon Thread),該線程會定時掃描數(shù)據(jù)庫中任務(wù)池里的任務(wù)數(shù)據(jù)包,并把該任務(wù)放入本機的工作池當(dāng)中。

工作池(Working Pool),用于存放正在工作的轉(zhuǎn)碼任務(wù),每個轉(zhuǎn)碼模塊的工作池的大小會依據(jù)當(dāng)前轉(zhuǎn)碼機器的空閑CPU核數(shù)來確定。一個雙核CPU機器完全用來轉(zhuǎn)碼的話,那么工作池就是2,表示當(dāng)前的工作節(jié)點能同時進(jìn)行2個轉(zhuǎn)碼任務(wù)。

Task Thread:進(jìn)行轉(zhuǎn)碼工作的線程,包含2個子模塊,一個是轉(zhuǎn)碼模塊,核心的業(yè)務(wù)模塊,用來將一種視頻格式轉(zhuǎn)碼為另一種視頻格式。另一個模塊是Heartbeat(心跳)模塊,只要工作進(jìn)程正常運行,心跳線程就會不斷的更新數(shù)據(jù)庫中該條任務(wù)的心跳時間。

分布式轉(zhuǎn)碼裝置,如圖3所示,應(yīng)用于分布式轉(zhuǎn)碼系統(tǒng),包括:

第一存儲模塊,應(yīng)用于共享文件系統(tǒng),用于接收源文件并存儲;第二存儲模塊,應(yīng)用于數(shù)據(jù)庫,用于接收任務(wù)數(shù)據(jù)包并存儲;

創(chuàng)建模塊,應(yīng)用于轉(zhuǎn)碼模塊的守護(hù)線程,用于從數(shù)據(jù)庫中獲取任務(wù)數(shù)據(jù)包,并在轉(zhuǎn)碼模塊的工作池中創(chuàng)建一個轉(zhuǎn)碼進(jìn)程;

獲取模塊,應(yīng)用于工作池,用于根據(jù)任務(wù)數(shù)據(jù)包中的轉(zhuǎn)碼源文件路徑從共享文件夾系統(tǒng)中獲取對應(yīng)的源文件;

運行模塊,應(yīng)用于工作池,對源文件進(jìn)行轉(zhuǎn)碼,將轉(zhuǎn)碼成功的轉(zhuǎn)碼文件存儲至共享文件系統(tǒng)中。

對本領(lǐng)域的技術(shù)人員來說,可根據(jù)以上描述的技術(shù)方案以及構(gòu)思,做出其它各種相應(yīng)的改變以及形變,而所有的這些改變以及形變都應(yīng)該屬于本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
环江| 华蓥市| 长泰县| 吉林市| 黔江区| 翼城县| 洛宁县| 保山市| 新巴尔虎左旗| 长子县| 沭阳县| 灵寿县| 中山市| 诸暨市| 清徐县| 治县。| 荔波县| 大姚县| 永昌县| 阜新| 左权县| 石嘴山市| 九龙城区| 精河县| 宁强县| 靖西县| 乐业县| 榆社县| 通山县| 会昌县| 二连浩特市| 柘荣县| 阜平县| 陕西省| 新建县| 通化县| 浪卡子县| 佛坪县| 胶南市| 中阳县| 宝丰县|