吳旻倩 秦川
摘要:隨著高清視頻的普及和發(fā)展,視頻服務(wù)提供商面臨著高清晰度視頻轉(zhuǎn)碼的需求日益增加。視頻轉(zhuǎn)碼既是計(jì)算密集型工作又是數(shù)據(jù)密集型工作,需要大量消耗計(jì)算機(jī)資源,但是最終會(huì)因?yàn)閱斡?jì)算節(jié)點(diǎn)的物理?xiàng)l件和轉(zhuǎn)碼算法的并發(fā)能力受到限制,造成轉(zhuǎn)碼速度提升不大。該文依托云計(jì)算平臺(tái)將單個(gè)轉(zhuǎn)碼任務(wù)同時(shí)發(fā)送到多個(gè)計(jì)算節(jié)點(diǎn),以提高視頻轉(zhuǎn)碼的速度。
關(guān)鍵詞:云計(jì)算;Hadoop;視頻轉(zhuǎn)碼
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)25-5979-02
隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)為我們提供各種服務(wù)。其中視頻提供服務(wù)就是一種典型的網(wǎng)絡(luò)服務(wù),市場(chǎng)規(guī)模日益擴(kuò)大,發(fā)展?jié)摿O大。通常在用戶(hù)的播放終端不同的情況下,又要讓用戶(hù)能正常觀看視頻。要達(dá)到這樣的效果就要掌握視頻轉(zhuǎn)換的關(guān)鍵技術(shù)-視頻轉(zhuǎn)碼,視頻轉(zhuǎn)碼要在終端數(shù)據(jù)處理能力不同、終端數(shù)據(jù)顯示功能不同、終端網(wǎng)絡(luò)帶寬不同、終端數(shù)據(jù)包丟失率不同等情況下進(jìn)行轉(zhuǎn)換。從視頻轉(zhuǎn)碼軟件的發(fā)展歷程來(lái)看,早期視頻轉(zhuǎn)碼簡(jiǎn)單依靠單個(gè)CPU的通用計(jì)算能力來(lái)實(shí)現(xiàn),而今發(fā)展到利用CPU的多功能指令集。從早期的VCD(碼率1.5Mbps),到有限的標(biāo)清DVD(碼率4.5Mbps),再到波長(zhǎng)更短的高清藍(lán)光(碼率25Mbps),復(fù)雜的轉(zhuǎn)碼技術(shù)接踵而來(lái)。視頻轉(zhuǎn)碼的并行化已儼然成為了一種潮流,它是伴隨多核計(jì)算機(jī)的普及、并行計(jì)算思想的發(fā)展相呼應(yīng)的必然結(jié)果。使用多線程技術(shù),使多核CPU在視頻轉(zhuǎn)碼工作中充分發(fā)揮并行處理性能,實(shí)現(xiàn)像組級(jí)、幀級(jí)、片級(jí)或模塊級(jí)的并行策略,但這種策略仍然受到轉(zhuǎn)碼算法和CPU數(shù)量或本身并發(fā)能力的限制,使并發(fā)率上升空間有限。
Hadoop是并行編程系統(tǒng),適合于處理大規(guī)模數(shù)據(jù),可根據(jù)輸入的數(shù)據(jù)分布信息,自動(dòng)創(chuàng)建并行子任務(wù)形成一個(gè)集合,使子任務(wù)在合適的集群節(jié)點(diǎn)上并行執(zhí)行的一個(gè)開(kāi)源云計(jì)算框架。Hadoop系統(tǒng)的核心模塊就是MapReduce,該模塊極大地方便了程序員在不會(huì)分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。程序員要做的僅僅是按照MapReduce編程規(guī)范定義好map(映射)函數(shù)、reduce(規(guī)約)函數(shù),而不需要關(guān)心節(jié)點(diǎn)和任務(wù)的失效及任務(wù)之間的數(shù)據(jù)等問(wèn)題,就能完成分布式數(shù)據(jù)處理問(wèn)題。在本文中通過(guò)基于云計(jì)算平臺(tái)的MapReduce開(kāi)發(fā)框架,將轉(zhuǎn)碼任務(wù)并發(fā)到多個(gè)計(jì)算節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)在同一時(shí)間對(duì)同一個(gè)視頻文件的不同部分各自進(jìn)行轉(zhuǎn)碼,系統(tǒng)再將分段轉(zhuǎn)碼結(jié)束后的視頻文件整合成單個(gè)視頻,即完成單個(gè)轉(zhuǎn)碼任務(wù)。
1 基于云計(jì)算平臺(tái)的視頻轉(zhuǎn)碼系統(tǒng)
1.1 系統(tǒng)設(shè)計(jì)原理
本系統(tǒng)設(shè)計(jì)是本著以提升轉(zhuǎn)碼任務(wù)的速度為原則,因?yàn)閱蝹€(gè)計(jì)算節(jié)點(diǎn)的物理?xiàng)l件和轉(zhuǎn)碼算法不會(huì)影響并發(fā)能力,使得轉(zhuǎn)碼任務(wù)的速度具備較大的提升空間?;贖adoop云計(jì)算平臺(tái)的視頻轉(zhuǎn)碼系統(tǒng)可以滿足大批量、多用戶(hù)視頻轉(zhuǎn)碼對(duì)資源的需求。本系統(tǒng)使用音視頻轉(zhuǎn)換軟件來(lái)實(shí)現(xiàn)視頻轉(zhuǎn)碼,將轉(zhuǎn)碼功能用MapReduce中map函數(shù)封裝起來(lái)。當(dāng)集群出現(xiàn)大量視頻轉(zhuǎn)碼任務(wù)時(shí),系統(tǒng)會(huì)利用集群計(jì)算能力和視頻轉(zhuǎn)碼軟件在集群節(jié)點(diǎn)上自動(dòng)隨機(jī)分配任務(wù),實(shí)現(xiàn)多視頻同時(shí)在線轉(zhuǎn)碼。碼率轉(zhuǎn)換、空間分辨率轉(zhuǎn)換、時(shí)間分辨率轉(zhuǎn)換、語(yǔ)法轉(zhuǎn)換、容錯(cuò)視頻轉(zhuǎn)碼等的工作全交給已有的轉(zhuǎn)碼軟件來(lái)實(shí)現(xiàn)。
在本系統(tǒng)設(shè)計(jì)中,使用Java腳本提供的Runtime類(lèi)函數(shù)調(diào)用轉(zhuǎn)碼功能代碼。此方法的優(yōu)點(diǎn)是:只要打包后最終的結(jié)果是可執(zhí)行文件,無(wú)論視頻處理功能是由什么語(yǔ)言編譯的,都可以被MapReduce框架調(diào)用。Java虛擬機(jī)的運(yùn)行時(shí)環(huán)境可以通過(guò)Runtime類(lèi)函數(shù)獲取,Runtime類(lèi)函數(shù)調(diào)用可執(zhí)行文件只要一個(gè)取代調(diào)用進(jìn)程的內(nèi)容的函數(shù)Exec。Exec函數(shù)的參數(shù)是要被調(diào)用的可執(zhí)行文件的命令行,該命令行的值取決于視頻處理功能的具體實(shí)現(xiàn)。
1.2 系統(tǒng)架構(gòu)實(shí)現(xiàn)
系統(tǒng)整體架構(gòu)采用Google提出的適用于大規(guī)模數(shù)據(jù)量的并行運(yùn)算軟件架構(gòu)“Map-Reduce”, 主要思想是使用一個(gè)映射(Map)函數(shù)使用他的拆分功能,將一個(gè)將一個(gè)大任務(wù)拆分成若干個(gè)獨(dú)立互不干擾的多個(gè)小任務(wù),同時(shí)將這些小任務(wù)映射到多個(gè)相應(yīng)節(jié)點(diǎn)的算法,或使用一個(gè)化簡(jiǎn)(Reduce)函數(shù)實(shí)現(xiàn)一個(gè)逆操作(多個(gè)相互獨(dú)立任務(wù)合并成一個(gè)任務(wù))。本系統(tǒng)是由存儲(chǔ)系統(tǒng)、任務(wù)調(diào)度、碼流預(yù)處理、碼流后處理、碼流分割、碼流合并、轉(zhuǎn)碼節(jié)點(diǎn)等部分組成。映射器承載了將大視頻碼流拆分成多個(gè)小段視頻碼流的過(guò)程,包括碼流預(yù)處理和碼流分割?;?jiǎn)器承載了將小段視頻碼流轉(zhuǎn)碼、合并和復(fù)用的過(guò)程,包括轉(zhuǎn)碼節(jié)點(diǎn)、碼流合并和碼流后處理。
存儲(chǔ)用戶(hù)提交的待轉(zhuǎn)碼視頻通過(guò)視頻接收接口到達(dá)存儲(chǔ)系統(tǒng),用戶(hù)可通過(guò)視頻接收接口獲取轉(zhuǎn)碼系統(tǒng)成功轉(zhuǎn)碼后的視頻和相關(guān)信息。轉(zhuǎn)碼系統(tǒng)的核心是任務(wù)調(diào)度,主要是管理系統(tǒng)內(nèi)的需要進(jìn)行計(jì)算的所有資源,如遇到新的轉(zhuǎn)碼任務(wù)到達(dá)時(shí)任務(wù)中心時(shí),本系統(tǒng)會(huì)自動(dòng)根據(jù)優(yōu)先級(jí)以及當(dāng)前系統(tǒng)的空閑資源進(jìn)行分配,然后分配適當(dāng)?shù)挠?jì)算資源按順序去完成碼流預(yù)處理、碼流分割、轉(zhuǎn)碼、碼流合并、碼流后處理等步驟。
碼流預(yù)處理對(duì)用戶(hù)提交的轉(zhuǎn)碼視頻分析、容器解析,流解復(fù)用進(jìn)行自定義轉(zhuǎn)碼需求,使視頻和音頻流分離。碼流分割任務(wù)調(diào)度模塊按照指示,指定的視頻流被劃分成段,分割時(shí)需要連續(xù)的流圖像避免跳幀或重幀現(xiàn)象。任務(wù)調(diào)度模塊的指令分配轉(zhuǎn)碼節(jié)點(diǎn),讀取分割后的視頻碼流段,根據(jù)用戶(hù)設(shè)置的轉(zhuǎn)碼參數(shù)完成轉(zhuǎn)碼過(guò)程。碼流后處理對(duì)轉(zhuǎn)碼合并后的視頻碼流以及轉(zhuǎn)碼后的音頻碼流按照用戶(hù)指定的文件格式進(jìn)行復(fù)用,生成成品文件。
1.3 視頻拆分算法
一系列連續(xù)的圖像組成Group Of Pictures(視頻碼流中的圖像組)。在 MPEG編碼中,圖片組即I幀和I幀之間的幀排列。每個(gè)圖像組至少有一個(gè)I幀,并且I幀處于圖像組的開(kāi)頭。I幀無(wú)需依賴(lài)其他幀可以獨(dú)立解碼,若干個(gè)連續(xù)的圖像組組成了一段視頻碼流。視頻分割的過(guò)程中圖像組級(jí)別粒子大小適中,相比單一幀的粒子而言,圖像組解碼的獨(dú)立性更好;相比完整視頻有更好的轉(zhuǎn)碼并發(fā)性。
所以,判斷碼流圖像組的結(jié)構(gòu)在視頻文件拆分的過(guò)程中得以體現(xiàn),需要視Open-Gop和Colse-Gop的不同情況分別采取不同的分割策略。例如要保證解碼器能夠解出這個(gè)視頻文件中的所有幀,Open-Gop就必須在每一段分割碼流片斷的前面增加一個(gè)圖像組的冗余。同時(shí)在進(jìn)行分割時(shí)還要將分割策略的選擇情況記錄下來(lái),供編制合并程序時(shí)參考使用。
在拆分后,如果拆分點(diǎn)后的第一個(gè)GOP是Open-Gop,需要多加一個(gè)GOP在后一段視頻前。相反,如果拆分點(diǎn)后的第一個(gè)GOP是Colse-Gop,就不可能會(huì)出現(xiàn)無(wú)法解碼視頻的情況,因?yàn)橐曨l通常被拆分點(diǎn)劃分成為兩段,拆分過(guò)程中還要注意解碼器一段視頻進(jìn)行每一次解碼時(shí),都要查找對(duì)應(yīng)視頻中的序列頭信息。視碼流的不同會(huì)出現(xiàn)每個(gè)GOP前都附帶有相同的序列頭,也可能僅僅只開(kāi)始處包含序列頭。這時(shí),如果出現(xiàn)前者狀態(tài),那么就在拆分時(shí)整體分割每個(gè)序列頭。如果出現(xiàn)后者狀態(tài),則序列頭添加在拆分之后的每一段子視頻前面。
2 視頻轉(zhuǎn)碼系統(tǒng)實(shí)驗(yàn)實(shí)施
為檢測(cè)本系統(tǒng)的效果,我們將總時(shí)長(zhǎng)為60小時(shí)的85個(gè)高清1080i測(cè)試視頻(碼率為50Mbps)進(jìn)行實(shí)驗(yàn)。當(dāng)系統(tǒng)架構(gòu)和核心算法在固定的情況下,如果將這批的視頻轉(zhuǎn)碼作為單獨(dú)的任務(wù),可以用“吞吐量”來(lái)考驗(yàn)衡量系統(tǒng)完成該任務(wù)的速度,任務(wù)處理時(shí)間越短表示系統(tǒng)和外部的吞吐量越大。同理,如果將每一個(gè)視頻的轉(zhuǎn)碼作為單獨(dú)的任務(wù),則系統(tǒng)的性能可以使用“超時(shí)率”來(lái)進(jìn)行評(píng)測(cè),其公式為:超時(shí)率=1-視頻時(shí)長(zhǎng)÷轉(zhuǎn)碼時(shí)長(zhǎng)。從這個(gè)公式可以看出如果想實(shí)時(shí)轉(zhuǎn)碼就是要使超時(shí)率為0,也就是說(shuō)用1個(gè)小時(shí)轉(zhuǎn)完1個(gè)小時(shí)的視頻。當(dāng)超時(shí)率為正表示超實(shí)時(shí)轉(zhuǎn)碼。該轉(zhuǎn)碼系統(tǒng)的性能能力的變化通過(guò)調(diào)節(jié)任務(wù)并發(fā)數(shù)量來(lái)控制,實(shí)驗(yàn)結(jié)果如表1所示。
從實(shí)驗(yàn)結(jié)果中,我們可以看到,隨著并發(fā)吞吐數(shù)量的增加,外部吞吐能能力略有下降,因?yàn)橐曨l文件拆分、合并等操作引發(fā)了額外的系統(tǒng)開(kāi)銷(xiāo),但單個(gè)文件轉(zhuǎn)碼速度已有顯著提高,由單個(gè)節(jié)點(diǎn)的速度嚴(yán)重滯后提升到4、5個(gè)節(jié)點(diǎn)并發(fā)實(shí)時(shí)速度。當(dāng)然,并行計(jì)算會(huì)帶來(lái)額外的開(kāi)銷(xiāo),從而導(dǎo)致上升成本,但它縮短了單個(gè)任務(wù)執(zhí)行時(shí)間,需要縮短單個(gè)轉(zhuǎn)碼任務(wù)執(zhí)行時(shí)間,采用計(jì)算機(jī)集群并行化是可行的首選方案。
3 結(jié)束語(yǔ)
在當(dāng)今日益豐富的視頻服務(wù)中,集中式視頻轉(zhuǎn)碼系統(tǒng)有著存儲(chǔ)容量和數(shù)據(jù)處理能力不足、不可以擴(kuò)展的缺點(diǎn)。該文提出了一種以云計(jì)算框架為基礎(chǔ)的視頻轉(zhuǎn)碼系統(tǒng),充分發(fā)揮計(jì)算機(jī)群集的并發(fā)能力。目前,該系統(tǒng)已應(yīng)用到電大系統(tǒng)教學(xué)視頻的生產(chǎn)發(fā)布上,在線視頻點(diǎn)播速度顯著提高。
參考文獻(xiàn):
[1] 曾帥,李樂(lè)民,廖丹.一種基于視頻轉(zhuǎn)碼與IP組播的媒體推送系統(tǒng)設(shè)計(jì)[J] .計(jì)算機(jī)應(yīng)用研究, 2013(2).
[2] 黃柑波. 基于開(kāi)放式云轉(zhuǎn)碼服務(wù)平臺(tái)的技術(shù)研究[J] .IT時(shí)代周刊,2013.
[3] 張宇,劉新,葉德建. 基于分布式流媒體計(jì)算框架的轉(zhuǎn)碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J] .計(jì)算機(jī)應(yīng)用與軟件,2013(7).
[4] 葉世其. 面向服務(wù)的云計(jì)算框架模型設(shè)計(jì)與實(shí)現(xiàn)[J] .中國(guó)新技術(shù)新產(chǎn)品, 2013(9).
[5] 潘小明,張向陽(yáng),沈錫鏞,嚴(yán)丹. 云計(jì)算信息安全測(cè)評(píng)框架研究[J] .計(jì)算機(jī)時(shí)代, 2013 (2).