DVB系統中多路TS流的軟件復用關鍵技術及實現
PMT 表替換后,每一路流中原有的視音頻幀的 PID 應與其對應替換的 PMT 表中的視音頻 PID 保持一致,即需要進行 PID 重映射。 在傳輸流處理過程中,先分析每一個讀入的 TS 幀,根據 PID的不同,選擇替換的內容,如果是 PAT 和 PMT 表,則整個 TS幀替換,如果 是視音頻幀,則只替換 PID,替換之后,應該對連續計數器加一。
需要注意的是,單路傳輸流的構成并不一樣,有的傳輸流是一路音頻一路視頻,有的是一路 視頻兩路音頻;有的 PCR 的 PID與視頻的 PID相同,有的則不同。所以,應該為每一種情 況都準備一張 PMT 表,在新素材到來時,根據分析出來的 PSI 信息的情況,決定選用那一 張 PMT 表。這樣作雖然要創建很多靜態表,增加了系統內存的占用,但是卻能使程序簡單 化,易于實現,同時不用隨時計算 32 位的 CRC,提高了程序的穩定性。在素材文件切換時, 如果 PMT 表需要發生變化,需要修改 PMT 表的版本號。
每一路流都有 PAT,假使復用的路數為 n,如果每一路的 PAT 都去替換,就會使得 PAT 表 發送頻率提升為原來的 n 倍。MPEG-2 規定,PSI 信息傳送的頻率每秒不低于 25 次,協議 中只規定了下限,沒有規定上限,雖然每一路都替換,并不違背協議,但是很多復用器和解 碼器在 PSI 信息過多的時候就會工作不正常,這是因為 PSI 信息的 32位 CRC 校驗很耗時, 所以通常只替換其中一路的 PAT, 其余的都用空包代替。 PSI 信息合成具體流程如圖 4 所示。
4.TS流的節目時鐘參考值修正
在 MPEG-2 編碼器中有一個系統時鐘,該系統時鐘用來生成一個共同的時序以便音頻/視頻 能夠正確地解碼與播放,同時可以用來指示在采樣瞬間系統時鐘的瞬時值[6]。正是由于編 碼器中有共同的系統時鐘,解碼器中的時鐘可以根據節目時鐘參考(PCR)重新恢復,并通 過時間標記的正確使用為解碼器中操作的正確同步提供基準。
時鐘處理和碼率有很大的相關性,某個時間段的碼率就是這段時間的數據量與時鐘差值的比。為了防止在碼率出現波動的時 PCR 時鐘差值越界,導致解碼器不能正常工作,復用后 輸出碼率應該比所有單路節目的總碼率稍大。在實際中,如果真的出現這種情況,為了避免 所有節目不能正常播放,本文采取的方法是停掉其中某一路,這樣降低輸出總碼率中的有效 碼率,保證其他節目正常播放。在這里需要說明的是,MPEG-2 中 TS流有兩種,一種 是恒碼率流,一種是變碼率流,本文研究的復用是針對恒碼率流的復用。
根據 MPEG-2 標準,TS流中的 PCR字段長度為 48b, PCR 也是另外一種時間標記,是編碼 器 27MHz 時基的 42b 采樣值,解碼器利用它來恢復系統時鐘并進行恰當的解碼操作,它有 兩個部分組成:一部分以本地參考時鐘的 1/300 (90kHz) 為單位,稱為 program_clock_reference_base ,為 33b 字段;另外一部分稱為
program_clock_reference_extension,是以本地參考時鐘(27MHz)為單位的 9b字段。
其中 sysclkfre 為系統時鐘 27MHZ。PCR 的單位是 1 /27M 秒,分為兩部分表示。實際編程中,當得到一個新的 PCR 值,用式(1)和式 (2) 得到 PCR_base ( 33bit) 和 PCR_ext ( 9bit)兩 部分,填入 TS 幀中。在輸出碼率恒定的情況下,每一個 TS 幀傳輸所用的時間△PCR 值可以通過下式計算:
其中 nCoderate 為輸出的總碼率。△PCR 就是每一個 TS幀的時間刻度。
系統開始運行時,確定一個 PCR 的初始值,并為每一路申請一個計數器 nCounter變量,計數在兩個 PCR 幀之間的 TS幀數,根據以下公式計算新的 PCR值:
式中,PCR_old 代表上一個 PCR 的值,PCR_new 代表當前新 PCR 的值。在得到新的 PCR 值之后, 用公式(1)(2)(3) 計算出 PCR_base和 PCR_ext 寫入幀中, 同時 PCR_old = PCR new, nCounter=0。 nCouter 是對整個傳輸流而言的,不管 TS 幀是不是當前計算的這路 TS 的內 容,或者空幀,nCounter都要累加。
在 MPEG2 協議中,PCR 由 PCR_base(33bit)和 PCR_ext(9bit)表示,總共 42bit,當 PCR的值 超過 42bit 所能表達的范圍時,需要循環重新開始。由于 PCR 和 PTS以及 DTS的關系,在 重新開始循環 PCR 的時候,一定要將 PTS 和 DTS 也重新回 0,同時要將 PCR 幀中調整域 中的 discontinuity_indicator字段置 1。
由于市場上的解碼器千差萬別, 有的解碼器中并沒有為PCR留足42bit, 在這種解碼器中PCR 通常會在解碼器端被提前回 0,而 PTS 和 DTS 并沒有隨之一起復位,這就會造成解碼器的 上溢,導致播放不正常。所以在實際中,本文判斷 PCR 是否達到回 0 的閥值略低于 42bit 所能表達的最大值,這樣會提高對解碼設備的適應性,同時不會造成協議上的沖突。PCR 時鐘處理的具體流程如圖 5 所示.
5.TS流軟件復用系統的程序設計與測試結果分析
通過對 MPEG-2 傳輸流應用結構的仔細分析,可以看出 MPEG-2 傳輸流所傳送的只是彼此 獨立的原始流數據和把特定的原始流組合成一個節目的 PSI 信息, 并沒有傳送一個不可分割 的真正意義上的節目,因此在一定程度上保證了 TS流軟件復用程序的可行性。
所設計程序并不需要對組成節目的原始流進行內容的處理, 不管構成某節目的原始流是音頻 還是視頻還是私有數據,程序所要做的只是改動攜帶原始流的傳輸流分組的標記信息,并把 它發送到輸出的傳輸流, 接著在復用后的傳輸流中也要發送該原始流所構成的節目的節目映 射表。與此同時,需要注意的一點是,由于輸入的各個傳輸流相互獨立,它們為各自的節目 分配的 PID、節目號之類的標志信息很可能會發生重復的情況,所以對于原始流分組,并不 能簡單的轉發,因此,程序將為各個傳輸流中的原始流分配新的 PID,以及為不同的節目分配新的節目號,從而形成一個新的傳輸流。
評論