新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > DVB系統中多路TS流的軟件復用關鍵技術及實現

        DVB系統中多路TS流的軟件復用關鍵技術及實現

        作者: 時間:2012-05-29 來源:網絡 收藏

        PMT 表替換后,每一路流中原有的視音頻幀的 PID 應與其對應替換的 PMT 表中的視音頻 PID 保持一致,即需要進行 PID 重映射。 在傳輸流處理過程中,先分析每一個讀入的 幀,根據 PID的不同,選擇替換的內容,如果是 PAT 和 PMT 表,則整個 幀替換,如果 是視音頻幀,則只替換 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.jpg

        4.流的節目時鐘參考值修正

        在 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字段。

        g1.jpg

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

        g2.jpg

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

        系統開始運行時,確定一個 PCR 的初始值,并為每一路申請一個計數器 nCounter變量,計數在兩個 PCR 幀之間的 TS幀數,根據以下公式計算新的 PCR值:

        g3.jpg

        式中,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.jpg

        5.TS流復用系統的程序設計與測試結果分析

        通過對 MPEG-2 傳輸流應用結構的仔細分析,可以看出 MPEG-2 傳輸流所傳送的只是彼此 獨立的原始流數據和把特定的原始流組合成一個節目的 PSI 信息, 并沒有傳送一個不可分割 的真正意義上的節目,因此在一定程度上保證了 TS流復用程序的可行性。

        所設計程序并不需要對組成節目的原始流進行內容的處理, 不管構成某節目的原始流是音頻 還是視頻還是私有數據,程序所要做的只是改動攜帶原始流的傳輸流分組的標記信息,并把 它發送到輸出的傳輸流, 接著在復用后的傳輸流中也要發送該原始流所構成的節目的節目映 射表。與此同時,需要注意的一點是,由于輸入的各個傳輸流相互獨立,它們為各自的節目 分配的 PID、節目號之類的標志信息很可能會發生重復的情況,所以對于原始流分組,并不 能簡單的轉發,因此,程序將為各個傳輸流中的原始流分配新的 PID,以及為不同的節目分配新的節目號,從而形成一個新的傳輸流。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 吴堡县| 安徽省| 饶平县| 龙山县| 阜新市| 绍兴县| 南涧| 措勤县| 平山县| 万全县| 淮滨县| 黎城县| 报价| 山丹县| 垦利县| 缙云县| 瑞昌市| 麻栗坡县| 洛阳市| 丹凤县| 祁门县| 犍为县| 青河县| 无棣县| 思南县| 盐山县| 宁武县| 马关县| 江华| 铁力市| 获嘉县| 浠水县| 弋阳县| 禹州市| 江永县| 射阳县| 延吉市| 霍林郭勒市| 许昌县| 旅游| 壤塘县|