第二章 多媒體串流系統相關背景知識概論
2.2 多媒體檔案編碼格式介紹
2.2.1 MPEG-2 System Introduction
MPEG-2 Standards 是由 Moving Picture Expert Group(MPEG)所 制定,並由International Standards Organization (ISO)所出版。目前 共分成九個部份列於table2.2;在 ISO 13818-1[7]中定訂了兩種
Multiplexing 模式: Program stream 與 Transport stream,如 figure2.3 所示。Multiplexing 是指將壓縮過後的視訊流、音訊流、使用者資訊與 控制資料…等結合成一數據流,讓此數據流可以適用於傳輸或是儲存。
Table2.2 MPEG-2 Standards -ISO/IEC 13818
編號 文件內容
1 System 2 Video 3 Audio
4 Conformance testing 5 Software simulation 6 Extensions for DSM-CC 7 Advanced Audio Coding (AAC)
9 Extension for real time interface for systems decoders
10 Conformance extensions for Digital Storage Media Command and Control (DSM-CC)
Figure 2.3 MPEG-2 System Model
2.2.1.1MPEG-2 Program Stream
由 figure2.4 可以得知,一個完整的 Program Stream (PS)是由多個 pack 所組成的。一個完整的 pack packet 會包有 system header 與多個 elementary stream,但 system header 不一定會存在。而一個
elementary stream 在加上一個適當的 header 後形成 PES (Packetized Elementary Stream)。
Figure 2.4 Relationship between PES packets and Program
每一個PS 中的所有 PES 都具有共同的時間基準(time base),且只 能包含一個節目,通常是由一個視訊流搭配兩個音訊流所構成;由於這 些PES 享有共同的時間基準,也才能夠同步地對視訊流和音訊流進行 解碼動作。PS 封包的大小並不固定,也因為不同長度的特性,使得 PS 並不適合用於需要錯誤校正的系統,另外也由於其低通訊負載的特性,
在一些如CD-ROM 等無錯誤或近似無錯誤的環境中是相當適合的。
依據 ISO13818-1[7]中所定義,PES 組合成一個 PS 前必須要在加 上Pack header 和 System header,每一個 header 都是由一列固定的起 始碼開始,起始碼是一串特殊的編碼值,其可以區分出資料流的每層架 構,而PS 可視為總共分成三個階層,最外層為 Pack header 是由 pack_start_code:0x000001BA 開始,而第二層 System header 則是由 system_header_start_code:0x000001BB 開始,且在 System header 中的stream_id 欄位會定義此一 PS 的視訊流和音訊流的類型。最裡層 的PES header 開始於 packet_start_code_prefix:0x00000001,接在 PES 起始碼後的欄位為 stream_id 和 PES_packet_length,如 figure2.4 中的(d)所示;其中 stream_id 所裝載的為此 PES 的 payload 類型資 訊,從table2.3[7]中可以知道,當 stream_id 的值在 0xC0~0xDF 間 payload 為 audio stream,如果位於 0xE0~0xEF 間的話 payload 則是 video stream。
PES header 中的 stream_id 欄位除了告訴解碼器其 payload data 的資料流為視訊或是音訊外,它還必須要告訴解碼器此資料流的編碼格 式,舉例來說:當 PES header 中的 stream_id=0xE0 時,表示此一 PES 所攜帶的payload data 為視訊流,編碼方式為 MPEG1 或是 MPEG2;
如果PES header 的 stream_id=0xBC,表示這個 PES 為 program
stream map,它所挾帶 stream_type 和 elementary_stream_id 這兩個 欄位的訊息可以告知解碼器這一個PS 中的 PES 彼此之間的關係,假設 program_stream_map 的 elementary_stream_id=0xE0,stream_type 為16,依據 Table2.4[7]可以知道 stream_type 為 16 為保留型別,定義 為mpeg-4 video codec,因此只要是 PES header 中的 stream_id 為 0xE0 的話,代表此視訊流編碼格式為 mpeg-4。
Table 2.3 [7] Stream_id assignments Stream_id Stream coding
1011 1100 Program_stream_map 1011 1101 Private_stream_1 1011 1110 Paddinf_stream
1011 1111 Private_stream_2
110x xxxx ISO/IEC 13818-3 or ISO/IEC 11172-3 audio stream 1110 xxxx ITU-T Rec.H.262│ISO/IEC 13818-2 or ISO/IEC
11172-3 video stream 1111 0000 ECM_stream
1111 0001 EMM_stream
1111 0010 ITU-T Rec.H.222.0│ISO/IEC 13818-1 Annex A or ISO/IEC 13818-6 DSMCC stream
1111 0011 ISO/IEC_13522_stream 1111 0100 ITU-T Rec.H.222│type A
1111 0101 ITU-T Rec.H.222│type B 1111 0110 ITU-T Rec.H.222│type C 1111 0111 ITU-T Rec.H.222│type D 1111 1000 ITU-T Rec.H.222│type E
1111 1001 Ancillary_stream 1111(1010-1110) reserved data stream
1111 1111 program_stream_directory
Table 2.4 Stream type assignment (program stream map) Stream_id Description
0x00 ITU-T│ISO/IEC Reserved 0x01 ISO/IEC 11172 video
0x02 ITU-T Rec.H.262│ISO/IEC 13818-2 or ISO/IEC 11172-2 constrained parameter video stream 0x03 ISO/IEC 11172 audio
0x04 ISO/IEC 13818-3 audio
0x05 ITU-T Rec.H.222.0│ISO/IEC 13818-1private_sections 0x06 ITU-T Rec.H.222.0│ISO/IEC 13818-1PES packets
containing private data 0x07 ISO/IEC 13522 MHEG
0x08 ITU-T Rec.H.222.0│ISO/IEC 13818-1 Annex A DSM CC
0x09 ITU-T Rec.H.222.1 0x0A ISO/IEC 13818-6 type A 0x0B ISO/IEC 13818-6 type B 0x0C ISO/IEC 13818-6 type C 0x0D ISO/IEC 13818-6 type D 0x0E ISO/IEC 13818-1 auxiliary
0x0F-0x7F ITU-T Rec.H.222.0│ISO/IEC 13818-1 Reserved 0x80-0xFF User Private
2.2.1.2 MPEG-2 Transport Stream
Transport Stream 簡稱 TS,其主要是使用於數位廣播電視上,也 就是HDTV 的傳輸格式;TS 由一道或多道節目(program)組成,每道節 目由一個或多個原始流和一些其他流複合在一起,包括視頻流、音頻 流、節目特殊信息流(PSI)和其他數據包。不同的節目可以擁有不同 的時間基準(time base),且 TS 封包具有固定的長度,可以容易的讓解 碼器得知一張照片的開始與結束,也比較容易在封包遺失後進行補救。
參考figure2.5 可以得知, TS 和 PS 不同,TS 是由長度固定為 184
bytes 的 PES 再加上 4 bytes 的 TS header 所組成,共 188 bytes。TS header 包含了 8 bits 的 sync_byte (0x47) 和 13 bits 數據包識別號 PID…等。PID 欄位的訊息可以告知解碼器 TS packet 的 payload 類型,
可以參考table2.5[7],從 PID 可以判斷其後面負載的數據類型是視頻 流、音頻流、PSI 還是其他數據包。
Figure 2.5 Relationship between PES and Transport Stream
Table 2.5[7] PID Table Value Description
0x0000 Program Association Table 0x0001 Conditional Access Table 0x0002-000F Reserved
0x0010-0x1FFE
May be assigned as network_PID,
Program_map_PID,elementary_PID, or for other purpose
0x1FFF Null packet