TS, PES 패킷의 헤더 신텍스
헤더 신텍스
지금까지 TS의 원리와 구조에 대해 알아봤다. 이제는 신텍스(syntax)에 대해 알아볼 차례다. 지금까지 공부한 내용을 이해했기를 바란다. 만약 TS의 원리와 구조를 이해하지 못했다면 신텍스 부분으로 넘어가서는 안 된다. 구조를 이해하지 못한 채 신텍스를 이해하려 하는 것은 잘못된 방법이다. 만약 신텍스를 완벽히 이해했다고 하더라도 구조를 이해하지 못했다면 그건 그림조각 맞추기 퍼즐에서 하나하나의 그림조각 모두를 이해했지만, 그림조각을 하나로 맞추어 완벽한 하나의 그림을 만들 수 없는 것과 같다고 할 수 있다. 그렇기 때문에 지금까지 공부한 원리와 구조가 이해되지 않았다면 다시 한 번 차근차근히 읽어 본 후 다음 부분으로 넘어가야 할 것이다.
샘플 TS 비트
이제 실제 TS 하나를 살펴보고, 분석하는 것이 TS를 이해하는 가장 좋은 방법이다. 필자 역시 처음 ISO/IEC 13818-1과 A/65A 스펙을 봤을 때는 정말 막연하고 답답했지만, 실제 비트 열을 A4지에 출력해 싱크_바이트(sync_byte)를 찾고, 다음으로 오는 트랜스포트_에러_인디케이터(transport_error_indicator)를 찾고, 다음으로 오는 것들을 스펙을 보면서 하나하나 신텍스에 맞게 구별해 보았다. 이렇게 TS를 구별하고 구별된 TS를 손으로 그려가며 분석을 해보니 신텍스에 대한 이해가 아주 쉽게 되었다.
표1 | 샘플 TS 비트 (188바이트)
<표 1>은 실제 1개의 TS(188바이트)를 나타낸 것이다. 이와 같이 TS 수만 개가 모여서 하나의 프로그램(방송)을 이루는 것이고, PSIP 정보를 분리해 EPG를 표현하는 것이다. 이어서 설명이 될 PSIP 신텍스를 이용해 연필과 색연필을 들고 TS 헤더, PSIP 헤더를 분석해 보면 <표 1>이 어떤 테이블을 의미하는지 쉽게 찾을 수 있을 것이다. 앞의 TS는 PSIP의 MGT 섹션이 전송되는 TS이다(MGT 섹션에 관한 신텍스는 다음 호에서 다룰 것이다).
이제 본격적으로 TS 헤더의 신텍스에 대해 알아보도록 하자. 신텍스를 모두 표현하기에는 지면이 허락하지 않는 관계로 중요한 것들만을 살펴보도록 하자.
TS 헤더 신텍스
188바이트로 이뤄진 TS 중 최초부터 4바이트까지의 부분으로써 기본적인 정보를 표현한다. <그림 7>은 TS를 다이어그램으로 보기 쉽게 나타낸 것으로 ISO/IEC 13818-1 스펙에서 인용한 그림이다. 이 문서는 TS 및 PSIP 분석을 위한 문서이므로 어댑션_필드에 관한 내용은 설명하지 않는 것을 양해하기 바란다. 필드에서 어댑션_필드_컨트롤(adaptation_field_control)의 값을 판단해 패이로드(payload) 값이 데이터인지, 어댑션_필드인지를 판별하게 된다.
그림7 | 트랜스포트 스트림 신텍스 다이어그램의 일부(13838-1)
이 문서는 어댑션_필드_컨트롤의 값이 01인 경우만을 사용한다. 그렇기에 <그림 7>에서 참고할 부분은 빨간 테두리 안의 내용만 참고하면 될 것이다. <그림 7>에 나타난 부분 외에 아래 부분을 TS 헤더라고도 한다. TS의 헤더 크기는 4바이트이고 패이로드(데이터)의 크기는 184바이트이다. 패이로드 부분에 스터핑 데이터가 포함되기도 한다. 184바이트보다 큰 하나의 섹션을 구성하기 위해서는 컨티뉴티_카운터(continuity_counter)를 이용해 여러 개의 패이로드(데이터)를 합쳐서 1개의 섹션을 구성할 수 있다. TS 헤더의 시작은 항상 0×47로 시작하기 때문에 1바이트씩 읽어서 0×47을 찾아 싱크를 맞추면 된다.
Syntax | No.of bis | Mnemonic |
transport_packet(){ | ||
sync_byte | 8 | bslbf |
transport_error_indicator | 1 | bslbf |
payload_unit_start_indicator | 1 | bslbf |
transport_priority | 1 | bslbf |
PID | 13 | uimsbf |
transport_scrambling_control | 2 | bslbf |
adaptation_field_control | 2 | bslbf |
continuity_counter | 4 | uismbf |
if(adaptation_field_control=' 10' || adaptation_field_control=' 11'){ adaptation_field() } | ||
if(adaptation_field_control=' 01' || adaptation_field_control=' 11'){ for (i=0;i<N;i++){ | ||
data_byte | 8 | bslbf |
} | ||
} | ||
} | ||
- ◆ 싱크_바이트(sync_byte) : 항상 ‘0100 0111‘(0×47)의 값을 갖는다.
◆ 트랜스포트_에러_인디케이터 : 1비트의 플래그(flag) 값이다. 항상 0의 값을 가져야 한다. 트랜스포트 레이어 부분에 문제가 발생되었을 때 이 값은 1로 셋팅이 된다.
◆ 패이로드_유니트_스타트_인디케이터(Payload_unit_start_indicator, pusi) : pusi가 ‘1’이면 PES 패킷의 첫 번째 부분임을 나타낸다. 여러 개의 TS가 모여서 하나의 PES 패킷을 구성할 때 pusi가 ‘1’인 것을 먼저 찾은 후 컨티뉴티_카운터 값의 연속성을 이용해 다음 TS를 찾아내어 합치면 하나의 PES 패킷을 구성할 수 있게 된 것이다. Pusi가 ‘0’이라면 PES 패킷의 시작 부분이 아니라 중간, 혹은 마지막 부분임을 의미한다. Pusi가 ‘1’일 경우 8비트의 포인터_필드가 추가된다(PSI의 경우).
◆ 트랜스포트_프라이어티(Transport_priority) : 같은 PID가 들어 왔을 때, 이 값이 ‘1’로 셋팅된 TS의 우선 순위가 높다.
◆ PID : 13비트의 패킷 ID 이다. PID 테이블의 정의는 <표 3>과 같다.
◆ 트랜스포트_스크램블링_컨트롤(transport_scrambling_control) : ‘00’의 값은 ‘not scrambled’를 의미하고 그 외의 나머지 값들은 정의되지 않았다(not defined).
◆ 어댑션_필드_컨트롤(adaptation_field_control) : 2비트의 값으로 헤더 다음에 나오는 데이터가 어댑션 필드인지 혹은 패이로드인지 구별하는 값이다. 그 구별 값의 정의는 <표 4>와 같다.
◆ 컨티뉴티_카운터 : 같은 PID를 갖는 TS 패킷에 사용되며, 0부터 4비트의 최대 표현 값까지 사용된다. 어댑션_필드_컨트롤 값이 ‘00’, ‘01’ 일 경우에는 이 값이 증가되어서는 안 된다.
여기까지 TS 헤더의 신텍스의 구성 요소 하나하나 알아봤다.
다음으로 PES 패킷 헤더의 신텍스에 대해 알아보도록 하자.
Value | description |
0x0000 | Program Association Table |
0x0001 | Conditional Access Table |
0x0002-0x000F | reserved |
0x00100x1FFE | may be assigned as network_PID, Program_map_PID, |
Elementary_PID, or for other Purposes, | |
0x1FFB는 PSIP의 STT, MGT, VCT, RRT가 사용된다. | |
0x1FFF | Null packet |
Value | description |
00 | reserved for future use by ISO/IEC |
01 | no adaptation_field, payload only |
10 | adaptation_field only, no payload |
11 | adaptation_field followed by payload |
PES packet header fields | values |
packet_start_code_prefix | 0x000001 |
stream_id | assigned |
PES_packet_length | 0x0003 |
'10' | '10' |
PES_scrambling_control | '00' |
PES_priority | '0' |
data_alignment_indicator | '0' |
copyright | '0' |
original_or_copy | '0' |
PTS_DTS_flags | '00' |
ESCR_flag | '0' |
ES_rate_flag | '0' |
DSM_trick_mode_flag | '0' |
additional_copy_info_flag | '0' |
PES_CRC_flag | '0' |
PES_extension_flag | '0' |
PES_header_data_length | '0x00' |
2008/10/03 - [Computer] - 디지털 방송 생성 원리와 구조-1
'Computer' 카테고리의 다른 글
디지털 방송의 생성 원리와 구조-4 (6) | 2008.10.19 |
---|---|
디지털 방송의 생성 원리와 구조-3 (0) | 2008.10.09 |
디지털 방송 생성 원리와 구조-1 (1) | 2008.10.03 |
KTX에서 무선인터넷 사용해보기 (5) | 2008.09.15 |
중국어 어떻게 빨리 입력할까? (IME에서 설정바꾸기) (6) | 2008.06.11 |