EPG를 추출하기 위해 필요한 DVB-SI에 대해 분석한다.

주요 섹션은 다음과 같다.

NIT 현재 네트워크(방송국)에서 송출되는 모든 네트워크정보를 표현 BAT 1개이상의 채널을 하나의 그룹으로 지정함 SDT 서비스(채널)의 정보를 포함 EIT 특정서비스에 해당하는 프로그램(이벤트)의 정보를 송출함. TDT, TOT는 시간값을 송출하며 수신기는 자신의 시간을 이 값을 사용하며 맞출 수 있다.


NIT나 BAT는 부가적인 정보로 간주하고 SDT와 EIT로 프로그램가이드를 구성하는 방법에 대해 정리하겠다.


SDT 구조

service_description_section(){ 

    table_id

    section_syntax_indicator
    reserved_future_use
    reserved
    section_length
    transport_stream_id
    reserved
    version_number
    current_next_indicator
    section_number
    last_section_number
    original_network_id
    reserved_future_use
    for (i=0;i<N;i++){

        service_id 

        reserved_future_use 

        EIT_schedule_flag 

        EIT_present_following_flag 

        running_status 

        free_CA_mode 

        descriptors_loop_length 

        for (j=0;j<N;j++){

            descriptor()
        }

    }

    CRC_32 


PID는 0x011이며 table_id는 0x42(actual), 0x46(other)가 있다.

EIT_schedule_flag : 1이면 서비스의 EIT schedule 정보가 현재 TS에 포함됨을 의미한다. TR101 211에 더 자세한 정보가 기술되어 있다. 0이면 현재 TS에 EIT schedule정보가 없음을 의미한다.

EIT_present_following_flag : 1이면 서비스의 EIT present following정보가 현재 TS에 포함됨을 의미한다. TR101 211에 더 자세한 정보가 기술되어 있다. 0이면 현재 TS에 EIT present following 정보가 없음을 의미한다.

running_status : 서비스의 현재 상태를 나타낸다.

 0

undefined 

 1

not running 

 2

starts in a few seconds(e.g. for video recording) 

 3

pausing 

 4

running 

 5

reserved for future use 

free_CA_mode : 켄텐츠가 스크램블되었는지를 나타냄.


EIT

PID는 0x0012이고 table_id다음과 같다.

  1. 1)  actual TS, present/following event information = table_id = "0x4E";

  2. 2)  other TS, present/following event information = table_id = "0x4F";

  3. 3)  actual TS, event schedule information = table_id = "0x50" ~ "0x5F";

  4. 4)  other TS, event schedule information = table_id = "0x60" ~ "0x6F". 


event_information_section(){ 

    table_id

    section_syntax_indicator
    reserved_future_use
    reserved
    section_length
    service_id

    reserved
    version_number 

    current_next_indicator 

    section_number 

    last_section_number 

    transport_stream_id 

    original_network_id 

    segment_last_section_number 

    last_table_id 

    for(i=0;i<N;i++){

        event_id
        start_time
        duration
        running_status
        free_CA_mode
        descriptors_loop_length
        for(i=0;i<N;i++){
            descriptor()
        }

    }

    CRC_32 


service_id : 이벤트가 소속되는 서비스(채널)아이디

segment_last_section_number : sub_table을 가지는 경우 마지막섹션의 개수. 아닌경우 last_section_number와 동일하다.

last_table_id : table이 하나로만 구성되면 이 table과 동일 table_id이며 여러개로 구성된 경우 마지막 table_id를 나타낸다.

event_id : 이벤트를 구별하는 아이디

start_time : 프로그램 시작시간, UTC시간이며 시작시간이 정해지지 않은 경우 모든 비트가 1이다. 앞에서부터 16비트가 년월일이고 MJD포맷이다. 이어서 24비트가 4비트씩 시분초를 의미한다.

EXAMPLE 1: 93/10/13 12:45:00 is coded as "0xC079124500".

duration : 프로그램 방영시간.  24비트로 4비트씩 시분초를 의미한다.

running_status : 현재 상태를 의미한다.

free_CA_mode : 스크램블 여부를 의미한다.

 

Descriptors

각 섹션별로 추가적인 정보들이 디스크립터로 기술이 된다. 상당히 많은 디스크립터들이 정의되어 있으며 이 중에 필요한 디스크립터들만 추출해도 EPG정보구성에는 문제가 없다.

디스크립터 목록에 대한 정보는 tr101211에 기술되어 있고, 디스크립터에 대한 상세한 구조는 en_300468에 기술되어 있다.

SDT와 EIT의 디스크립터 목록은 다음과 같다.


SDT descriptors

- Announcement support descriptor

- Bouquet name descriptor

- CA identifier descriptor

- Country availability descriptor

- Data broadcast descriptor

- Linkage descriptor

- Mosaic descriptor

- Multilingual service name descriptor

- NVOD reference descriptor

- Service descriptor

- Service availability descritor

- Telephone descriptor

- Timeshifted service descriptor


EIT descriptor

- CA identifier descriptor

- Component descriptor

- Content descriptor

- Data broadcast descriptor

- Extended event descriptor

- Linkage descriptor

- Multilingual component descriptor

- Parental rating descriptor

- PDC decriptor

- Short event descriptor

- Telephone descriptor

- Time shifted event descriptor



Posted by 삼스