1. 程式人生 > >TS碼流分析

TS碼流分析

一、TS流概述
ES流(Elementary Stream,基本流):數字電視各組成部分編碼後所形成的直接表示基本元素內容的流,包含視訊、音訊或資料的連續碼流。

PES流(Paketized Elementary Stream,打包基本碼流):是將基本的碼流ES流根據需要分成長度不等的資料包,並加上包頭就形成了打包的基本碼流PES流。

PS (Program Stream,節目流):將一個節目的多個組成部分按照它們之間的互相關係進行組織並加入各組成部分關係描述後的碼流。PS流是一種多路複用數字音訊、視訊等的封裝容器,它一個或多個具有共同的時間基準的PES流合併成一個整體流,主要用於節目儲存。其包長不固定,且較長,一旦失去同步資訊,接收機無法確定下一包的同步位置,會造成失步,導致嚴重的資訊丟失。PS流適用於誤碼小、通道較好的環境,如演播室、家庭環境和儲存介質中。

TS流(Transport Stream,傳輸流):是將一個節目的多個組成部分按照它們之間的互相關係進行組織並加入各組成部分關係描述和節目組成資訊,並進一步封裝成傳輸包後的碼流。TS流是將視訊、音訊、PSI等資料打包成傳輸包進行傳送。主要用於節目傳輸。TS的傳輸包長度固定,一般為188位元組。

TS流和PS流是MPEG-2標準中規定的兩種輸出碼流。TS格式中,從視訊流的任意一片斷開始都可以獨立解碼,而PS格式不可以。由於TS流具備較強的抵抗傳輸誤碼的能力,因此目前在傳輸媒體中進行傳輸的MPEG-2碼流基本上都採用了TS流的包格式。

TS流的播放:播放前將TS流檔案的字尾名該為.mpg或者.mpeg,用可以直接播放MPEG-TS流的播放器(一般的播放器都可以)開啟播放即可。

TS流的優點:
1、動態頻寬分配:由於TS的傳輸包長度是固定的,因此可過PID可以將規定的通道總頻帶在視訊、音訊和資料資訊見進行實時的、靈活的分配。利用這一特性,可在廣播付費節目前實時地將解金鑰匙插入到TS流中送給廣大使用者。

2、可分級性:允許一個複用的傳輸碼流與其他視音訊基本碼流進行二次複用,生產佔用頻帶給寬的更高一級的TS流。
3、可擴充套件性
4、抗干擾性
5、接收機成本低廉

TS流的形成過程:
1、 壓縮【顯示單元】產生【進入單元】,連續的【進入單元】組成一個基本碼流。
2、 對ES(基本碼流)進行打包形成PES。
3、 在PES包中加入定時資訊(PTS/DTS)。
4、 將PES包內容分配到一系列固定長度的傳輸包中。
5、 在傳輸包中加入定時資訊(PCR)。
6、 在傳輸包中加入節目專用資訊(PSI) 。
7、 連續輸出傳輸包形成具有恆定位元率的MPEG-TS流。

二、TS流傳輸包(簡稱TS包)結構分析
MPEG-2中規定TS傳輸包的長度為188 位元組。但通訊媒介會為包新增錯誤校驗位元組,從而有了不同於188位元組的包長。例如:
DVB 規定中,使用204位元組作為包長:1、通過調製器時,在每個傳輸包後增加了16 位元組的裡德所羅門前向糾錯碼,因而形成了204位元組的資料包。調製後總存在204 位元組的資料包。2、調製之前存複用器插入RS碼或虛構
的RS碼。

ATSC規定中,使用208位元組作為包長:新增20 位元組的 RS(Reed-Solomon)前向糾錯碼。與DVB不同,ATSC規定RS碼只能出現在調製的TS流中。

所有的TS包都分為包頭和淨荷部分。TS包中可以填入很多東西(填入的東西都是填入到淨荷部分),有:視訊、音訊、資料(包括PSI、SI以及其它任何形式的資料)。

1、TS包包頭
TS包的包頭提供關於傳輸方面的資訊:同步、有無差錯、有無加擾、PCR(節目參考時鐘)等標誌。TS包的包頭長度不固定,前32位元(4個位元組)固定,後面可能跟有自適應欄位(適配域)。32個位元(4個位元組)是最小包頭。
sync_byte (同步位元組):固定為0100 0111 (0x47);該位元組由解碼器識別,使包頭和有效負載可相互分離。
transport_error_indicator(傳輸錯誤指示):‘1’表示在相關的傳輸包中至少有一個不可糾正的錯誤位。當被置1後,在錯誤被糾正之前不能重置為0。
payload_unit_start_indicator(開始指示):為1時,在前4個位元組之後會有一個調整位元組,其的數值為後面調整欄位的長度length。因此有效載荷開始的位置應再偏移1+[length]個位元組。

transport_priority(傳輸優先順序):‘1’表明優先順序比其他具有相同PID 但此位沒有被置‘1’的分組高。
PID:指示儲存與分組有效負載中資料的型別。PID 值 0x0000—0x000F 保留。其中0x0000為PAT保留;0x0001為CAT保留;0x1fff為分組保留,即空包。

transport_scrambling_control(加擾控制):表示TS流分組有效負載的加密模式。空包為‘00’,如果傳輸包包頭中包括調整欄位,不應被加密。
adaptation_field_control(適配域控制):表示包頭是否有調整欄位或有效負載。‘00’為ISO/IEC未來使用保留;‘01’僅含有效載荷,無調整欄位;‘10’ 無有效載荷,僅含調整欄位;‘11’ 調整欄位後為有效載荷,調整欄位中的前一個位元組表示調整欄位的長度length,有效載荷開始的位置應再偏移[length]個位元組。空包應為‘10’。
continuity_counter(連續性計數器):隨著每一個具有相同PID的TS流分組而增加,當它達到最大值後又回覆到0。範圍為0~15。

適配域:

2、TS包淨荷部分
TS包中淨荷所傳輸的資訊包括兩種型別:
1、視訊、音訊的PES包以及輔助資料;

2、節目專用資訊PSI。

當然,TS包也可以是空包。空包用來填充TS流,可能在重新進行多路複用時被插入或刪除。

在系統複用時,視訊、音訊的ES流需進行打包形成視訊、音訊的 PES流,輔助資料(如圖文電視資訊)不需要打成PES包。PES包非定長,音訊的PES包小於等於64K,視訊的一般為一幀一個PES包。一幀圖象的PES包通常要由許多個TS包來傳輸。MPEG-2中規定,一個PES包必須由整數個TS包來傳輸。如果承載一個PES包的最後一個TS包沒能裝滿,則用填充位元組來填滿;當下一個新的PES包形成時,需用新的TS包來開始傳輸。

節目專用資訊PSI(Program Specific Information)

管理各種型別的TS資料包,需要有些特殊的TS包來確立各個TS資料包之間的關係。這些特殊的TS包裡所包含的資訊就是節目專用資訊。在不同的標準中它有不同的名字:

• MPEG-2中稱為PSI;

• DVB標準根據實際需要,對PSI擴充套件,稱為SI資訊;

• ATSC標準中為PSIP資訊

MPEG-2中,規定的對PSI資訊的描述方法有以下幾種:

• 1、表Table: 節目資訊的結構性的描述;

–節目關聯表Program Association Table (PAT) 0x0000

–節目對映表Program Map Tables (PMT)

–條件接收表Conditional Access Table (CAT) 0x0001

–網路資訊表Network Information Table(NIT) 0x0010

–傳送流描述表Transport Stream Description Table (TSDT)

