本發(fā)明涉及一種快速拼接轉碼分片文件的方法,屬于計算機技術領域。
背景技術:
隨著傳統(tǒng)廣電行業(yè)對視頻清晰度的要求越來越高,從最早的標清時代25mbps的碼流到目前的高清時代的100mbps的碼流,再到未來的4k時代,未來4k時代的一個小時的節(jié)目素材文件長度將達到180gb大小。傳統(tǒng)的轉碼方案是將分片轉碼文件依次追加寫到最終轉碼文件中,追加寫方案對每個分片轉碼文件都有讀操作,同時對最終轉碼文件有寫操作,追加寫方案既耗費網(wǎng)絡資源,同時也消耗轉碼節(jié)點系統(tǒng)資源;傳統(tǒng)的轉碼方案只能做到1.5到2倍速,遠遠不能滿足由于視頻數(shù)據(jù)膨脹所帶來的轉碼需求。
隨著視頻源越來越清晰,電視節(jié)目種類越來越多,使得廣電行業(yè)資源系統(tǒng)數(shù)據(jù)量達到pb級別,導致存儲需求量暴增;同時電視臺業(yè)務系統(tǒng)種類繁多,業(yè)務系統(tǒng)對存儲的需求不一,不得不采用多套存儲系統(tǒng),但是多套存儲系統(tǒng)之間容易造成信息孤島,同時建設和維護成本高,并且不利統(tǒng)一管理。
技術實現(xiàn)要素:
為了克服現(xiàn)有技術的不足,本發(fā)明提供一種快速拼接轉碼分片文件的方法。
一種快速拼接轉碼分片文件的方法,含有以下步驟;
將視頻源文件寫入到分布式存儲,分布式存儲系統(tǒng)為轉碼服務提供統(tǒng)一名字空間,多個轉碼服務器并行的從分布式存儲中讀取視頻源文件,按照分片的時間段區(qū)間獲取對應視頻源文件時間段的數(shù)據(jù);
通過轉碼調度器為轉碼節(jié)點分配分片數(shù)據(jù)段的索引編號,轉碼節(jié)點從分布式存儲上讀取對應索引編號的時間片數(shù)據(jù),將分片數(shù)據(jù)進行轉碼;
將轉碼數(shù)據(jù)寫入分布式存儲,生成分片轉碼文件,分布式存儲系統(tǒng)為分片轉碼文件提供統(tǒng)一名字空間;
在存儲管理節(jié)點調用分布式存儲提供的接口生成聚合文件;
當分片轉碼文件滿足聚合要求,將分片轉碼文件在存儲系統(tǒng)的唯一編號、分片轉碼文件長度、分片轉碼文件在聚合文件的偏移追加到聚合文件的屬性信息中;
刪除分片轉碼文件在存儲系統(tǒng)中的名字空間,使得分片轉碼文件對外不可見;
保留分片轉碼文件的屬性信息和數(shù)據(jù)信息。
分布式存儲系統(tǒng)為視頻源文件提供統(tǒng)一名字空間,轉碼節(jié)點可以并行讀取視頻源文件;
視頻源文件在被轉碼之前,文件長度已經(jīng)固定,并且錄制的視頻文件是按照恒定碼流錄制,所以文件的長度區(qū)間也是對應的時間區(qū)間;
轉碼服務需要和存儲訪問節(jié)點配置到一個節(jié)點上,存儲訪問節(jié)點為轉碼服務提供統(tǒng)一名字空間;
轉碼調度器負責將視頻文件分片,對分片區(qū)間分配區(qū)間索引;然后根據(jù)轉碼服務的空閑狀態(tài),依次給轉碼服務分配待轉碼的區(qū)間索引,直到轉碼服務負載飽和;
轉碼服務通過分布式存儲提供的讀操作接口,讀取視頻源索引區(qū)間數(shù)據(jù)到內存中,然后進行轉碼,轉碼完成之后將內存中的數(shù)據(jù)寫入到分布式存儲中,生成分片轉碼文件,分片轉碼文件命名按照區(qū)間索引編號生成文件名稱;
分布式存儲系統(tǒng)為訪問分片轉碼文件提供統(tǒng)一名字空間。
將所有文件索引信息按照分片索引順序依次追加到聚合文件屬性的聚合信息中;
聚合文件關聯(lián)分片轉碼文件的過程不是傳統(tǒng)的分片文件數(shù)據(jù)內容拷貝,而是聚合文件中聚合信息和聚合索引的追加,索引追加的順序與文件的分片順序保持一致;
每個索引項對應的索引信息包括:分片文件在分布式存儲系統(tǒng)的唯一編號、分片文件的長度、分片文件在聚合文件中偏移;
聚合文件只提供讀權限,沒有寫權限;
讀聚合文件數(shù)據(jù)通過分布式存儲系統(tǒng)提供的接口轉換為讀取分片文件的數(shù)據(jù)。
在存儲管理節(jié)點調用分布式存儲提供的接口生成聚合文件的步驟包括:調用分布式存儲接口創(chuàng)建聚合文件,然后對分片轉碼文件進行預檢測,檢測通過才會繼續(xù)聚合流程,預檢測步驟包括:
判斷聚合文件中的聚合信息索引項是否超過規(guī)格,如果超過規(guī)格轉碼失敗,目前提供的規(guī)格是一個聚合文件中支持的分片轉碼文件上限是10000個,規(guī)格上限可以根據(jù)需求調整;
對分片轉碼文件加鎖,加鎖的目的是防止聚合的過程中其他進程對分片轉碼文件進行修改操作或者聚合操作,多進程同時修改分片轉碼文件會導致聚合文件中記錄的分片文件的長度與分片文件屬性記錄的長度不一致,多進程同時聚合分片轉碼文件會導致同一個分片轉碼文件被聚合到多個聚合文件中,重復加鎖分片轉碼文件會失敗,如果加鎖失敗,聚合操作失??;
判斷分片轉碼文件是否是空文件,如果是空文件,聚合操作失敗,分片轉碼文件解鎖;
判斷分片轉碼文件是否是普通文件,如果不是普通文件,聚合操作失敗,分片轉碼文件解鎖;
判斷分片轉碼文件是否有數(shù)據(jù)正在寫入,如果有數(shù)據(jù)正在寫入分片轉碼文件,聚合操作失敗,分片轉碼文件解鎖。
聚合分片轉碼文件的步驟包括:
獲取聚合文件屬性中的聚合信息索引項,索引項對應的索引信息有:分片轉碼文件在分布式存儲系統(tǒng)的唯一編號、分片轉碼文件長度,分片轉碼文件在聚合文件中的偏移,初始索引項為零;
如果是第一個分片轉碼文件,索引項加一,第一個索引項對應的索引信息:分片轉碼文件的唯一編號,分片轉碼文件的長度、分片轉碼文件在聚合文件的偏移為零;
如果被聚合的分片文件不是第一個分片轉碼文件,索引項加一,該文件索引項對應的索引信息:分片轉碼文件的唯一編號,分片轉碼文件的長度、分片轉碼文件在聚合文件的偏移為上一個轉碼分片文件長度和上一個轉碼分片文件在聚合文件中偏移的和;
刪除分片轉碼文件在分布式存儲中名字空間,保留分片轉碼文件屬性信息和數(shù)據(jù)信息,在分布式存儲系統(tǒng)中,讓分片轉碼文件對外不可見;
分片轉碼文件解鎖,聚合操作完成。
以上聚合操作流程都是單個分片轉碼文件的聚合流程的說明,多個分片轉碼文件的聚合流程是以上聚合流程的重復。
本發(fā)明的優(yōu)點是通過將分片轉碼文件的長度、文件編號、在聚合文件的偏移信息,記錄在聚合文件的聚合信息屬性的索引項中,完全摒棄了傳統(tǒng)的追加寫入的方式,將耗時的數(shù)據(jù)讀寫操作變?yōu)閷傩孕畔⒌脑黾?,提高了分片轉碼文件合并的效率,節(jié)省了寶貴的網(wǎng)絡帶寬資源。
本發(fā)明也可以應用在廣電行業(yè)的打包應用中,打包應用中的故事板可以類比成轉碼應用中的視頻源,故事板的分片是按照指定的切分點進行分片,然后打包節(jié)點對分片的故事板通過編輯轉成分片視頻寫入到分布式存儲,通過存儲提供的聚合接口將分片視頻聚合起來可以實現(xiàn)極速打包,該打包方式不涉及視頻數(shù)據(jù)的讀寫拷貝,極速打包的打包效率是傳統(tǒng)打包方式無法比擬的。
本發(fā)明能夠為視頻資源存儲空間提供橫向擴展能力,可以滿足視頻資源數(shù)據(jù)量快速增長的需求;本發(fā)明能提供統(tǒng)一名字空間,從而打通了各個視頻系統(tǒng)之間的信息孤島,便于資源管理,降低存儲系統(tǒng)維護成本;本發(fā)明提供了快速拼接分片轉碼文件的功能,摒棄了傳統(tǒng)的追加寫的方式,而是使用極速的聚合信息索引項追加的方式,不僅節(jié)省寶貴的網(wǎng)絡帶寬資源,并且也提高了拼接分片轉碼文件效率,本發(fā)明能夠將轉碼效率提高到20到30倍速。
附圖說明
當結合附圖考慮時,通過參照下面的詳細描述,能夠更完整更好地理解本發(fā)明以及容易得知其中許多伴隨的優(yōu)點,但此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本發(fā)明的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定,如圖其中:
圖1為本發(fā)明的一種快速拼接分片轉碼文件的處理流程圖;
圖2為本發(fā)明的一種讀取聚合文件內容的流程圖;
圖3為本發(fā)明的一種獲取聚合文件屬性的流程圖;
圖4為本發(fā)明的一種刪除聚合文件的示意圖;
下面結合附圖和實施例對本發(fā)明進一步說明。
具體實施方式
顯然,本領域技術人員基于本發(fā)明的宗旨所做的許多修改和變化屬于本發(fā)明的保護范圍。
本技術領域技術人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復數(shù)形式。應該進一步理解的是,本說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應該理解,當稱元件、組件被“連接”到另一元件、組件時,它可以直接連接到其他元件或者組件,或者也可以存在中間元件或者組件。這里使用的措辭“和/或”包括一個或更多個相關聯(lián)的列出項的任一單元和全部組合。
本技術領域技術人員可以理解,除非另外定義,這里使用的所有術語(包括技術術語和科學術語)具有與本發(fā)明所屬領域中的普通技術人員的一般理解相同的意義。
為便于對本發(fā)明實施例的理解,下面將做進一步的解釋說明,且各個實施例并不構成對本發(fā)明實施例的限定。
實施例1:如圖1所示,一種快速拼接轉碼分片文件的方法,包括:
調用分布式存儲系統(tǒng)的創(chuàng)建聚合文件接口,創(chuàng)建聚合文件;
從分布式存儲系統(tǒng)獲取分片轉碼文件;
調用分布式存儲系統(tǒng)接口,對分片轉碼文件加鎖;
當分片轉碼文件加鎖失敗,聚合操作失?。?/p>
判斷分片轉文件是否滿足轉碼條件;
當分片轉碼文件不滿足條件,聚合操作失??;
當分片轉碼文件滿足條件,將聚合文件的聚合信息索引項加一,新增的聚合索引項對應的索引信息為分片轉碼文件長度、分片轉碼文件唯一編號、分片轉碼文件在聚合文件的偏移;
刪除分片轉碼文件的名字空間,保留分片轉碼文件的屬性信息和數(shù)據(jù)信息;
對分片轉碼文件解鎖,文件聚合操作結束。
聚合文件的刪除不同于普通文件的刪除,刪除聚合文件時,需要遍歷聚合文件中所有的分片轉碼文件,依次刪除分片轉碼文件的屬性信息和數(shù)據(jù)信息。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明確,或通過本發(fā)明的實踐了解到。
實施例2:如圖1所示,一種快速拼接轉碼分片文件的方法,包括:
步驟11,將視頻源生成的視頻文件寫入到分布式存儲系統(tǒng)中,分布式存儲為視頻源文件提供統(tǒng)一名字空間,多個轉碼節(jié)點可以并發(fā)讀取視頻源的數(shù)據(jù);
步驟12,通過轉碼調度器為轉碼節(jié)點分配分片視頻源數(shù)據(jù)段索引,轉碼節(jié)點從存儲系統(tǒng)上讀取對應索引的時間片數(shù)據(jù)。
其中,步驟12包括:
步驟121,通過轉碼調度器將視頻源按照時間平均分片,并且對分片轉碼文件順序分配索引編號;
步驟122,轉碼調度器給空閑的轉碼節(jié)點發(fā)送需要被轉碼的分片索引;
步驟13,轉碼節(jié)點根據(jù)收到的索引,讀取索引在視頻源文件對應的分片區(qū)間數(shù)據(jù),然后對分片數(shù)據(jù)進行轉碼,將轉碼之后的數(shù)據(jù)寫入到分布式存儲系統(tǒng)生成分片轉碼文件,每個分片數(shù)據(jù)轉碼后對應一個分片轉碼文件,直到所有的分片數(shù)據(jù)轉碼完成;
步驟14,在存儲系統(tǒng)的管理節(jié)點,調用存儲系統(tǒng)提供的接口創(chuàng)建聚合文件,依次將分片轉碼文件聚合到創(chuàng)建的聚合文件中;
步驟15,調用存儲接口將分片轉碼文件加鎖,如果分片轉碼文件加鎖失敗,聚合操作失敗,聚合結束;
步驟16,檢查分片轉碼文件是否滿足聚合操作要求。
其中,步驟16包括:
步驟161,檢查被加鎖的分片轉碼文件長度是否為零,如果為零,聚合操作失敗,聚合結束;
步驟162,分片轉碼文件是否是普通文件,如果不是普通文件,聚合操作失敗,聚合結束;
步驟163,分片轉碼文件是否正在被寫入,如果正在被寫入,聚合操作失敗,聚合結束;
步驟17,聚合文件的聚合信息索引項加一,將分片轉碼文件的長度、分片轉碼文件編號、分片轉碼文件在聚合文件中的偏移記錄到索引項目對應索引信息中。
步驟18,將分片轉碼文件的名稱,從分布式存儲的名字空間中刪除,保留分片轉碼文件的屬性信息和數(shù)據(jù)塊信息;
步驟19,聚合操作成功,聚合結束;
步驟110,如果分片轉碼文件加鎖失敗,聚合操作失敗,聚合結束;或者不滿足聚合操作條件,分片轉碼文件解鎖,聚合操作失敗,聚合結束。
上述實施例中,描述的聚合流程是單個分片轉碼文件的聚合操作,多個分片轉碼文件的聚合流程是上述聚合流程的重復。上述實施例中,通過對聚合文件的聚合屬性信息的增加,將分片轉碼文件關聯(lián)到聚合文件中,完全沒有涉及到分片轉碼文件數(shù)據(jù)內容的拷貝,為生成聚合轉碼文件提供了新的思路,對聚合索引信息的增加和修改生成聚合文件的效率是傳統(tǒng)的轉碼方式無法比擬的。
實施例3:如圖2所示,讀取聚合文件數(shù)據(jù)內容的方法,其中聚合文件中的分片轉碼文件在存儲客戶端系統(tǒng)中被統(tǒng)一被描述成小文件,讀流程包括:
步驟22,查詢存儲客戶端記錄的聚合文件的聚合長度,聚合長度是所有小文件長度的和。
其中,步驟22包括:
步驟221,如果聚合文件的長度小于文件的讀偏移和讀大小之和,發(fā)送消息到元數(shù)據(jù)獲取聚合文件的聚合信息,聚合信息包括所有小文件的長度、小文件的編號、小文件在聚合文件的偏移;
步驟222,將聚合信息記錄到客戶端聚合文件信息緩存中,便于后續(xù)的讀操作從緩存中獲取聚合信息;
步驟23,如果讀操作偏移大于或者等于聚合文件長度,讀操作結束,返回讀取內容為空;
步驟24,如果讀取的偏移加讀取長度大于文件長度,修改讀取長度為聚合文件長度減去讀取的偏移;
步驟25,獲取讀取長度區(qū)間內的小文件索引信息,由于索引的順序是小文件在聚合文件偏移從小到大依次排序,可以順序遍歷小文件的索引編號獲取索引信息。
其中,步驟25包括:
步驟251,根據(jù)讀取的開始位置,從第一個索引開始依次遍歷聚合小文件的信息,如果讀取的開始位置落在小文件在聚合文件的偏移到小文件長度的閉區(qū)間中,記錄讀取的第一個小文件對應的索引為開始索引,退出開始索引的查找;
步驟252,如果沒有滿足條件的索引信息,系統(tǒng)告警,讀操作結束;
步驟253,根據(jù)讀取操作結束的位置,即讀取聚合文件的偏移加上讀取的長度,從最開始索引開始向后遍歷聚合小文件的信息,如果讀取的開始位置落在小文件在聚合文件的偏移到小文件長度的閉區(qū)間中,記錄讀取的末尾小文件對應的索引,退出末尾索引的查找;
步驟254,如果沒有滿足條件的索引信息,系統(tǒng)告警,讀取操作結束;
步驟255,讀取的大小比所有的小文件的長度之和小,系統(tǒng)告警,讀取操作結束;
步驟26,根據(jù)讀取聚合文件的區(qū)間大小和小文件的索引信息,構造讀取小文件的偏移、讀取的長度、存放讀內容的數(shù)據(jù)塊。
其中,步驟26包括:
步驟261,獲取小文件的讀操作的偏移:小文件在聚合文件的偏移減去讀操作的偏移為讀小文件的偏移;
步驟262,獲取讀小文件的長度。
步驟2621,獲取小文件的可讀長度:小文件長度減去小文件的讀取偏移,
步驟2622,如果讀取聚合文件的長度小于或者等于小文件的可讀長度,小文件的讀長度為讀聚合文件的長度,構造流程結束;
步驟2623,如果讀聚合文件的長度大于小文件的可讀長度,小文件的讀長度為小文件的可讀長度;
步驟2624,修改讀聚合文件的偏移為讀聚合文件的偏移加上小文件的可讀長度;
步驟2625,修改讀聚合文件的長度為讀聚合文件的長度減去小文件的可讀長讀。
步驟263,繼續(xù)按照流程261,262獲取后續(xù)小文件的讀的偏移和長度。
步驟27,根據(jù)構造好的小文件讀的偏移和長度,并發(fā)的對小文件發(fā)送讀請求;
步驟28,等待全部小文件的讀請求返回,讀聚合文件流程結束。
上述實施例中,為獲取聚合文件的內容提供的讀的方法,將讀聚合文件的操作分拆為讀每個小文件的操作,然后并發(fā)的發(fā)送給每個小文件,從而提高了讀聚合文件的效率。
實施例4:如圖3所示,獲取聚合文件屬性信息的方法,包括:
步驟32,發(fā)送獲取屬性請求到元數(shù)據(jù),獲取聚合文件的文件屬性,
步驟33,聚合文件的結構信息中存在一個聚合長度,聚合長度是所有小文件的長度和,比較聚合長度和聚合文件的屬性中記錄的文件長度,;
步驟34,如果聚合長度比屬性中記錄的文件長度小,發(fā)送讀取聚合文件索引信息請求到元數(shù)據(jù),獲取聚合文件索引信息;
步驟35,將索引信息更新到聚合文件紀錄的小文件緩存中。
其中,步驟35包括:
步驟351,獲取小文件的索引信息,然后通過小文件的編號在小文件緩存中查詢該小文件的信息;
步驟352,如果查詢不到,在存儲客戶端生成小文件的inode結構信息,插入到聚合文件的小文件緩存中,同時更新聚合長度為當前聚合長度加上小文件長度。將小文件的inode結構信息和聚合文件關聯(lián)起來,便于聚合文件讀操作去遍歷小文件信息;
步驟353,如果能夠查詢到,繼續(xù)查詢下一個小文件,重復步驟352。
步驟37,判斷聚合文件的長度是否等于文件屬性長度;
步驟38,如果不相等,存儲系統(tǒng)告警,聚合文件長度和小文件長度之和存在沖突。
實施例5:如圖4所示,刪除聚合的方法,包括:
步驟42,從存儲客戶端發(fā)送刪除文件的請求到元數(shù)據(jù);
步驟43,元數(shù)據(jù)刪除聚合文件。
其中,步驟43包括:
步驟431,元數(shù)據(jù)判斷被刪除的文件是否是聚合文件;
步驟432,如果是聚合文件,刪除聚合文件的名字空間和屬性信息。
步驟44,給客戶端發(fā)送刪除成功回應,客戶端將刪除結果返回給應用;
步驟45,同時元數(shù)據(jù)開始并發(fā)刪除小文件的屬性信息和數(shù)據(jù)信息。
本領域普通技術人員可以理解:附圖只是一個實施例的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。
通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置或系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置及系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
如上所述,對本發(fā)明的實施例進行了詳細地說明,但是只要實質上沒有脫離本發(fā)明的發(fā)明點及效果可以有很多的變形,這對本領域的技術人員來說是顯而易見的。因此,這樣的變形例也全部包含在本發(fā)明的保護范圍之內。