4. pmt class
Program Lang./C++ 2016. 7. 19. 22:05이 장에서는 PMT (Program Map Table)에 대해서 알아보고, 구현 클래스를 살펴본다.
PMT의 주요목적은 ES (Element Stream)에 대한 PID를 얻어오는 것이다.
또한 각 ES의 Type을 확인할 수 있다. Type의 의미는 현재 ES가 Audio인지 아니면 Video인지
Video이면 MPEG-2, MPEG-4 Part 4, MPEG-4 Part 10 지금은 UHD를 위한 타입도 추가되었다.
Set-Top Box나 TV에서는 A/V Decoder 블록이 존재하고 PMT에서 추출한 ES에 대한
PID를 A/V Decoder에 잘 넘겨주는 것이 System Decoder단 작업의 일이라고 보면된다.
PMT PID에 PCR PID가 있는데 Adaptation Field에 존재하는 PCR PID와 어떤 상관관계가
있는지 기억이 나지 않는다.
Adaptation Field를 이용하여 PCR Recovery, Rate 등 세가지인가 만족해야 하는 조건이 있다.
전에 한번 짜봐서 확인해 봤는데 분석기와 동일한 결과가 나왔다.
기회가 되면 소스 정리해서 올려놔야겠다.
Stream Analyzer처럼 Stream Type을 보기 좋게 하기 위해서는 추가적인 작업이 많이
필요해서 그냥 hexa값으로 표시하는 정도로 마무리한다.
1. 소스 트리
.
├── CMakeLists.txt
├── pat.cpp
├── pat.h
├── pmt.cpp
├── pmt.h
├── psi_glob.h
├── remove.sh
├── section.cpp
├── section.h
├── test.cpp
└── types.h
2. 헤더 파일
PMT를 Parsing하기 위한 전제 조건은 PAT가 Parsing 완료되어야 한다. 따라서 PAT는 필수적으로
따라 다닌다고 보면 된다.
3. 클래스 본체
4. 테스트 코드
5. 실행 결과
hskim@MacBookPro/Volumes/Macintosh HD 2/share/c++/pmt $./test CSection pat generator called !! PMT current media type : FILE mediaInPath : SGP.ts No Data !! 1] PAT version = 1 Section = 0 program_number = 208 [PID 1031 (0x407)] 2] PAT version = 1 Section = 0 program_number = 209 [PID 1032 (0x408)] 3] PAT version = 1 Section = 0 program_number = 210 [PID 1033 (0x409)] 4] PAT version = 1 Section = 0 program_number = 211 [PID 1034 (0x40a)] 5] PAT version = 1 Section = 0 program_number = 212 [PID 1035 (0x40b)] 6] PAT version = 1 Section = 0 program_number = 213 [PID 1036 (0x40c)] 1] PMT version = 1 Section = 0 program_number = 208 [PCR PID 260 (0x104)] -> [ 1] stream_type = 0x11 [ES PID 515 (0x203)] -> [ 2] stream_type = 0x11 [ES PID 514 (0x202)] -> [ 3] stream_type = 0x11 [ES PID 513 (0x201)] -> [ 4] stream_type = 0x11 [ES PID 516 (0x204)] -> [ 5] stream_type = 0x1b [ES PID 260 (0x104)] -> [ 6] stream_type = 0x6 [ES PID 103 ( 0x67)] -> [ 7] stream_type = 0x6 [ES PID 102 ( 0x66)] -> [ 8] stream_type = 0x6 [ES PID 101 ( 0x65)] -> [ 9] stream_type = 0x6 [ES PID 100 ( 0x64)] 2] PMT version = 1 Section = 0 program_number = 209 [PCR PID 259 (0x103)] -> [ 1] stream_type = 0x11 [ES PID 517 (0x205)] -> [ 2] stream_type = 0x11 [ES PID 513 (0x201)] -> [ 3] stream_type = 0x11 [ES PID 516 (0x204)] -> [ 4] stream_type = 0x1b [ES PID 259 (0x103)] 3] PMT version = 1 Section = 0 program_number = 210 [PCR PID 257 (0x101)] -> [ 1] stream_type = 0x11 [ES PID 513 (0x201)] -> [ 2] stream_type = 0x6 [ES PID 100 ( 0x64)] -> [ 3] stream_type = 0x11 [ES PID 516 (0x204)] -> [ 4] stream_type = 0x1b [ES PID 257 (0x101)] 4] PMT version = 1 Section = 0 program_number = 211 [PCR PID 258 (0x102)] -> [ 1] stream_type = 0x11 [ES PID 514 (0x202)] -> [ 2] stream_type = 0x11 [ES PID 517 (0x205)] -> [ 3] stream_type = 0x6 [ES PID 102 ( 0x66)] -> [ 4] stream_type = 0x11 [ES PID 514 (0x202)] -> [ 5] stream_type = 0x1b [ES PID 258 (0x102)] 5] PMT version = 1 Section = 0 program_number = 212 [PCR PID 514 (0x202)] -> [ 1] stream_type = 0x11 [ES PID 516 (0x204)] -> [ 2] stream_type = 0x11 [ES PID 514 (0x202)] 6] PMT version = 1 Section = 0 program_number = 213 [PCR PID 516 (0x204)] -> [ 1] stream_type = 0x11 [ES PID 516 (0x204)] ~CSection pat destroy called !! ~PMT |
6. 전체 소스 (github link)
https://github.com/heesoon/mpeg/tree/master/test/pmt
'Program Lang. > C++' 카테고리의 다른 글
pat 정보를 json 파일로 저장 후 webbrowser에서 확인 (0) | 2016.07.21 |
---|---|
5. sdt (service description table) class (0) | 2016.07.20 |
3. pat info. save to MySQL with cpp connector (0) | 2016.07.19 |
2. mpeg ts pat (program associate table) parser (0) | 2016.07.14 |
1. mpeg sectoin parser (0) | 2016.07.13 |