本發(fā)明涉及一種ASI數(shù)據(jù)共享方案。
背景技術(shù):
:在很多內(nèi)容提供方對外提供內(nèi)容時,會按照內(nèi)容采買方的要求轉(zhuǎn)碼成通用的視頻格式,內(nèi)容提供方可能通過ASI接口方式提供直播內(nèi)容。有些ASI采集卡設(shè)備為獨占模式,當轉(zhuǎn)碼任務(wù)從ASI采集卡中讀取數(shù)據(jù)時,無法對該采集卡進行信源監(jiān)控。有些ASI源為復合流的情況,無法同時為每個節(jié)目同時進行轉(zhuǎn)碼處理。為了提高穩(wěn)定性的,轉(zhuǎn)碼設(shè)備一般為主備方式,同一個源數(shù)據(jù)無法同時提供給主備機器。ASI采集卡在源中斷的情況下讀源數(shù)據(jù)失敗導致異常,影響后續(xù)邏輯,且源恢復后需要重置,邏輯比較復雜。技術(shù)實現(xiàn)要素:本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足而提供一種ASI數(shù)據(jù)共享方案。為實現(xiàn)上述目的,一方面,本發(fā)明提供的一種ASI數(shù)據(jù)共享方案,包括數(shù)據(jù)探測模塊、數(shù)據(jù)發(fā)布模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)加載模塊、數(shù)據(jù)分發(fā)模塊和管理模塊,數(shù)據(jù)探測模塊用于掃描出ASI端口列表并探測ASI端口是否有源數(shù)據(jù),數(shù)據(jù)發(fā)布模塊用于接收和記錄數(shù)據(jù)探測模塊發(fā)送的ASI端口信息數(shù)據(jù)并提供ASI端口信息數(shù)據(jù)的查詢服務(wù),數(shù)據(jù)處理模塊用于解析源數(shù)據(jù)以提供給數(shù)據(jù)發(fā)布模塊用于發(fā)布源數(shù)據(jù)媒體信息,數(shù)據(jù)加載模塊用于從ASI端口中加載數(shù)據(jù)并通過內(nèi)存共享方式發(fā)送給數(shù)據(jù)分發(fā)模塊,數(shù)據(jù)分發(fā)模塊用于接收開始發(fā)送請求并通過數(shù)據(jù)加載模塊發(fā)送的信息加載和分發(fā)ASI端口數(shù)據(jù),管理模塊用于調(diào)度各模塊且對外接收消息數(shù)據(jù)及發(fā)送響應(yīng)數(shù)據(jù)。優(yōu)選地,數(shù)據(jù)加載模塊開始對ASI端口加載數(shù)據(jù)時將通知數(shù)據(jù)探測模塊暫停對對應(yīng)的ASI端口的探測。優(yōu)選地,數(shù)據(jù)加載模塊按照預(yù)定時間間隔對ASI端口進行探測,數(shù)據(jù)加載模塊加載數(shù)據(jù)時將通知數(shù)據(jù)探測模塊暫停對對應(yīng)的ASI端口的探測。優(yōu)選地,在數(shù)據(jù)處理模塊中,當源數(shù)據(jù)是復合流時,則數(shù)據(jù)處理模塊還用于提取源數(shù)據(jù)復合流中指定需要的節(jié)目數(shù)據(jù)從而減少需要的網(wǎng)絡(luò)帶寬。根據(jù)本發(fā)明提供的一種ASI數(shù)據(jù)共享方案,針對ASI采集卡數(shù)據(jù)采集的局限性,解決轉(zhuǎn)碼設(shè)備主備部署時相同源數(shù)據(jù)共享的問題,簡化轉(zhuǎn)碼設(shè)備信源中斷恢復的處理邏輯,減少數(shù)據(jù)傳輸量從而有效利用帶寬,極大地減少直播轉(zhuǎn)碼系統(tǒng)的復雜性,提高直播數(shù)據(jù)處理的便利性。附圖說明圖1是本發(fā)明一實施例的一種ASI數(shù)據(jù)共享方案的邏輯示意框圖。本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。具體實施方式下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,通過參考附圖描述的實施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。對于本領(lǐng)域的普通技術(shù)人員而言,可以根據(jù)具體情況理解常見術(shù)語在本發(fā)明中的具體含義。本發(fā)明一實施例提供了一種ASI數(shù)據(jù)共享方案,包括數(shù)據(jù)探測模塊、數(shù)據(jù)發(fā)布模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)加載模塊、數(shù)據(jù)分發(fā)模塊和管理模塊。如圖1所示,為本發(fā)明的ASI數(shù)據(jù)共享方案的邏輯示意框圖。數(shù)據(jù)探測模塊用于掃描出ASI端口列表并探測ASI端口是否有源數(shù)據(jù),數(shù)據(jù)發(fā)布模塊用于接收和記錄數(shù)據(jù)探測模塊發(fā)送的ASI端口信息數(shù)據(jù)并提供ASI端口信息數(shù)據(jù)的查詢服務(wù),數(shù)據(jù)處理模塊用于解析源數(shù)據(jù)以提供給數(shù)據(jù)發(fā)布模塊用于發(fā)布源數(shù)據(jù)媒體信息,數(shù)據(jù)加載模塊用于從ASI端口中加載數(shù)據(jù)并通過內(nèi)存共享方式發(fā)送給數(shù)據(jù)分發(fā)模塊,數(shù)據(jù)分發(fā)模塊用于接收開始發(fā)送請求并通過數(shù)據(jù)加載模塊發(fā)送的信息加載和分發(fā)ASI端口數(shù)據(jù),管理模塊用于調(diào)度各模塊且對外接收消息數(shù)據(jù)及發(fā)送響應(yīng)數(shù)據(jù)。數(shù)據(jù)加載模塊開始對ASI端口加載數(shù)據(jù)時將通知數(shù)據(jù)探測模塊暫停對對應(yīng)的ASI端口的探測。數(shù)據(jù)加載模塊按照預(yù)定時間間隔對ASI端口進行探測,數(shù)據(jù)加載模塊加載數(shù)據(jù)時將通知數(shù)據(jù)探測模塊暫停對對應(yīng)的ASI端口的探測。其中,對ASI端口進行探測的方式是:打開ASI端口,讀取數(shù)據(jù),使用數(shù)據(jù)處理模塊分析數(shù)據(jù),關(guān)閉端口。等待設(shè)定的時間間隔,重新下一次探測。為了不消耗過多的系統(tǒng)性能,在本實施例中時間間隔設(shè)定為5秒一次。需要說明的是,該時間間隔可以通過配置文件修改而非固定量,可以理解,時間間隔的設(shè)定值應(yīng)針對具體方案需求和情況而定。在數(shù)據(jù)處理模塊中,當源數(shù)據(jù)是復合流時,則數(shù)據(jù)處理模塊還用于提取源數(shù)據(jù)復合流中指定需要的節(jié)目數(shù)據(jù)從而減少需要的網(wǎng)絡(luò)帶寬。具體地,數(shù)據(jù)探測模塊掃描出所有的ASI端口列表,掃描探測所有的ASI端口是否有源數(shù)據(jù),如果某個ASI端口源由無變?yōu)橛?。則通過數(shù)據(jù)處理模塊解析信源媒體信息,把該信息通知數(shù)據(jù)發(fā)布模塊發(fā)布,并通知數(shù)據(jù)加載模塊登記該端口媒體信息;如果某個ASI端口源由有變無,通知數(shù)據(jù)發(fā)布模塊去除該端口媒體信息。由于ASI采集卡的獨占性,數(shù)據(jù)加載模塊開始讀取數(shù)據(jù)時,通知數(shù)據(jù)探測模塊暫停對該端口的探測。具體地,數(shù)據(jù)發(fā)布模塊接收到數(shù)據(jù)探測模塊發(fā)送的ASI端口媒體信息通知,記錄該端口的媒體信息。這些媒體信息通知在模塊內(nèi)部可直接函數(shù)調(diào)用,媒體信息為xml格式的字符串,記錄在內(nèi)存中的map表(端口:xml),這些媒體信息可直接在map表中添加或刪除;接收到數(shù)據(jù)探測模塊發(fā)送的ASI端口源斷開通知,刪除該端口的媒體信息;通過遠程調(diào)用方式提供查詢接口查詢某個ASI端口的源信息;當應(yīng)用啟動后,應(yīng)用可以通過ASI服務(wù)的查詢接口查詢所有的或某個ASI端口的媒體信息;應(yīng)用查到需要的源可用,則通過向數(shù)據(jù)分發(fā)模塊發(fā)送請求來獲取該源數(shù)據(jù)。在本發(fā)明中,上述的應(yīng)用和圖1中所示的應(yīng)用即為轉(zhuǎn)碼器。具體地,數(shù)據(jù)加載模塊負責從ASI端口中加載數(shù)據(jù)。收到數(shù)據(jù)分發(fā)模塊請求后通知數(shù)據(jù)探測模塊停止對該ASI端口的探測,然后從該ASI端口加載數(shù)據(jù)并通過內(nèi)存共享方式給數(shù)據(jù)分發(fā)模塊。當數(shù)據(jù)加載模塊發(fā)現(xiàn)源數(shù)據(jù)不再存在時:等待源數(shù)據(jù)的恢復,如恢復則繼續(xù)發(fā)送數(shù)據(jù);如果該端口數(shù)據(jù)不再被需要,則通知數(shù)據(jù)探測模塊對該ASI端口進行探測。內(nèi)存共享方式的原理:ASI服務(wù)器和轉(zhuǎn)碼器之間的數(shù)據(jù)傳遞使用TCP(命令)或UDP(數(shù)據(jù))來進行。而ASI服務(wù)內(nèi)部模塊之間直接使用內(nèi)存指針就可以了,一般建立一個環(huán)狀內(nèi)存塊列表,使用鎖來控制寫入和讀取,數(shù)據(jù)加載模塊拿到鎖,把數(shù)據(jù)寫入到列表末尾,然后釋放鎖;數(shù)據(jù)分發(fā)模塊拿到鎖,從列表的開頭讀取數(shù)據(jù),分發(fā)出去,釋放鎖。這樣循環(huán)利用內(nèi)存塊。每個端口都有一個環(huán)狀內(nèi)存列表。具體地,數(shù)據(jù)分發(fā)模塊收到開始發(fā)送請求后通過數(shù)據(jù)加載模塊加載該ASI端口的數(shù)據(jù)并分發(fā)。如果該端口無指定需要的節(jié)目則返回錯誤。開始發(fā)送請求參數(shù)包括ASI端口,媒體信息,目標IP和端口,如果指定媒體信息且源數(shù)據(jù)為MPTS(多節(jié)目傳輸流或復合流,以下統(tǒng)稱MPTS),數(shù)據(jù)分發(fā)模塊通過數(shù)據(jù)處理模塊把該端口的MPTS流轉(zhuǎn)化為SPTS(單節(jié)目傳輸流,以下統(tǒng)稱SPTS)流通過TCP協(xié)議發(fā)送到目標IP和端口,如果源數(shù)據(jù)是SPTS,直接通過TCP協(xié)議發(fā)送到目標IP和端口。并使該ASI端口的引用計數(shù)+1。停止發(fā)送請求參數(shù)包括目標IP和端口,收到停止發(fā)送請求后停止向該目標IP和端口發(fā)送數(shù)據(jù),并使該ASI端口的引用計數(shù)-1。上述的引用計數(shù)用于標記是否有應(yīng)用在讀取該ASI端口的數(shù)據(jù),如果計數(shù)為0,表示沒有應(yīng)用在使用該端口的數(shù)據(jù),那么數(shù)據(jù)加載模塊停止從ASI端口讀取數(shù)據(jù),把該ASI端口還給數(shù)據(jù)探測模塊,數(shù)據(jù)探測模塊接管該端口探測信源是否存在。具體地,數(shù)據(jù)處理模塊負責解析源數(shù)據(jù),提供給數(shù)據(jù)發(fā)布模塊用于發(fā)布源數(shù)據(jù)媒體信息;并把某個MPTS流中的節(jié)目根據(jù)需求轉(zhuǎn)成一個SPTS流,可以有效節(jié)省帶寬,避免擁堵。在本發(fā)明中,源數(shù)據(jù)一般為MPTS流,是多個節(jié)目在同一條流中,在一些具體實施例中,比如中央-1、中央-2等在一起,某個轉(zhuǎn)碼任務(wù)轉(zhuǎn)中央-1,其他轉(zhuǎn)碼任務(wù)轉(zhuǎn)中央-2,如果都把所有的節(jié)目數(shù)據(jù)讀取下來再從中解析出需要的節(jié)目,會造成數(shù)據(jù)重復傳輸,占用帶寬。解析的目的是告訴轉(zhuǎn)碼設(shè)備,哪個端口有哪些節(jié)目流,這樣轉(zhuǎn)碼設(shè)備發(fā)送”Start”命令時指定只需要中央-1節(jié)目,這樣ASI數(shù)據(jù)服務(wù)器可以通過數(shù)據(jù)處理模塊把中央-1的數(shù)據(jù)提取出來發(fā)送給該轉(zhuǎn)碼器,減少所占用的帶寬。具體地,管理模塊負責各個模塊的調(diào)度,配置文件的讀取,命令的接受和分發(fā)。對外通過基于TCP的傳輸協(xié)議在指定的端口接受消息數(shù)據(jù),并發(fā)送響應(yīng)數(shù)據(jù)。負責消息數(shù)據(jù)的解析,響應(yīng)數(shù)據(jù)的編碼。消息和響應(yīng)數(shù)據(jù)使用ASN.1編碼格式。消息的定義如下:Magic|Totallength|Command|Count|(ValueType|Value)|[(ValueType|Value)]|...其中,Totallength:不包含自身和Magic外其他數(shù)據(jù)的byte個數(shù);Magicofmessage:ASIM;Command:Query1;Start2;Stop:3;Count:value的個數(shù);ValueType:String包含兩個字節(jié)的長度和數(shù)據(jù),長度為unsignedshortinteger。Sizesofmessagefields(bytes)MagicTotallengthcommandCountValueTypeValue441112+Bytes其中,所有的數(shù)字使用網(wǎng)絡(luò)字節(jié)順序。查詢端口媒體信息(Query):參數(shù):ASI端口號(UNSIGNED)。返回值:xml格式媒體信息(STRING)。讀取某個端口的某條流數(shù)據(jù)(Start):參數(shù):ASI端口號(UNSIGNED),節(jié)目PID(UNSIGNED或0xFFFFFFFF)。0xFFFFFFFF不指定節(jié)目,目標IP和端口,用于后續(xù)的數(shù)據(jù)發(fā)送。返回值:錯誤碼;0表示成功。停止某個端口的某條流數(shù)據(jù)(Stop):參數(shù):ASI端口號(UNSIGNED),節(jié)目PID(UNSIGNED或0xFFFFFFFF)。0xFFFFFFFF不指定節(jié)目。返回值:錯誤碼;0表示成功。綜上,根據(jù)本發(fā)明提供的一種ASI數(shù)據(jù)共享方案,針對ASI采集卡數(shù)據(jù)采集的局限性,解決轉(zhuǎn)碼設(shè)備主備部署時相同源數(shù)據(jù)共享的問題,簡化轉(zhuǎn)碼設(shè)備信源中斷恢復的處理邏輯,減少數(shù)據(jù)傳輸量從而有效利用帶寬,極大地減少直播轉(zhuǎn)碼系統(tǒng)的復雜性,提高直播數(shù)據(jù)處理的便利性。在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。盡管上面已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。當前第1頁1 2 3