星期二, 5月 09, 2006

Seaching PAT, PMT

先Tune到正確Freq,read stream from SPI。
Demux 會自動把 PATInfo packet解出來。
PATInfo packet 每32bit (long)為一單位。
index 0 : 不知道是甚麼(大概是PATInfo id)
index 1 ~ last : 內含pmt 的資訊:hight/low word不同.
..big endian 系統:

unsigned int Pmt;

Pmt = *(((unsignd int*)&PATInfo)+i); // 從PATInfo packet中,拿一個long word出來。

if( (Pmt >> 16) == 0){
NetworkId = Pmt & 0xFFFF; // 這個資訊沒什麼用
}else{
ProgramNumber = Pmt >> 16;
ProgramMapPid = Pmt & 0xFFFF; // 用這個Pid 來解出這個節目的stream。
}
依照PATInfo packet的size,把其中包含的Program Map資訊全部解出來。
接著,依照需要(看哪一台)。把ProgamNumer 和ProgramMapPid 合併回一個unsigned long後,交給demux 解出要的節目的stream packet。


demux出你要的節目的stream後,一樣,拿stream的PMTInfo packet出來...

unsigned int StreamPid = *(((unsigned int*)&PMTInfo + i);

StreamPid &= 0x00FFFFFF;
StreamType = StreamPid >> 16;

這個byte: StreamType 就是media 內容 (ref 13818-1 MPEG-2 System Spec)
其中
1, 2, 0x10, 0x1b, 0x80 都是video 的id。
3,4,6,0x0F,0x11,0x81 屬於Audio 的id。

將PMTInfo packet中每一個long word都解析一下,就知道這個stream內涵多少media 。

沒有留言:

網誌存檔