天天看點

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碼流标準。

https://en.wikipedia.org/wiki/1seg

http://blog.sina.com.cn/s/blog_6ca8ed170100qjvd.html

DVB

http://blog.163.com/[email protected]/blog/static/119257987201351231534725/

繼續閱讀