本發(fā)明涉及音視頻處理領(lǐng)域,具體來說,涉及到一種面向流式音視頻數(shù)據(jù)的分布式處理方法及其裝置。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能的發(fā)展,音視頻處理在直播、娛樂、通信、安防等領(lǐng)域的需求越來越大。如何實(shí)現(xiàn)音視頻處理系統(tǒng)的高性能、高通量、高效能、易維護(hù)、易擴(kuò)展、易優(yōu)化,是該領(lǐng)域面臨的新挑戰(zhàn)。
傳統(tǒng)的音視頻處理方法一般只能支持一種或幾種音視頻數(shù)據(jù)的輸入(例如,本地文件、rtp、rstp、hls),然后對(duì)這些形式的音視頻數(shù)據(jù)直接進(jìn)行分布式編解碼處理。因此,傳統(tǒng)的處理方法存在著以下弊端:1.不易于通過擴(kuò)展支持多種輸入形式,編解碼模塊依賴于每路的上下文,不能獨(dú)立編解碼,編解碼速度慢,支持的路數(shù)少,物理機(jī)利用率低。2.物理機(jī)的數(shù)量和功能是在設(shè)計(jì)階段確定的,不能根據(jù)用戶流量的變化而變化,造成物理機(jī)資源利用率低或者不足。3.物理機(jī)在音視頻流量低負(fù)載時(shí)依然滿負(fù)荷運(yùn)轉(zhuǎn),存在著功耗大,負(fù)載不均衡等弊端。4.編解碼依賴于每路編解碼上下文,分布式的規(guī)模不易于做的很大,可擴(kuò)展性差,不能充分發(fā)揮分布式的優(yōu)勢(shì)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是解決上述海量音視頻流式數(shù)據(jù)處理時(shí)遇到的輸入形式不易擴(kuò)展、編解碼效率低、支持的路數(shù)少、功耗大、物理機(jī)數(shù)量不能隨著用戶流量變化而變化、負(fù)載不均衡等問題。
為了達(dá)到上述目的,本發(fā)明提出一種面向流式音視頻數(shù)據(jù)的分布式處理方法,包括以下步驟:
s1:將多臺(tái)物理機(jī)劃分為具有特定功能的不同類別,包括分布式資源管理功能、分布式數(shù)據(jù)內(nèi)存化功能、分布式封裝切片功能、分布式解碼功能和其它音視頻分布式處理功能,建立不同類別的物理機(jī)之間的映射關(guān)系;
s2:將來自所有傳輸通道的音視頻碼流提取出來存入內(nèi)存;
s3:將內(nèi)存中存儲(chǔ)的所述音視頻數(shù)碼流的片段直接封裝為能夠獨(dú)立編解碼的音視頻短片段;
s4:在不需要維護(hù)每路編解碼上下文的情況下,對(duì)所述音視頻短片段進(jìn)行編解碼;
s5:對(duì)解碼后的yuv數(shù)據(jù)或者經(jīng)過獨(dú)立編解碼的所述音視頻短片段進(jìn)行進(jìn)一步的音視頻處理。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,所述步驟s1中將多臺(tái)物理機(jī)劃分為具有特定功能的不同類別的過程為:
s12:判斷當(dāng)前物理機(jī)的功能屬性;
s13:根據(jù)物理的功能屬性執(zhí)行相應(yīng)的功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行資源管理功能的物理機(jī),那么執(zhí)行分布式資源管理功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行數(shù)據(jù)內(nèi)存化的物理機(jī),那么執(zhí)行數(shù)據(jù)內(nèi)存化功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行封裝切片功能的物理機(jī),那么執(zhí)行封裝切片功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行解碼功能的物理機(jī),那么執(zhí)行解碼功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行其他功能的物理機(jī),那么執(zhí)行其他音視頻處理功能;如果當(dāng)前物理機(jī)未設(shè)置功能,那么進(jìn)入休眠或者低功耗模式。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,其中,所述步驟s1還包括動(dòng)態(tài)調(diào)整各個(gè)物理機(jī)之間的數(shù)據(jù)處理關(guān)系,具體為:
s101:獲取當(dāng)前網(wǎng)絡(luò)中各種類型物理機(jī)的狀態(tài);
s102:按照特定功能的不同類別,分析所有功能類別中的物理機(jī)的運(yùn)行狀態(tài)數(shù)據(jù),對(duì)每個(gè)功能類別中的所有物理機(jī)的運(yùn)行狀態(tài)按照規(guī)則排序;
s103:如果同一功能類別中的所有物理機(jī)都高于性能閾值,轉(zhuǎn)至步驟s106;否則,轉(zhuǎn)至步驟s104;
s104:將低負(fù)載率的物理機(jī)中的所有正在處理的音視頻流重映射到高負(fù)載率的物理機(jī)上,或者不將新輸入的音視頻碼流映射到低負(fù)載率的物理機(jī)上,使得負(fù)載將某幾臺(tái)物理機(jī)達(dá)到性能閾值,剩余的物理機(jī)則從該功能類中刪除,進(jìn)入休眠狀態(tài)或者低功耗狀態(tài);轉(zhuǎn)至步驟s105;
s106:檢測(cè)是否有尚未分配功能的物理機(jī);如果有,轉(zhuǎn)至步驟s107;如果沒有,轉(zhuǎn)至步驟s110;
s107:?jiǎn)拘岩慌_(tái)尚未分配功能的物理機(jī);
s108:賦予功能;
s109:建立與前驅(qū)功能所在物理機(jī)的映射關(guān)系,使新輸入的音視頻碼流根據(jù)該映射表流入相應(yīng)的物理機(jī);轉(zhuǎn)至步驟s105;
s110:通知系統(tǒng)管理員,物理機(jī)資源不足;
s105:休眠固定時(shí)間;轉(zhuǎn)至步驟s101。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,所述步驟s2包括:
s21:調(diào)用相應(yīng)的協(xié)議接口獲取打包的音視頻數(shù)據(jù);
s22:根據(jù)協(xié)議抽取出每路的音視頻數(shù)據(jù)并存入內(nèi)存。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,所述步驟s3包括:
s31:獲取音視頻內(nèi)存數(shù)據(jù),自定義數(shù)據(jù)格式封裝;
s32:使用多媒體視頻處理工具將內(nèi)存音視頻片段封裝為獨(dú)立解碼的音視頻片段;
s33:根據(jù)當(dāng)前物理機(jī)中下一臺(tái)物理機(jī)的路由表,將獨(dú)立解碼的音視頻片段送到指定的解碼物理機(jī)或者對(duì)獨(dú)立解碼片段進(jìn)行處理的物理機(jī)。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,所述步驟s4包括:
s41:使用編解碼庫(kù)對(duì)獨(dú)立解碼的音視頻流進(jìn)行解碼;
s42:根據(jù)當(dāng)前物理機(jī)中下一臺(tái)物理機(jī)的路由表,將解碼的音視頻數(shù)據(jù)送到指定的后續(xù)物理機(jī);如果后續(xù)要對(duì)解碼后的yuv/pcm數(shù)據(jù)進(jìn)行處理,送入其他處理物理機(jī)。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理方法,步驟s5中進(jìn)一步的音視頻處理的實(shí)現(xiàn)方法包括:
將進(jìn)一步的音視頻處理功能設(shè)置到解碼物理機(jī)上,從而減少內(nèi)存拷貝和網(wǎng)絡(luò)傳輸;或者
將進(jìn)一步的音視頻處理功能和解碼功能設(shè)置到不同的物理機(jī)上,通過流水掩蓋兩者的傳輸時(shí)延。
本發(fā)明同時(shí)還提供了一種面向流式音視頻數(shù)據(jù)的分布式處理裝置,包括:
多臺(tái)物理機(jī),所述物理機(jī)按照功能劃分為執(zhí)行分布式資源管理功能的物理機(jī)和執(zhí)行其它功能的物理機(jī),所述執(zhí)行其它功能的物理機(jī)又劃分為分布式數(shù)據(jù)內(nèi)存化功能集群、分布式封裝切片功能集群、分布式解碼功能集群和其它音視頻分布式處理功能集群;
分布式內(nèi)存化模塊,用于將來自所有傳輸通道的音視頻碼流提取出來存入內(nèi)存;
分布式封裝切片模塊,與所述分布式內(nèi)存化模塊相連,用于將內(nèi)存中存儲(chǔ)的所述音視頻數(shù)碼流的片段直接封裝為能夠獨(dú)立編解碼的音視頻短片段;
分布式解碼模塊,與所述分布式封裝切片模塊相連,用于對(duì)所述能夠獨(dú)立編解碼的音視頻短片段進(jìn)行編解碼;
其它分布式音視頻處理模塊,與所述分布式解碼模塊相連,用于對(duì)解碼后的yuv數(shù)據(jù)或者經(jīng)過獨(dú)立編解碼的所述音視頻短片段進(jìn)行進(jìn)一步的音視頻處理;
分布式資源管理模塊,與所述分布式內(nèi)存化模塊、所述分布式封裝切片模塊、所述分布式解碼模塊和所述其它分布式音視頻處理模塊均相連,用于感知音視頻流量特點(diǎn)以及所述多臺(tái)物理機(jī)的運(yùn)行狀況,管理所述分布式內(nèi)存化模塊、所述分布式封裝切片模塊、所述分布式解碼模塊和所述其它分布式音視頻處理模塊與所述執(zhí)行其它功能的物理機(jī)之間的映射,以及建立屬于不同功能集群的物理機(jī)之間的映射。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理裝置,其中,所述分布式資源管理模塊管理所述分布式內(nèi)存化模塊、所述分布式封裝切片模塊、所述分布式解碼模塊和所述其它分布式音視頻處理模塊與所述執(zhí)行其它功能的物理機(jī)之間的映射的步驟包括:
s101:獲取當(dāng)前網(wǎng)絡(luò)中各種類型物理機(jī)的狀態(tài);
s102:按照特定功能的不同類別,分析所有功能類別中的物理機(jī)的運(yùn)行狀態(tài)數(shù)據(jù),對(duì)每個(gè)功能類別中的所有物理機(jī)的運(yùn)行狀態(tài)按照規(guī)則排序;
s103:如果同一功能類別中的所有物理機(jī)都高于性能閾值,轉(zhuǎn)至步驟s106;否則,轉(zhuǎn)至步驟s104;
s104:將低負(fù)載率的物理機(jī)中的所有正在處理的音視頻流重映射到高負(fù)載率的物理機(jī)上,或者不將新輸入的音視頻碼流映射到低負(fù)載率的物理機(jī)上,使得負(fù)載將某幾臺(tái)物理機(jī)達(dá)到性能閾值,剩余的物理機(jī)則從該功能類中刪除,進(jìn)入休眠狀態(tài)或者低功耗狀態(tài);轉(zhuǎn)至步驟s105;
s106:檢測(cè)是否有尚未分配功能的物理機(jī);如果有,轉(zhuǎn)至步驟s107;如果沒有,轉(zhuǎn)至步驟s110;
s107:?jiǎn)拘岩慌_(tái)尚未分配功能的物理機(jī);
s108:賦予功能;
s109:建立與前驅(qū)功能所在物理機(jī)的映射關(guān)系,使新輸入的音視頻碼流根據(jù)該映射表流入相應(yīng)的物理機(jī);轉(zhuǎn)至步驟s105;
s110:通知系統(tǒng)管理員,物理機(jī)資源不足;
s105:休眠固定時(shí)間;轉(zhuǎn)至步驟s101。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理裝置,其中,所述分布式內(nèi)存化模塊存儲(chǔ)音視頻碼流的步驟包括:
s21:調(diào)用相應(yīng)的協(xié)議接口獲取打包的音視頻數(shù)據(jù);
s22:根據(jù)協(xié)議抽取出每路的音視頻數(shù)據(jù)并存入內(nèi)存。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理裝置,其中,所述分布式封裝切片模塊進(jìn)行封裝的步驟包括:
s31:獲取音視頻內(nèi)存數(shù)據(jù),自定義數(shù)據(jù)格式封裝;
s32:使用多媒體視頻處理工具將內(nèi)存音視頻片段封裝為獨(dú)立解碼的音視頻片段;
s33:根據(jù)當(dāng)前物理機(jī)中下一臺(tái)物理機(jī)的路由表,將獨(dú)立解碼的音視頻片段送到指定的解碼物理機(jī)或者對(duì)獨(dú)立解碼片段進(jìn)行處理的物理機(jī)。
根據(jù)本發(fā)明提出的面向流式音視頻數(shù)據(jù)的分布式處理裝置,其中,所述分布式解碼模塊進(jìn)行編解碼的步驟為:
s41:使用編解碼庫(kù)對(duì)獨(dú)立解碼的音視頻流進(jìn)行解碼;
s42:根據(jù)當(dāng)前物理機(jī)中下一臺(tái)物理機(jī)的路由表,將解碼的音視頻數(shù)據(jù)送到指定的后續(xù)物理機(jī);如果后續(xù)要對(duì)解碼后的yuv/pcm數(shù)據(jù)進(jìn)行處理,送入其他處理物理機(jī)。
與現(xiàn)有的發(fā)明相比,具有易于工程實(shí)現(xiàn)、高性能、高通量、高能效、易維護(hù)、易調(diào)式、易優(yōu)化、易擴(kuò)展等優(yōu)點(diǎn)。當(dāng)需要擴(kuò)展支持新的流式數(shù)據(jù)來源時(shí),只需要針對(duì)編寫將該來源轉(zhuǎn)換為內(nèi)存流的模塊,因此容易通過擴(kuò)展支持新的流式數(shù)據(jù)來源。只有分布式封裝切片模塊需要維護(hù)音視頻流每路的上下文,分布式解碼模塊不需要維護(hù)流式數(shù)據(jù)上下文,系統(tǒng)吞吐量大,抗干擾能力強(qiáng)。直接將流式數(shù)據(jù)封裝為短視頻,而不需要將流式數(shù)據(jù)組裝成完整音視頻文件,再進(jìn)行切片,降低了對(duì)存儲(chǔ)容量的需求,從而能夠支持更多的音視頻路數(shù)并發(fā)處理。分布式資源管理模塊實(shí)現(xiàn)了各功能模塊與物理機(jī),以及各個(gè)物理機(jī)間的動(dòng)態(tài)管理與映射,實(shí)現(xiàn)了多個(gè)并發(fā)解碼單元間的負(fù)載均衡,避免單個(gè)解碼單元的擁塞。音視頻流量低時(shí),可以使部分并發(fā)處理單元在低負(fù)載時(shí)進(jìn)入休眠狀態(tài),降低功耗;音視頻流量高時(shí),根據(jù)資源分配映射算法,通過增加具有解碼功能的物理機(jī)、具有封裝功能的物理機(jī)數(shù)量來提高系統(tǒng)的處理能力。因此,該系統(tǒng)能夠適應(yīng)用戶流量的彈性變化。其中資源分配映射算法不僅僅具有理論意義,也具有易于量化實(shí)現(xiàn)的特點(diǎn),實(shí)際運(yùn)行中不需要刻意設(shè)置物理機(jī)的性能參數(shù),即使物理機(jī)的性能差別很大,系統(tǒng)運(yùn)行的過程中也能夠動(dòng)態(tài)充分發(fā)掘各個(gè)物理機(jī)的性能指標(biāo)。此外,通過資源管理物理機(jī),該系統(tǒng)也易于得到整個(gè)系統(tǒng)的資源分配情況,進(jìn)而有針對(duì)性的優(yōu)化與調(diào)試。能夠動(dòng)態(tài)的發(fā)掘每個(gè)功能所需要的物理機(jī)的最小數(shù)量,不會(huì)造成物理機(jī)的浪費(fèi)。分布式規(guī)??梢宰龅暮艽螅胰菀自黾有碌奈锢頇C(jī)。
附圖說明
圖1為本發(fā)明中每路音視頻的生命周期;
圖2為本發(fā)明實(shí)施過程中功能模塊到物理機(jī)的映射示意圖;
圖3為本發(fā)明實(shí)施過程中物理機(jī)的物理位置示意圖;
圖4為本發(fā)明中物理機(jī)的運(yùn)行過程示意圖;
圖5為本發(fā)明中資源管理功能的執(zhí)行過程示意圖;
圖6為本發(fā)明中封裝切片功能的執(zhí)行過程示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有付出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下文中所述的物理機(jī)可以指代服務(wù)器、板卡、嵌入式設(shè)備、pc等物理運(yùn)行實(shí)體。物理機(jī)間的通信方式不局限于網(wǎng)絡(luò),也可以是pcie等。系統(tǒng)實(shí)現(xiàn)時(shí)音視頻處理功能可以基于ffmpeg、libav、mp4v2、libmad、libresample等實(shí)現(xiàn)。系統(tǒng)支持的音視頻格式包括mp4、flv、asf、avi、webm、ogv、mpeg等,編解碼格式包括h.264、h.265、avs等,這些格式的種類由所采用的音視頻處理庫(kù)決定。
本發(fā)明提出的分布式處理方法通過內(nèi)部軟件模塊執(zhí)行。所用到的軟件模塊具體包括:將多種流式數(shù)據(jù)分布式內(nèi)存化模塊、分布式封裝切片模塊、分布式解碼模塊、分布式資源管理模塊、其他分布式音視頻處理模塊。
所述多種流式數(shù)據(jù)分布式內(nèi)存化模塊,用于將來自網(wǎng)絡(luò)、pcie等傳輸通道的流式音視頻轉(zhuǎn)化為統(tǒng)一的內(nèi)存流。將各種傳輸通道中的音視頻碼流數(shù)據(jù)提取出來,存入內(nèi)存。
所述分布式封裝切片模塊,用于將內(nèi)存中的音視頻碼流片段直接封裝為能夠獨(dú)立編解碼的音視頻短片段。具體實(shí)現(xiàn)時(shí)可以在多臺(tái)封裝切片物理機(jī)上進(jìn)行該過程,實(shí)現(xiàn)了分布式封裝切片。
所述分布式解碼模塊,用于對(duì)獨(dú)立編解碼的音視頻短片段進(jìn)行編解碼。由于短片段已經(jīng)被封裝為了獨(dú)立編解碼片段,因此不需要維護(hù)每路的編解碼上下文。
所述其他分布式音視頻處理模塊,用于對(duì)解碼后的yuv、或者獨(dú)立編解碼音視頻片段進(jìn)行進(jìn)一步的音視頻處理,例如播放、聚類、重采樣等等。
所述分布式資源管理模塊,具有如下功能:1.感知音視頻流量特點(diǎn),感知其他物理機(jī)的處理情況,例如cpu、內(nèi)存利用率、網(wǎng)絡(luò)帶寬、音視頻等待隊(duì)列長(zhǎng)度等。2.管理上述各個(gè)模塊到物理機(jī)的映射,動(dòng)態(tài)的將物理機(jī)映射為具有特定模塊功能的物理機(jī)。將所有物理機(jī)劃分為具有特定功能的功能類。3.建立不同功能類間物理機(jī)的映射。也就是說,每臺(tái)物理機(jī)都是對(duì)等的,都能夠被重映射為具有特定模塊功能的物理機(jī),物理機(jī)間數(shù)據(jù)處理關(guān)系也是可以動(dòng)態(tài)調(diào)整的。
如圖1所示,每路音視頻需要經(jīng)過如下模塊處理:分布式資源管理模塊100、將多種流式數(shù)據(jù)分布式內(nèi)存化模塊101、分布式封裝切片模塊102、分布式解碼模塊103、其他分布式音視頻處理模塊104。
如圖2所示,物理機(jī)分為兩大類,一類是執(zhí)行分布式資源管理模塊功能的物理機(jī)200,另一類是執(zhí)行其他模塊功能的物理機(jī),202表示負(fù)責(zé)將各種流式音視頻數(shù)據(jù)轉(zhuǎn)化為內(nèi)存數(shù)據(jù)的物理機(jī)集群,203表示將內(nèi)存數(shù)據(jù)通過封裝切片為可以獨(dú)立解碼短音視頻的物理機(jī)集群、204表示負(fù)責(zé)對(duì)獨(dú)立解碼短音視頻解碼的物理機(jī)集群,205表示負(fù)責(zé)其他音視頻操作的物理機(jī)集群。分布式資源管理物理機(jī)集群200中的某一個(gè)或多個(gè)需要運(yùn)維人員手動(dòng)配置生效,而執(zhí)行其他模塊功能的物理機(jī)則會(huì)根據(jù)系統(tǒng)的運(yùn)行情況被分布式資源管理物理機(jī)動(dòng)態(tài)設(shè)置。運(yùn)行一段時(shí)間后,具有以下特點(diǎn):物理機(jī)根據(jù)功能被劃分為了多個(gè)類別。各個(gè)類別中的物理機(jī)間沒有依賴關(guān)系,獨(dú)立執(zhí)行其功能;各個(gè)類別間的物理機(jī)間有映射關(guān)系,由分布式資源管理功能所在物理機(jī)動(dòng)態(tài)管理。
如圖3所示,圖2中的各種物理機(jī)301的物理位置沒有特定要求,隨機(jī)放置。只需要通過互聯(lián)網(wǎng)絡(luò)將其連接。
如圖4所示,單個(gè)物理機(jī)的執(zhí)行分為如下步驟:
步驟1:判斷當(dāng)前物理機(jī)的功能屬性
步驟2:根據(jù)物理的功能屬性執(zhí)行相應(yīng)的功能。體現(xiàn)了物理機(jī)固化為具有特定功能的物理機(jī)。如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行資源管理功能的物理機(jī),那么執(zhí)行分布式資源管理功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行數(shù)據(jù)內(nèi)存化的物理機(jī),那么執(zhí)行數(shù)據(jù)內(nèi)存化功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行封裝切片功能的物理機(jī),那么執(zhí)行封裝切片功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行解碼功能的物理機(jī),那么執(zhí)行解碼功能;如果當(dāng)前物理機(jī)被設(shè)置為執(zhí)行其他功能的物理機(jī),那么執(zhí)行其他音視頻處理功能;如果當(dāng)前物理機(jī)未設(shè)置功能,那么進(jìn)入休眠或者低功耗模式。
所述分布式資源管理模塊,是本專利需要保護(hù)的非常重要的一個(gè)功能。具有如下功能:1.感知音視頻流量特點(diǎn),感知其他物理機(jī)的處理情況,例如cpu、內(nèi)存利用率、網(wǎng)絡(luò)帶寬、音視頻等待隊(duì)列長(zhǎng)度等。2.管理上述各個(gè)模塊到物理機(jī)的映射,動(dòng)態(tài)的將物理機(jī)映射為具有特定模塊功能的物理機(jī)。將所有物理機(jī)劃分為具有特定功能的功能類。3.建立不同功能類間物理機(jī)的映射。也就是說,每臺(tái)物理機(jī)都是對(duì)等的,都能夠被重映射為具有特定模塊功能的物理機(jī),物理機(jī)間數(shù)據(jù)處理關(guān)系也是可以動(dòng)態(tài)調(diào)整的。如圖5所示,資源管理功能的執(zhí)行分為如下步驟:
步驟s501:獲取當(dāng)前網(wǎng)絡(luò)中各種類型物理機(jī)的狀態(tài)。狀態(tài)包括:網(wǎng)絡(luò)帶寬,cpu利用率,內(nèi)存利用率,正在處理的音視頻路數(shù),音視頻隊(duì)列中的路數(shù)等。
步驟s502:按照功能類,分析所有功能類中的物理機(jī)的運(yùn)行狀態(tài)數(shù)據(jù),對(duì)每個(gè)功能類中的所有物理機(jī)的運(yùn)行狀態(tài)按照某種規(guī)則進(jìn)行排序。對(duì)每個(gè)功能類內(nèi)的物理機(jī)進(jìn)行如下操作:
步驟s503:如果所有物理機(jī)都處于性能閾值,這表明網(wǎng)絡(luò)流量比較強(qiáng),該功能類中需要增加物理機(jī)的數(shù)量。轉(zhuǎn)步驟步驟s506。否則說明網(wǎng)絡(luò)流量比較小,當(dāng)前功能類中的物理機(jī)有冗余,需要減少。轉(zhuǎn)步驟s504。
步驟s504:將低負(fù)載率的物理機(jī)中的所有正在處理的音視頻流重映射到高負(fù)載率的物理機(jī)上,或者新來音視頻流映射不要映射到低負(fù)載率的物理機(jī)上。使得負(fù)載盡可能將某幾臺(tái)物理機(jī)達(dá)到性能閾值,但是剩余的物理機(jī)可以從該功能類中刪除,進(jìn)入休眠狀態(tài)或者低功耗狀態(tài)。轉(zhuǎn)步驟s505.
步驟s506:是否有尚未分配功能的物理機(jī)。如果有,轉(zhuǎn)步驟s507.如果沒有,轉(zhuǎn)步驟s510.
步驟s507:?jiǎn)拘岩慌_(tái)尚未分配功能的物理機(jī)
步驟s508:賦予功能
步驟s509:建立與前驅(qū)功能所在物理機(jī)的映射關(guān)系。這樣新來的音視頻流根據(jù)該映射表,就會(huì)流入該物理機(jī)。轉(zhuǎn)s505.
步驟s510:通知系統(tǒng)管理員,物理機(jī)資源不足
步驟s505:休眠固定時(shí)間。轉(zhuǎn)步驟s501.
所述多種流式數(shù)據(jù)分布式內(nèi)存化模塊,用于將來自網(wǎng)絡(luò)、pcie等傳輸通道的流式音視頻轉(zhuǎn)化為統(tǒng)一的內(nèi)存流。將各種傳輸通道中的音視頻碼流數(shù)據(jù)提取出來,存入內(nèi)存。數(shù)據(jù)內(nèi)存化功能的執(zhí)行步驟分為如下幾步:
步驟1:調(diào)用相應(yīng)的協(xié)議接口,獲取打包的音視頻數(shù)據(jù)。例如:pcie、rtp/rstp/rtmp/http、socket等
步驟2:根據(jù)協(xié)議,抽取出每路的音視頻數(shù)據(jù),存入內(nèi)存。
步驟3:對(duì)打包出的音視頻數(shù)據(jù)送入封裝切片模塊,封裝成可以獨(dú)立解碼的音視頻片段。實(shí)際實(shí)現(xiàn)的過程中,有兩種方案:1.將兩個(gè)功能放到同一臺(tái)物理機(jī)上,這樣會(huì)減少內(nèi)存拷貝和網(wǎng)絡(luò)傳輸。2.如果網(wǎng)絡(luò)流大,也可以將兩者放到不同的物理機(jī)上,用流水來掩蓋兩者的傳輸時(shí)延,這樣更易于擴(kuò)展輸入操作,更易于維護(hù),甚至有時(shí)候負(fù)責(zé)輸入的物理機(jī)有特殊的使用約束。
所述分布式封裝切片模塊,是本專利非常重要的一個(gè)功能。本發(fā)明的特點(diǎn)是直接將內(nèi)存中的音視頻碼流片段直接封裝為能夠獨(dú)立編解碼的音視頻短片段,是對(duì)流式數(shù)據(jù)通過封裝切片,而不是對(duì)完整的視頻文件,因此占用的內(nèi)存和磁盤空間極小,就像流水一樣。另一個(gè)優(yōu)點(diǎn)是實(shí)現(xiàn)了解碼模塊與其他模塊的解耦和,使得解碼可以分布式的進(jìn)行,避免了依賴音視頻參數(shù)上下文造成的影響,提高了解碼效率。如圖6所示,600表示第1路視頻流,在等待封裝切片隊(duì)列里排隊(duì)、601表示第1路音頻流,在等待封裝切片隊(duì)列里排隊(duì),…。605中每個(gè)表示將600中每個(gè)內(nèi)存視頻流封裝為可以獨(dú)立解碼短視頻,606中每個(gè)表示將601中每個(gè)內(nèi)存音頻流封裝為可以獨(dú)立解碼短音頻。封裝切片功能的執(zhí)行步驟分為如下幾步:
步驟1:獲取音視頻內(nèi)存數(shù)據(jù)。當(dāng)前物理機(jī)上的音視頻流來自前驅(qū)功能類中的某臺(tái)物理機(jī),由資源管理物理機(jī)建立好了路由關(guān)系。因此內(nèi)存數(shù)據(jù)可以直接從上下文中獲取,可以經(jīng)過自定義數(shù)據(jù)格式包裝。
步驟2:利用ffmpeg庫(kù)或者上面提到的其他庫(kù),實(shí)現(xiàn)將內(nèi)存音視頻片段封裝為獨(dú)立解碼的音視頻片段。如果是使用ffmpeg庫(kù),使用aviocontext結(jié)構(gòu)體循環(huán)從內(nèi)存中讀取音視頻數(shù)據(jù),然后使用avstream封裝成獨(dú)立解碼的音視頻文件。實(shí)際上,某些格式的音視頻數(shù)據(jù)本身就是可以獨(dú)立解碼的片段,比如flv、mp3等,該步驟可以簡(jiǎn)略。
步驟3:根據(jù)本機(jī)中下一臺(tái)物理機(jī)的路由表,將獨(dú)立解碼的音視頻片段送到指定的解碼物理機(jī)或者對(duì)獨(dú)立解碼片段進(jìn)行處理的物理機(jī)。
所述分布式解碼模塊,用于對(duì)獨(dú)立編解碼的音視頻短片段進(jìn)行編解碼。由于短片段已經(jīng)被封裝為了獨(dú)立編解碼片段,因此不需要維護(hù)每路的編解碼上下文。步驟如下:
步驟1:使用上文提到的編解碼庫(kù),對(duì)獨(dú)立解碼的音視頻流進(jìn)行解碼
步驟2:根據(jù)本機(jī)中下一臺(tái)物理機(jī)的路由表,將解碼的音視頻數(shù)據(jù)送到指定的后續(xù)物理機(jī)。如果后續(xù)要對(duì)解碼后的yuv/pcm數(shù)據(jù)進(jìn)行處理,送入其他處理物理機(jī)。
所述其他分布式音視頻處理模塊,用于對(duì)解碼后的yuv、或者獨(dú)立編解碼音視頻片段進(jìn)行進(jìn)一步的音視頻處理,例如播放、聚類、重采樣等等。實(shí)際實(shí)現(xiàn)的過程中,有兩種方案:1.將該功能放到解碼物理機(jī)上,這樣會(huì)減少內(nèi)存拷貝和網(wǎng)絡(luò)傳輸。2.如果網(wǎng)絡(luò)流大,也可以將兩者放到不同的物理機(jī)上,用流水來掩蓋兩者的傳輸時(shí)延,這樣更易于擴(kuò)展輸入操作,更易于維護(hù)。
同時(shí)本發(fā)明增加新的物理機(jī)也非常容易,只需要在新的物理機(jī)上安裝本發(fā)明的分布式處理方法實(shí)現(xiàn)的軟件并建立到資源管理物理機(jī)的路由即可。
本領(lǐng)域普通技術(shù)人員可以理解:附圖只是一個(gè)實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。
最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍。