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