MPEG-2 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個字節)是最小包頭。包頭的結構固定如下:


typedef struct TS_packet_header

{

unsigned sync_byte : 8;

unsigned transport_error_indicator : 1;

unsigned payload_unit_start_indicator : 1;

unsigned transport_priority : 1;

unsigned PID : 13;

unsigned transport_scrambling_control : 2;

unsigned adaption_field_control : 2;

unsigned continuity_counter : 4;

} TS_packet_header;

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。

適配域:


2TS包淨荷部分

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 指定。下表所示爲對應原始流的類型。

原始流的類型

描述

0x00

ITU-T|ISO/IEC保留

0x01

ISO/IEC 11172視頻

0x02

ITU-T Rec.H.262|ISO/IEC 13818-2視頻

0x03

ISO/IEC 11172音頻

0x04

ISO/IEC 13818-3音頻

0x05

ITU-T Rec.H.222.0|ISO/IEC 13818-1私用分段

0x06

含有私用數據的ITU-T Rec.H.222.0|ISO/IEC 13818-1分組

0x07

ISO/IEC 13522 MHEG

0x08

ITU-T Rec.H.222.0|ISO/IEC 13818-1 DSM CC

0x09

ITU-T Rec.H.222.0|ISO/IEC 13818-1/11172-1

0x10 ~ 0x7F

ITU-T Rec.H.222.0|ISO/IEC 13818-1保留

0x80 ~ 0xFF

  用戶私有


原文地址:http://blog.sina.com.cn/s/blog_6ca8ed170100qjvd.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章