本文分析了多路數字電視節目系統級復用原理,并對數字電視節目專用信息PSI的提取和重構及系統層節目時間參考PCR值的修正等關鍵技術進行研究,提出了進行軟件復用的具體方法,最后在Windows平臺上,應用VC++開發環境設計實現了TS流分析與復用軟件系統TSAM,測試結果表明軟件復用速率達到并遠遠超過了一路傳輸碼流的處理速度,該軟件復用方案是有效可行性的。用軟件實現傳輸流的復用,可以節約硬件成本,降低系統的開發費用;且算法全部軟件實現,可移植性高,具有良好的擴展性,可以方便靈活的加入數字電視節目指南等輔助信息。
1.引言 TPF FPT
數字圖像通信的最廣泛也是最常見的應用就是數字電視廣播系統[1],與此對應的 DVB 標準的建立更是加速了數字電視廣播系統的大規模應用。DVB 標準選定 ISO JIEC MPEG-2 標準作為音頻及視頻的編碼壓縮方式,信源編碼進行了統一,隨后對 MPEG-2 碼流進行打包形成 TS流(transport stream),進行多個傳輸流復用,最后通過衛星、有線電視等不同媒介傳輸方式進行傳輸。
對多個傳輸流進行復用的意義在于復用后的傳輸流只占用一個物理的傳輸信道,傳輸流中的每個節目所占用的是傳輸流提供的虛擬信道。在解碼器端,只需要一套固定的接收設備,對不同節目的選擇只是在傳輸流中選擇不同的原始碼流,這大大簡化了接收機的實現,節省了成本,提高了靈活性,而且根據該標準定義,解碼器的系統時鐘與調制解調器的時鐘是完全獨立的。這使得在實現這兩個子系統彼此功能時是完全分開的,因此接口變得很簡單。
在數字電視節目制作及發送時,對多路節目的復用,由于一般的計算機很難處理幾十兆到幾百兆碼率的碼流,所以,目前大部分的復用器都是用硬件實現的,但其價格昂貴[2,3]。然而,隨著計算機速度越來越快,在多 CPU的服務器上,完全能夠實現多路節目的實時軟件復用。與硬件復用相比,軟件復用具有靈活性高,開發成本低的優點。在軟件復用實現方案中,服務器從衛星電視或其它片源中實時采集 TS流,經過分析和過濾將所選擇的基本流復用成一路 TS 流,然后通過普通的 TS 流播出卡發送出去。論文分析多路 TS 流復用原理,針對 TS 流中的信息提取和節目專用信息 PSI (program specific information)合成,及軟件復用中的節目時鐘參考 PCR ( program clock reference)的修正等問題進行研究,提出了進行軟件復用的 具體方法,最后在 Windows 平臺上設計并實現多路 TS流的軟件復用。
2.TS流的系統級復用
數字電視節目的復用包括兩個階段, 對音/視頻 PES包的節目復用和對 TS流的系統復用[4]。本文研究第二個階段即 TS系統級復用,將多個單路的 TS流合成一個多節目 TS流。數字電視系統級復用是數字電視系統的關鍵技術之一, 其中數字電視節目專用信息 PSI 的提取和重構及系統層節目時間參考 PCR 值的修正,是復用器的兩項關鍵技術。
基于 MPEG-2 的 TS 流多路數字電視節目 TS 流系統級復用原理如圖 1 所示。當多路 TS 流復用成一路 TS流時,首先將對各路 TS流的 PSI 進行搜集并分析其碼流,得到各路 TS碼流中相應的視頻、音頻、數據信息的碼率、對各路節目的包標識 PID, 數字電視節目專用信息PSI,節目時間參考 PCR 等信息進行處理,丟棄各路原有的 PSI 信息。當出現兩路 TS 流中的 PID發生沖突時, 需要修改一路或者多路 TS流中某一數據流的 PID(即復用器需要對修改了 PID的視頻/音頻包或其他數據包進行 PID更新)。可以看到,無論是否出現 PID沖突,復用器都需要重構 PSI 信息,其濾波的處理過程如圖 2 所示。對不同節目的 PID 值進行修改后,與本地產生的這類數據重新整合為復用后新的 PSI 等系統級控制信息,同時插入符合 DVB-SI 規范的業務信息, 并在攜帶有調整字段的 TS包中, 判斷帶有 PCR標志位字段的值,如果該值為“1”,那么在該 TS 流離開復用器的時刻,需要對 TS 包中的 PCR 值做相應的修正或重新插入新的節目時鐘參考,具體方法將在后面詳細介紹。
3.TS流節目專用信息的提取與重構
數字電視節目專用信息 PSI 描述 TS流的組成結構,在 MPEG-2 系統層中極為重要,一個有多路節目和私有數據的 TS 流,需要 PSI信息將每一路節目的音視頻對應起來[5]。PSI 信息將 TS 流中的內容描述成一個樹狀的結構,如圖 3 所示。在 TS流中可以復用多個節目,每個節目又可以包含多個基本碼流(通常是單個視頻流、多個音頻流)。DVB 系統沿用 MPEG-2 的節目專用信息 PSI來確定傳輸的節目和包標識 PID 的關系以及節目的組成結構等情況。 PSI 主要包括以下四個表:節目關聯表(PAT: Program AssociationTable)、條件訪問表(CAT: Conditional Access Table)、節目映射表(PMT: Program Map Table)、網絡信息表
NIT: Network Information Table),本文需要涉及到節目關聯表 PAT 和節目映射表 PMT。
替換。首先根據輸入流的數目和預占的頻道號,在一開始動態生成 PAT 表,PMT 表則在最初計算好,生成靜態的 PMT 對應替換即可,同時根據每個 PMT_PID找到實現 計算好的 PMT 表,將其中的視音頻 PID 找到,作為將要替換的視音頻 PID。之所以在一開 始生成或者直接使用靜態表是因為 PAT 和 PMT有 32 位 CRC,無法完成實時計算。

在傳輸流處理過程中,先分析每一個讀入的 TS 幀,根據 PID的不同,選擇替換的內容,如果是 PAT 和 PMT 表,則整個 TS幀替換,如果是視音頻幀,則只替換 PID,替換之后,應該對連續計數器加一。

中 TS流有兩種,一種是恒碼率流,一種是變碼率流,本文研究的復用是針對恒碼率流的復用。

其中 sysclkfre 為系統時鐘 27MHZ。PCR 的單位是 1 /27M 秒,分為兩部分表示。實際編程中,當得到一個新的 PCR 值,用式(1)和式 (2) 得到 PCR_base ( 33bit) 和 PCR_ext ( 9bit)兩 部分,填入 TS 幀中。在輸出碼率恒定的情況下,每一個 TS 幀傳輸所用的時間△PCR 值可以通過下式計算:

其中 nCoderate 為輸出的總碼率。△PCR 就是每一個 TS幀的時間刻度。

式中,PCR_old 代表上一個 PCR 的值,PCR_new 代表當前新 PCR 的值。在得到新的 PCR 值之后,用公式(1)(2)(3) 計算出PCR_base和 PCR_ext 寫入幀中, 同時 PCR_old = PCR new, nCounter=0。 nCouter 是對整個傳輸流而言的,不管TS 幀是不是當前計算的這路 TS 的內容,或者空幀,nCounter都要累加。
所能表達的范圍時,需要循環重新開始。由于 PCR 和 PTS以及 DTS的關系,在 重新開始循環 PCR 的時候,一定要將 PTS 和 DTS 也重新回0,同時要將 PCR 幀中調整域 中的 discontinuity_indicator字段置 1。


基于以上分析, 應用 VC++開發環境設計實現了 TS流分析與復用軟件系統 TSAM (Transport Stream Analyzer and Multiplexer),主界面如圖 7 所示。作者對復用系統進行設計和測試的硬 件平臺是奔騰 M2.9G、512M 內存。復用三路 3M 大小的傳輸流,大約使用了 1 秒的時間生 成了大約 8M 字節大小的傳輸流,平均復用速率約為 40Mbits。復用九路 3M 大小的傳輸流, 大約使用了 5 秒的時間生成了大約 30M 字節大小的傳輸流,平均復用速率約為 48Mbits。復 用速率達到并遠遠超過了一路傳輸碼流的處理速度,由于現代 PC 性能的強勁,得到了比較理想的試驗結果。另一方面,由于復用系統的輸入輸出都是對文件操作,硬盤的讀寫速度對整個系統的性能也有影響。在實際的應用系統中,輸入都是不斷刷新的內存緩沖區,輸出是輸出模塊的緩沖區,由于數據的操作都是在內存中進行,并不涉及硬盤等機械裝置的運作,還會進一步提高系統的性能。

6.結論