• 2、節Section: 將表格的內容對映到TS流中;
專用段 Private_ section
• 3、描述符Descriptor:提供有關節目構成(視訊流、音訊流、語言、層次、系統時鐘和位元速率等多方面)的資訊;
ITU-T Rec.H.222.0|ISO /IEC 13818-1 中定義的 PSI表可被分成一段或多段置於傳輸流分組中。一段就是一個語法結構,用來將 ITU-T Rec.H.222.0|ISO /IEC 13818-1 中定義的 PSI表對映到傳輸流分組中。

PAT表
TS流中包含一個或者多個PAT表。PAT表由PID為0x0000的TS包傳送,其作用是為複用的每一路傳送流提供出所包含的節目和節目編號,以及對應節目的PMT的位置即PMT的TS包的PID值,同時還提供NIT的位置,即NIT的TS包的PID的值。

table_id:固定為0x00,標誌該表是PAT表。

section_syntax_indicator:段語法標誌位,固定為1。

section_length:表示這個位元組後面有用的位元組數,包括CRC32。節目套數:(section length-9)/4

transport_stream_id:16位欄位,表示該TS流的ID,區別於同一個網路中其它多路複用流。

version_number:表示PAT的版本號。

current_next_indicator:表示傳送的PAT表是當前有效還是下一個PAT有效。

section_number:表示分段的號碼。PAT可能分為多段傳輸,第一段為0,以後每個分段加1,最多可能有256個分段。

last_section_number:表示PAT最後一個分段的號碼。

Program number:節目號

network_PID:網路資訊表(NIT)的PID,節目號為0時對應ID為network_PID。

Program map PID:節目對映表(PMT)的PID號,節目號為大於等於1時,對應的ID為program_map_PID。一個PAT中可以有多個program_map_PID。

CRC_32:32位欄位,CRC32校驗碼Cyclic RedundancyCheck。

PMT表

PMT在傳送流中用於指示組成某一套節目的視訊、音訊和資料在傳送流中的位置,即對應的TS包的PID值,以及每路節目的節目時鐘參考(PCR)欄位的位置。
Table id :固定為0x02,標誌該表是PMT 表。

Section syntax indicator:對於PMT表,設定為1 。

Section length:表示這個位元組後面有用的位元組數,包括CRC32 。

Program number:它指出該節目對應於可應用的Program map PID 。

Version number:指出PMT 的版本號。

Current next indicator:當該位置’1’時,當前傳送的Program map section可用;當該位置’0’時,指示當前傳送的Program map section不可用,下一個TS流的Programmap section 有效。

Section number:總是置為0x00(因為PMT表裡表示一個service的資訊,一個section 的長度足夠)。

Last section number:該域的值總是0x00 。

PCR PID:節目中包含有效PCR欄位的傳送流中PID 。

Program info length:12bit域,前兩位為00。該域指出跟隨其後對節目資訊的描述的byte 數。

Stream type:8bit域,指示特定PID的節目元素包的型別。該處PID由elementary PID 指定。下表所示為對應原始流的型別。
DVD節目中的MPEG2格式,TS的全稱則是Transport Stream。MPEG-TS主要應用於實時傳送的節目,比如實時廣播的電視節目。

TS即是”Transport Stream”的縮寫。它是分包傳送的,每一個包長為188位元組。在TS流裡可以填入很多型別的資料,如視訊、音訊、自定義資訊等。他的包的結構為,包頭為4個位元組,負載為184個位元組。

制定TS流標準的機構就規定了一些資料結構來定義。比如: PSI(Program Specific Information)表,所以解析起來就像這樣: 先接收一個負載裡為PAT的資料包,在整個資料包裡找到一個PMT包的ID。然後再接收一個含有PMT的資料包,在這個資料包裡找到有關填入資料型別的ID。之後就在接收到的TS包裡找含有這個ID的負載內容,這個內容就是填入的資訊。根據填入的資料型別的ID的不同,在TS流複合多種資訊是可行的。關鍵就是找到標識的ID號。

1 seg 是巴西,日本等用的地面電視的一個TS碼流標準。

DVB