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 |
EIT
PID는 0x0012이고 table_id다음과 같다.
-
1) actual TS, present/following event information = table_id = "0x4E";
-
2) other TS, present/following event information = table_id = "0x4F";
-
3) actual TS, event schedule information = table_id = "0x50" ~ "0x5F";
-
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