DVB系統(tǒng)中多路TS流的軟件復(fù)用關(guān)鍵技術(shù)及實(shí)現(xiàn)
1.引言TPF FPT
數(shù)字圖像通信的最廣泛也是最常見的應(yīng)用就是數(shù)字電視廣播系統(tǒng)[1],與此對(duì)應(yīng)的DVB標(biāo)準(zhǔn)的建立更是加速了數(shù)字電視廣播系統(tǒng)的大規(guī)模應(yīng)用。DVB標(biāo)準(zhǔn)選定ISO JIEC MPEG-2標(biāo)準(zhǔn)作為音頻及視頻的編碼壓縮方式,信源編碼進(jìn)行了統(tǒng)一,隨后對(duì)MPEG-2碼流進(jìn)行打包形成TS流(transport stream),進(jìn)行多個(gè)傳輸流復(fù)用,最后通過衛(wèi)星、有線電視等不同媒介傳輸方式進(jìn)行傳輸。
對(duì)多個(gè)傳輸流進(jìn)行復(fù)用的意義在于復(fù)用后的傳輸流只占用一個(gè)物理的傳輸信道,傳輸流中的每個(gè)節(jié)目所占用的是傳輸流提供的虛擬信道。在解碼器端,只需要一套固定的接收設(shè)備,對(duì)不同節(jié)目的選擇只是在傳輸流中選擇不同的原始碼流,這大大簡化了接收機(jī)的實(shí)現(xiàn),節(jié)省了成本,提高了靈活性,而且根據(jù)該標(biāo)準(zhǔn)定義,解碼器的系統(tǒng)時(shí)鐘與調(diào)制解調(diào)器的時(shí)鐘是完全獨(dú)立的。這使得在實(shí)現(xiàn)這兩個(gè)子系統(tǒng)彼此功能時(shí)是完全分開的,因此接口變得很簡單。
在數(shù)字電視節(jié)目制作及發(fā)送時(shí),對(duì)多路節(jié)目的復(fù)用,由于一般的計(jì)算機(jī)很難處理幾十兆到幾百兆碼率的碼流,所以,目前大部分的復(fù)用器都是用硬件實(shí)現(xiàn)的,但其價(jià)格昂貴[2,3]。然而,隨著計(jì)算機(jī)速度越來越快,在多CPU的服務(wù)器上,完全能夠?qū)崿F(xiàn)多路節(jié)目的實(shí)時(shí)軟件復(fù)用。與硬件復(fù)用相比,軟件復(fù)用具有靈活性高,開發(fā)成本低的優(yōu)點(diǎn)。在軟件復(fù)用實(shí)現(xiàn)方案中,服務(wù)器從衛(wèi)星電視或其它片源中實(shí)時(shí)采集TS流,經(jīng)過分析和過濾將所選擇的基本流復(fù)用成一路TS流,然后通過普通的TS流播出卡發(fā)送出去。論文分析多路TS流復(fù)用原理,針對(duì)TS流中的信息提取和節(jié)目專用信息PSI (program specific information)合成,及軟件復(fù)用中的節(jié)目時(shí)鐘參考PCR ( program clock reference)的修正等問題進(jìn)行研究,提出了進(jìn)行軟件復(fù)用的具體方法,最后在Windows平臺(tái)上設(shè)計(jì)并實(shí)現(xiàn)多路TS流的軟件復(fù)用。
2.TS流的系統(tǒng)級(jí)復(fù)用
數(shù)字電視節(jié)目的復(fù)用包括兩個(gè)階段,對(duì)音/視頻PES包的節(jié)目復(fù)用和對(duì)TS流的系統(tǒng)復(fù)用[4]。本文研究第二個(gè)階段即TS系統(tǒng)級(jí)復(fù)用,將多個(gè)單路的TS流合成一個(gè)多節(jié)目TS流。數(shù)字電視系統(tǒng)級(jí)復(fù)用是數(shù)字電視系統(tǒng)的關(guān)鍵技術(shù)之一,其中數(shù)字電視節(jié)目專用信息PSI的提取和重構(gòu)及系統(tǒng)層節(jié)目時(shí)間參考PCR值的修正,是復(fù)用器的兩項(xiàng)關(guān)鍵技術(shù)。
基于MPEG-2的TS流多路數(shù)字電視節(jié)目TS流系統(tǒng)級(jí)復(fù)用原理如圖1所示。當(dāng)多路TS流復(fù)用成一路TS流時(shí),首先將對(duì)各路TS流的PSI進(jìn)行搜集并分析其碼流,得到各路TS碼流中相應(yīng)的視頻、音頻、數(shù)據(jù)信息的碼率、對(duì)各路節(jié)目的包標(biāo)識(shí)PID, 數(shù)字電視節(jié)目專用信息PSI,節(jié)目時(shí)間參考PCR等信息進(jìn)行處理,丟棄各路原有的PSI信息。當(dāng)出現(xiàn)兩路TS流中的PID發(fā)生沖突時(shí),需要修改一路或者多路TS流中某一數(shù)據(jù)流的PID(即復(fù)用器需要對(duì)修改了PID的視頻/音頻包或其他數(shù)據(jù)包進(jìn)行PID更新)?梢钥吹剑瑹o論是否出現(xiàn)PID沖突,復(fù)用器都需要重構(gòu)PSI信息,其濾波的處理過程如圖2所示。對(duì)不同節(jié)目的PID值進(jìn)行修改后,與本地產(chǎn)生的這類數(shù)據(jù)重新整合為復(fù)用后新的PSI等系統(tǒng)級(jí)控制信息,同時(shí)插入符合DVB-SI規(guī)范的業(yè)務(wù)信息,并在攜帶有調(diào)整字段的TS包中,判斷帶有PCR標(biāo)志位字段的值,如果該值為“1”,那么在該TS流離開復(fù)用器的時(shí)刻,需要對(duì)TS包中的PCR值做相應(yīng)的修正或重新插入新的節(jié)目時(shí)鐘參考,具體方法將在后面詳細(xì)介紹。
3.TS流節(jié)目專用信息的提取與重構(gòu)
數(shù)字電視節(jié)目專用信息PSI描述TS流的組成結(jié)構(gòu),在MPEG-2系統(tǒng)層中極為重要,一個(gè)有多路節(jié)目和私有數(shù)據(jù)的TS流,需要PSI信息將每一路節(jié)目的音視頻對(duì)應(yīng)起來[5]。PSI信息將TS流中的內(nèi)容描述成一個(gè)樹狀的結(jié)構(gòu),如圖3所示。在TS流中可以復(fù)用多個(gè)節(jié)目,每個(gè)節(jié)目又可以包含多個(gè)基本碼流(通常是單個(gè)視頻流、多個(gè)音頻流)。DVB系統(tǒng)沿用MPEG-2的節(jié)目專用信息PSI來確定傳輸?shù)墓?jié)目和包標(biāo)識(shí)PID的關(guān)系以及節(jié)目的組成結(jié)構(gòu)等情況。PSI主要包括以下四個(gè)表:節(jié)目關(guān)聯(lián)表(PAT: Program Association Table)、條件訪問表(CAT: Conditional Access Table)、節(jié)目映射表(PMT: Program Map Table)、網(wǎng)絡(luò)信息表NIT: Network Information Table),本文需要涉及到節(jié)目關(guān)聯(lián)表PAT和節(jié)目映射表PMT。
由于TS流復(fù)用后的相關(guān)聯(lián)內(nèi)容發(fā)生了變化,因此要對(duì)PSI信息進(jìn)行處理。PSI信息的處理包括PAT和PMT表的替換,PID的重映射,還有就是連續(xù)計(jì)數(shù)器的修改,雖然這不算PSI信息,但是這部分工作與PSI信息修改關(guān)系很密切,同時(shí)在實(shí)際的實(shí)現(xiàn)過程中可以同時(shí)完成。
復(fù)用后的流中有多路節(jié)目,原來每一路節(jié)目中的PAT和PMT都只有自身的內(nèi)容,為此需要將PAT和PMT替換。首先根據(jù)輸入流的數(shù)目和預(yù)占的頻道號(hào),在一開始動(dòng)態(tài)生成PAT表,PMT表則在最初計(jì)算好,生成靜態(tài)的PMT對(duì)應(yīng)替換即可,同時(shí)根據(jù)每個(gè)PMT_PID找到實(shí)現(xiàn)計(jì)算好的PMT表,將其中的視音頻PID找到,作為將要替換的視音頻PID。之所以在一開始生成或者直接使用靜態(tài)表是因?yàn)镻AT和PMT有32位CRC,無法完成實(shí)時(shí)計(jì)算。
PMT表替換后,每一路流中原有的視音頻幀的PID應(yīng)與其對(duì)應(yīng)替換的PMT表中的視音頻PID保持一致,即需要進(jìn)行PID重映射。 在傳輸流處理過程中,先分析每一個(gè)讀入的TS幀,根據(jù)PID的不同,選擇替換的內(nèi)容,如果是PAT和PMT表,則整個(gè)TS幀替換,如果是視音頻幀,則只替換PID,替換之后,應(yīng)該對(duì)連續(xù)計(jì)數(shù)器加一。
需要注意的是,單路傳輸流的構(gòu)成并不一樣,有的傳輸流是一路音頻一路視頻,有的是一路視頻兩路音頻;有的PCR的PID與視頻的PID相同,有的則不同。所以,應(yīng)該為每一種情況都準(zhǔn)備一張PMT表,在新素材到來時(shí),根據(jù)分析出來的PSI信息的情況,決定選用那一張PMT表。這樣作雖然要?jiǎng)?chuàng)建很多靜態(tài)表,增加了系統(tǒng)內(nèi)存的占用,但是卻能使程序簡單化,易于實(shí)現(xiàn),同時(shí)不用隨時(shí)計(jì)算32位的CRC,提高了程序的穩(wěn)定性。在素材文件切換時(shí),如果PMT表需要發(fā)生變化,需要修改PMT表的版本號(hào)。
每一路流都有PAT,假使復(fù)用的路數(shù)為n,如果每一路的PAT都去替換,就會(huì)使得PAT表發(fā)送頻率提升為原來的n倍。MPEG-2規(guī)定,PSI信息傳送的頻率每秒不低于25次,協(xié)議中只規(guī)定了下限,沒有規(guī)定上限,雖然每一路都替換,并不違背協(xié)議,但是很多復(fù)用器和解碼器在PSI信息過多的時(shí)候就會(huì)工作不正常,這是因?yàn)镻SI信息的32位CRC校驗(yàn)很耗時(shí),所以通常只替換其中一路的PAT,其余的都用空包代替。PSI信息合成具體流程如圖4所示。
4.TS流的節(jié)目時(shí)鐘參考值修正
在MPEG-2編碼器中有一個(gè)系統(tǒng)時(shí)鐘,該系統(tǒng)時(shí)鐘用來生成一個(gè)共同的時(shí)序以便音頻/視頻能夠正確地解碼與播放,同時(shí)可以用來指示在采樣瞬間系統(tǒng)時(shí)鐘的瞬時(shí)值[6]。正是由于編碼器中有共同的系統(tǒng)時(shí)鐘,解碼器中的時(shí)鐘可以根據(jù)節(jié)目時(shí)鐘參考(PCR)重新恢復(fù),并通過時(shí)間標(biāo)記的正確使用為解碼器中操作的正確同步提供基準(zhǔn)。
時(shí)鐘處理和碼率有很大的相關(guān)性,某個(gè)時(shí)間段的碼率就是這段時(shí)間的數(shù)據(jù)量與時(shí)鐘差值的比。為了防止在碼率出現(xiàn)波動(dòng)的時(shí)PCR時(shí)鐘差值越界,導(dǎo)致解碼器不能正常工作,復(fù)用后輸出碼率應(yīng)該比所有單路節(jié)目的總碼率稍大。在實(shí)際中,如果真的出現(xiàn)這種情況,為了避免所有節(jié)目不能正常播放,本文采取的方法是停掉其中某一路,這樣降低輸出總碼率中的有效碼率,保證其他節(jié)目正常播放。在這里需要說明的是,MPEG-2中TS流有兩種,一種是恒碼率流,一種是變碼率流,本文研究的復(fù)用是針對(duì)恒碼率流的復(fù)用。
根據(jù)MPEG-2標(biāo)準(zhǔn),TS流中的PCR字段長度為48b, PCR也是另外一種時(shí)間標(biāo)記,是編碼器27MHz時(shí)基的42b采樣值,解碼器利用它來恢復(fù)系統(tǒng)時(shí)鐘并進(jìn)行恰當(dāng)?shù)慕獯a操作,它有兩個(gè)部分組成:一部分以本地參考時(shí)鐘的1/300 (90kHz)為單位,稱為program_clock_reference_base,為33b字段;另外一部分稱為program_clock_reference_extension,是以本地參考時(shí)鐘(27MHz)為單位的9b字段。
(1)
(2)
(3)
其中sysclkfre為系統(tǒng)時(shí)鐘27MHZ。PCR的單位是1 /27M秒,分為兩部分表示。實(shí)際編程中,當(dāng)?shù)玫揭粋(gè)新的PCR值,用式(1)和式 (2) 得到PCR_base ( 33bit) 和PCR_ext ( 9bit)兩部分,填入TS幀中。在輸出碼率恒定的情況下,每一個(gè)TS幀傳輸所用的時(shí)間△PCR值可以通過下式計(jì)算:
(4)
其中nCoderate為輸出的總碼率!鱌CR就是每一個(gè)TS幀的時(shí)間刻度。
系統(tǒng)開始運(yùn)行時(shí),確定一個(gè)PCR的初始值,并為每一路申請(qǐng)一個(gè)計(jì)數(shù)器nCounter變量,計(jì)數(shù)在兩個(gè)PCR幀之間的TS幀數(shù),根據(jù)以下公式計(jì)算新的PCR值:
(5)
式中,PCR_old代表上一個(gè)PCR的值,PCR_new代表當(dāng)前新PCR的值。在得到新的PCR值之后,用公式(1)(2)(3) 計(jì)算出PCR_base和PCR_ext寫入幀中,同時(shí)PCR_old = PCR new,nCounter=0。 nCouter是對(duì)整個(gè)傳輸流而言的,不管TS幀是不是當(dāng)前計(jì)算的這路TS的內(nèi)容,或者空幀,nCounter都要累加。
在MPEG2協(xié)議中,PCR由PCR_base(33bit)和PCR_ext(9bit)表示,總共42bit,當(dāng)PCR的值超過42bit所能表達(dá)的范圍時(shí),需要循環(huán)重新開始。由于PCR和PTS以及DTS的關(guān)系,在重新開始循環(huán)PCR的時(shí)候,一定要將PTS和DTS也重新回0,同時(shí)要將PCR幀中調(diào)整域中的discontinuity_indicator字段置1。
由于市場上的解碼器千差萬別,有的解碼器中并沒有為PCR留足42bit,在這種解碼器中PCR通常會(huì)在解碼器端被提前回0,而PTS和DTS并沒有隨之一起復(fù)位,這就會(huì)造成解碼器的上溢,導(dǎo)致播放不正常。所以在實(shí)際中,本文判斷PCR是否達(dá)到回0的閥值略低于42bit所能表達(dá)的最大值,這樣會(huì)提高對(duì)解碼設(shè)備的適應(yīng)性,同時(shí)不會(huì)造成協(xié)議上的沖突。PCR時(shí)鐘處理的具體流程如圖5所示
5.TS流軟件復(fù)用系統(tǒng)的程序設(shè)計(jì)與測(cè)試結(jié)果分析
通過對(duì)MPEG-2傳輸流應(yīng)用結(jié)構(gòu)的仔細(xì)分析,可以看出MPEG-2傳輸流所傳送的只是彼此獨(dú)立的原始流數(shù)據(jù)和把特定的原始流組合成一個(gè)節(jié)目的PSI信息,并沒有傳送一個(gè)不可分割的真正意義上的節(jié)目,因此在一定程度上保證了TS流軟件復(fù)用程序的可行性。
所設(shè)計(jì)程序并不需要對(duì)組成節(jié)目的原始流進(jìn)行內(nèi)容的處理,不管構(gòu)成某節(jié)目的原始流是音頻還是視頻還是私有數(shù)據(jù),程序所要做的只是改動(dòng)攜帶原始流的傳輸流分組的標(biāo)記信息,并把它發(fā)送到輸出的傳輸流,接著在復(fù)用后的傳輸流中也要發(fā)送該原始流所構(gòu)成的節(jié)目的節(jié)目映射表。與此同時(shí),需要注意的一點(diǎn)是,由于輸入的各個(gè)傳輸流相互獨(dú)立,它們?yōu)楦髯缘墓?jié)目分配的PID、節(jié)目號(hào)之類的標(biāo)志信息很可能會(huì)發(fā)生重復(fù)的情況,所以對(duì)于原始流分組,并不能簡單的轉(zhuǎn)發(fā),因此,程序?qū)楦鱾(gè)傳輸流中的原始流分配新的PID,以及為不同的節(jié)目分配新的節(jié)目號(hào),從而形成一個(gè)新的傳輸流。
程序結(jié)構(gòu)如圖6所示,圖中的每一個(gè)TSProcessor對(duì)象對(duì)應(yīng)著程序系統(tǒng)中的要進(jìn)行復(fù)用的每一個(gè)輸入傳輸流,TSProcessor對(duì)象所包含的輸入模塊負(fù)責(zé)向TSProcessor對(duì)象的處理函數(shù)提供傳輸流數(shù)據(jù)。傳輸流既可以從文件輸入,也可以是內(nèi)存中的一塊緩沖區(qū)的數(shù)據(jù)。這樣適合于復(fù)用實(shí)時(shí)轉(zhuǎn)播的節(jié)目和存在本地硬盤上的節(jié)目。輸出模塊是一個(gè)供所有TSProcessor對(duì)象使用的全局對(duì)象,每個(gè)TSProcessor對(duì)象的線程輪流獲得輸出模塊的控制權(quán),向輸出模塊發(fā)送傳輸流分組數(shù)據(jù)。全局變量區(qū)存儲(chǔ)所有傳輸流的結(jié)構(gòu)信息,以及生成的傳輸流的相關(guān)信息。應(yīng)用系統(tǒng)可以根據(jù)實(shí)際的需要隨意的增減輸入傳輸流的數(shù)目,輸入方式,優(yōu)先級(jí),并且可以在復(fù)用的過程中隨時(shí)插入新的傳輸流,或者刪除掉某正在復(fù)用的傳輸流。
基于以上分析,應(yīng)用VC++開發(fā)環(huán)境設(shè)計(jì)實(shí)現(xiàn)了TS流分析與復(fù)用軟件系統(tǒng)TSAM (Transport Stream Analyzer and Multiplexer),主界面如圖7所示。作者對(duì)復(fù)用系統(tǒng)進(jìn)行設(shè)計(jì)和測(cè)試的硬件平臺(tái)是奔騰M2.9G、512M內(nèi)存。復(fù)用三路3M大小的傳輸流,大約使用了1秒的時(shí)間生成了大約8M字節(jié)大小的傳輸流,平均復(fù)用速率約為40Mbits。復(fù)用九路3M大小的傳輸流,大約使用了5秒的時(shí)間生成了大約30M字節(jié)大小的傳輸流,平均復(fù)用速率約為48Mbits。復(fù)用速率達(dá)到并遠(yuǎn)遠(yuǎn)超過了一路傳輸碼流的處理速度,由于現(xiàn)代PC性能的強(qiáng)勁,得到了比較理想的試驗(yàn)結(jié)果。另一方面,由于復(fù)用系統(tǒng)的輸入輸出都是對(duì)文件操作,硬盤的讀寫速度對(duì)整個(gè)系統(tǒng)的性能也有影響。在實(shí)際的應(yīng)用系統(tǒng)中,輸入都是不斷刷新的內(nèi)存緩沖區(qū),輸出是輸出模塊的緩沖區(qū),由于數(shù)據(jù)的操作都是在內(nèi)存中進(jìn)行,并不涉及硬盤等機(jī)械裝置的運(yùn)作,還會(huì)進(jìn)一步提高系統(tǒng)的性能。
6.結(jié)論
本文分析了多路數(shù)字電視節(jié)目系統(tǒng)級(jí)復(fù)用原理,并對(duì)數(shù)字電視節(jié)目專用信息PSI的提取和重構(gòu)及系統(tǒng)層節(jié)目時(shí)間參考PCR值的修正等關(guān)鍵技術(shù)進(jìn)行研究,提出了進(jìn)行軟件復(fù)用的具體方法,最后在Windows平臺(tái)上,應(yīng)用VC++開發(fā)環(huán)境設(shè)計(jì)實(shí)現(xiàn)了TS流分析與復(fù)用軟件系統(tǒng)TSAM,測(cè)試結(jié)果表明軟件復(fù)用速率達(dá)到并遠(yuǎn)遠(yuǎn)超過了一路傳輸碼流的處理速度,該軟件復(fù)用方案是有效可行性的。用軟件實(shí)現(xiàn)傳輸流的復(fù)用,可以節(jié)約硬件成本,降低系統(tǒng)的開發(fā)費(fèi)用;且算法全部軟件實(shí)現(xiàn),可移植性高,具有良好的擴(kuò)展性,可以方便靈活的加入數(shù)字電視節(jié)目指南等輔助信息。
大連捷成實(shí)業(yè)發(fā)展有限公司 http://www.dlunt.com
更多相關(guān): AV集成
©版權(quán)所有。未經(jīng)許可,不得轉(zhuǎn)載。