5. sdt (service description table) class

Program Lang./C++ 2016. 7. 20. 19:17

이 장에서는 SDT (Service Description Table)에 대해서 알아보고, 구현 클래스를 살펴본다.


SDT는 MPEG-2 Part 2의 규격 사항은 아니다. MPEG System의 구성은 기본 골격은 MPEG에서 출발하고

세부적인 사항은 ATSC, DVB, ISDB의 형태로 나누어진다. SDT는 DVB에 해당하는 규격이고

요즘은 ATSC도 같이 보고 있지만 기존에 계속 DVB만해서 익숙한 것 위주로 구현해 본다.


SDT는 현재 방송되고 있는 방송사업자 정보나 방송 채널 이름 같은 정보를 얻어올 수 있다.

좀 세부적으로 들어가면 PAT에 있는 프로그램 갯수가 정말 정확할까? 이런 문제들이 속출하게된다.


테스트 코드에서 볼 수 있듯이 PMT를 parsing하기 위해서는 PAT가 먼저 parsing이 되어야 한다.

하지만 SDT의 경우에는 테스트 코드에서도 볼 수 있지만 PAT와 상관없이 바로 Section PID를 알고 있으므로

바로 PAT와 상관없이 Parsing할 수 있다.

여기서 복합적으로 성능을 올릴 수 있는 방법을 고민해 볼 수 있다. Chip의 특성을 잘 파악한다면

여러가지 복합적으로 생각해 볼 수 있다.


또한 SDT는 CI+와 직접적인 연관이 있다. 업체마다 구현은 다르겠지만 ...

상세하게 여기 기술하기에는 한계가 있다. 정보 유출로 걸릴까 무섭다.


1. 소스 트리

├── CMakeLists.txt

├── psi_glob.h

├── remove.sh

├── sdt.cpp

├── sdt.h

├── section.cpp

├── section.h

├── test.cpp

└── types.h


2. 헤더 파일


3. 본체


4. 테스트 소스


5. 실행 결과



CSectionSDT

current media type : FILE 

mediaInPath : SGP.ts

No Data !! 

  0] SDT version =  1, Section =  0, service_id = 208 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV1_SD   

  1] SDT version =  1, Section =  0, service_id = 209 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV2_SD   

  2] SDT version =  1, Section =  0, service_id = 210 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV3_HD   

  3] SDT version =  1, Section =  0, service_id = 211 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV4_HD   

  4] SDT version =  1, Section =  0, service_id = 212 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV5_Radio   

  5] SDT version =  1, Section =  0, service_id = 213 

  -              EIT_schedule_flag :     0  

  -     EIT_present_following_flag :     1  

  -                 running_status :   0x4 

  -                   free_CA_mode :     0  

  -           service Provide Name : MediaCorp TV   

  -                   service Name : TV6_Rad   

~CSection

~SDT 



6. 전체 소스 (github link)


소스 코드는 여기 있는 부분과 다를 수 있다. 중간에 버그나 수정이 필요하면 다시 올리기 때문에 git에서 받는게 가장 최신임.


https://github.com/heesoon/mpeg/tree/master/test/sdt

: