MPEG-2 TS(Transport Stream)

MPEG-2 시스템 개요

MPEG-2 시스템 표준

  • MPEG(Moving Picture Expert Group)-2 시스템은 비디오, 오디오 Elementary Stream(ES)을 저장 또는 전송하기 위하여 단일(single) 혹은 다중(Multiple) 스트림 멀티미디어 정보를 다중화(Multiplexing)하는 방식을 규정한 표준(ISO/IEC 13818-1)
  • MPEG-2 시스템에는 용도에 따라 Transport Stream(TS), Program Stream(PS)의 두 가지의 형태의 스트림을 제공

표 1 – Transport Stream과 Program Stream[5]

TS

(Transport Stream)

  • 전송용 스트림
  • 전송 에러가 존재하는 (error-prone) 전송 매체에 이용
  • 일정한 길이(188byte)의 packet으로 구성
  • 27MHz 단위의 PCR (Program Clock Reference)을 사용

PS

(Program Stream)

  • 저장용 스트림
  • 전송 에러가 없는 (error-free) 전송 매체에 이용
  • 가변 길이의 pack으로 구성
  • 27MHz 단위의 SCR (System Clock Reference)을 사용

PSI / SI / Section

서비스  정보는  수신기가  Transport Stream(TS)을  복호화 할  수  있게  하는 PSI(ISO/IEC IS MPEG-2 System 13818-1[1])와 선택된 프로그램 안내의 근간을 이루는 SI(DVB EN 300 468[2])를 포함한다.[3]

Section은 PES에 포함되는 오디오, 비디오 데이터를 제외한 나머지 정보들을 칭하며 하고 방송 수신 정보 PSI(Program Specific Information)와 방송 부가 정보 SI (Service Information) 및 기타 일반적인 데이터들이 여기에 해당한다. 실제로 Section은 구체적인 데이터인 Table의 일부분이고 수신부에서는 Packetized되서 전송되는 여러 개의 Section을 모아서 하나의 Table을 구성해야 유효한 정보를 얻을 수 있다. 실제로 각 Section Header의 신택스를 보면 section_number와 last_section_number와 같은 값이 있는데 해당 값을 통해 Packet을 재조립하여 하나의 Table을 완성하게 된다.

때때로 Table의 사이즈가 TS packet 사이즈보다 작은 경우가 있는데 이 경우에는 section_number와 last_section_number 값이 모두 0x00이 된다. Section Header 신택스 중에 table_id라는 값이 있는데, 수신부에서는 이 값을 이용하여 Packet에 어떤 Table 정보가 저장되어 있는지 알 수 있다.[7]

MPEG 다중화

그림 1 – MPEG 다중화[8]

그림 1는 MPEG 시스템의 다중화 과정을 통해 TS의 생성과정을 보여주고 있다. Encoder에 의해 코딩 된 비디오, 오디오 ES(Element Stream)는 가변적 크기로 잘라낸 후 헤더를 붙여 PES Packet이 된다. 이때 PES Packet의 크기는 고정되지 않고 가변적이며, PES Header에는 영상, 비디오의 싱크 정보(DTS, PTS) 등이 들어간다. 이 PES 패킷을 고정된 크기 184byte로 잘라내고 4byte Header를 붙여 TS Packet으로 변환한다. TS Packet은 최종적으로 하나의 TS 스트림으로 다중화 되게 된다.

PES / TS / PS

그림 2 – PES, TS, PS의 상관 관계

TS와 PS의 가장 큰 차이점은 기본단위(Packet, Pack)의 길이 이다. PS 스트림의 경우 저장용 스트림이기 때문에 저장매체에서 스트림을 읽는 경우 에러가 발생할 확률이 낮아 Pack의 길이가 가변적 이어도 문제가 되지 않는다. 그러나 전송용 스트림인 TS 스트림의 경우 전송 도중에 에러가 발생할 확률이 높기 때문에 Packet의 길이를 188byte로 고정하여 에러로 인한 데이터 손실을 최소화 한다.

TS 스트림은 Packet의 길이를 188byte로 고정시키기 위한 과정을 거치기 때문에 수신단에서 원본 데이터를 재조립하기 위한 부가적인 정보가 들어가게 된다. 이 정보들은 TS Header에 저장되며 수신단에서는 4byte인 TS Header를 분석하여 나머지 184byte Payload 데이터를 재조립한다.

그림 3 – ITU-T Rec.H.222.0 | ISE/IEC 13818 transport packet[1]

위 그림 3은 TS Packet의 구조를 보여주고 있다. 앞서 설명한 것처럼 TS Header는 기본적으로 4byte로 구성되고 필요에 따라 adaptation filed가 추가될 수 있다. TS Header의 구성을 살펴보도록 하겠다.

  • sync_byte (8 bit) : 0x47로 고정된 값을 갖고 TS Packet의 시작을 표시한다.
  • transport_error_indicator (1 bit) : 전송된 Packet에 에러가 있는지 없는지를 표시하며, ‘0’ 이면 에러가 없고 ‘1’이면 에러를 포함한다.
  • payload_unit_start_indicator (1 bit) : TS Packet의 경우 원본 데이터를 쪼개서 보내기 때문에 현재 packet이 포함하고 있는 데이터가 원본 데이터의 어느 부분을 포함하고 있는지를 알아야 수신단에서 원본 데이터를 재조립할 수 있다. 이 flag는 원본 데이터의 시작이 Packet에 있는지 없는지를 알려준다. 값이 ‘0’이면 해당 Packet에 원본 데이터의 중간 부분이 포함되어 있고 ‘1’이면 원본 데이터의 처음 부분이 포함되어 있다. 뒤에 나오는 continuity counter와 함께 사용된다.
  • transport_priority_indicator (1 bit) : TS Packet의 우선 순위를 표시하며, 값이 ‘0’인 Packet보다 ‘1’인 packet이 우선순위가 높다.
  • PID (13 bit) : Packet에 포함된 Payload의 데이터가 어떤 데이터인지를 알려주는 flag로 수신단에서는 이 값을 보고 필요한 데이터를 구분한다.

그림 4 – PID Table[1]

  • transport_scrambling_control(2 bit) : Payload의 scramble 유,무를 표시한다.

그림 5 – Scrambling control values[1]

  • adaptation_field_control(2 bit) : Adaptation field의 유,무를 표시한다.

그림 6 – Adaptation field control values[1]

  • continuity_counter(4 bit): 같은 PID를 갖는 Packet의 경우 1씩 증가하면서 전송되며 값이 15 (4 bit의 max값)가 넘어가면 다시 0으로 초기화 된다. Adaptation field만 전송되는 Packet의 경우에는 값이 증가하지 않는다.

ATM & TS Packet

그림 7 – ATM Packet으로 구성되는 TS Packet[4]

추가적으로 TS는 ATM(Asynchronous Transfer Mode) 방식으로 전송되는데 한 개의 회선을 여러 개의 채널로 분할해서 동시에 통신하는 다중화 방식 중 하나이다. 기존의 방송망이 ATM방식을 사용하므로 호환성을 위해서 디지털 방송 또한 ATM방식을 사용한다. ATM packet은 5byte의 Header와 1byte의 AAL(ATM Adaptation Layer) 그리고 47byte의 payload로 구성되어 총 53byte의 크기를 갖는다. TS Packet의 사이즈가 188byte인 이유는 ATM Packet에서 ATM Header 와 ALL을 제외한 payload 데이터 4개를 합쳐 구성되기 때문이다. (47byte x 4 = 188byte)

MPEG 동기화

그림 8 – MPEG 동기화[8]

MPEG 시스템에서는 영상 및 음성 미디어 간 Encoder 및 Decoder 간의 시각 기준의 일치를 위한 동기화가 필요하다.

STC

STC(System Timing Clock) : MPEG 시스템 송신 측에서 발생시키는 공통의 기준 클럭(27 Mhz)으로 수신 측에서는 이에 맞추어 STC 타이밍에 동기화 한다. 즉, 송수신부에서 동작의 기준이 되는 시스템 기준 클럭이다.

PCR / SCR

PCR, SCR은 송신 측에서 주기적으로 전송하고, 수신 측에서 이에 맞춰지는 기준 되는 시간 값이다. 송신 측에서 송신단 출력 순간의 STC 값을 표본화하여 주기적으로 전송하고, 수신측은 수신단 입력 순간에 수신단 STC를 보정하여 STC를 맞춘다.

  • PCR(Program Clock Reference) : MPEG-2 TS의 프로그램 시각 기준 값으로 프로그램 마다 기준 되는 시각 기준 값이다. 여러 프로그램들이 모여 하나의 TS를 구성하는 경우에는 각 프로그램 마다 PCR이 다른 시간 기준을 갖을 수 있으나, 가능하면 단일한 PCR을 갖는 것이 바람직하다. 인코더 시스템의 시간을 27Mhz의 System Clock으로 샘플링한 값으로 오디오, 비디오 재생 시 기준 시각으로 사용된다. 42 (33 + 9) bit 정확도를 가지고 있으며 MPEG-1과의 호환성을 위해 33 bit의 90Khz의 정확도를 가지는 PCR_base값과 27Mhz의 정확도를 가지는 9 bit의PCR_ext로 구성되어진다. TS Packet Adaptation Field에 위치하며, 0.1초 이내 최소 1회 이상 전송된다.
  • SCR(System Clock Reference) : MPEG-1 PS의 시스템 시각 기준 값이다. PS는 단일 프로그램으로 이루어지므로 SCR 값을 항상 하나이다. PS의 Pack Header의 SCR 필드를 통해 전송되며, 0.7초 이내 최소 1회 이상 전송된다.

DTS / PTS

기준 클럭 시간 값에 따라, 오디오,비디오 ES 각각에 대해 PTS/DTS 타임스탬프를 사용한다. 디코딩을 위한 시각이 DTS(Decoding Time Stamp)이며, 재생을 위한 시각이 PTS(Presentation Time Stamp) 이다.

  • DTS(Decoding Time Stamp) : 수신된 오디오, 비디오 정보가 디코딩 되어져야 하는 시각을 나타내며 PES Packet Header에 위치한다.
  • PTS(Presentation Time Stamp) : 오디오나 비디오가 실제로 재생 되어져야 하는 시각을 나타내며, PES Packet Header에 위치한다.

디지털 방송 Channel Search

디지털 방송 수신과정

그림 9 – 위성방송 데이터 수신 구조

그림 3은 하나의 위성에서 송신하고 있는 정보들의 구조를 보여주고 있다. 여기서는 1개의 위성에3개의 Transponder(TP)가 존재하고 있다. TP는 방송국 단위로 생각할 수 있다. 우리나라 지상파 방송국(SBS, KBS, MBC)의 경우 각 방송국마다 보통 한 개의 서비스(=채널)만을 제공하고 있지만 그림 1의 TP2는 세 개의 서비스를 제공하고 있다. 특정 방송국의 경우 다수의 서비스를 하나로 묶어 부케단위로 제공하기도 한다. 서비스 정보를 확인하기 위해서는 위성에서 데이터를 송신할 때 사용하는 주파수 정보 등을 알고 있어야 한다. 구체적으로 Frequency, Symbol rate, Polarization(Horizontal, Vertical) 등의 정보가 있어야 TP에 락킹하여 방송 신호를 수신할 수 있다. 수신기(셋탑박스)에서는 기본적으로 위성 정보를 저장하고 있지만 없는 경우에는 원하는 위성 정보(www.lyngsat.com)를 확인 후 수동으로 방송 신호를 수신할 수 있다. 일반적으로 셋탑박스에서는 이 과정을 최초 한번만 수행하면 데이터베이스에 저장하고 그 이후에는 이 과정을 수행하지 않는다. 물론 방송국 혹은 위성에서 변경사항이 발생하면 그 정보를 새로 수신하여 반영하여야 한다.

Channel Search 방법

Tuner Locking

그림 10 – 위성방송 서비스 Channel Search 과정[7]

셋탑박스는 TP 정보를 통해 락킹을 시도하게 되는데 TP정보를 얻는 방법은 크게 2가지다. 첫째, TP 정보를 OP에게 입수하여 미리 플래시 메모리에 저장하는 방법이 있으며, 둘째, NIT 테이블을 파싱하여 테이블 내의 delivery system descriptor를 읽는 방법이다.

TP가 락킹된 후 튜너의 DeMod와 DeMux를 거치게 되면 TS 스트림이 출력되고 SI 데이터 파싱을 위해 sync_byte(0x47)을 찾는다. sync_byte를 찾으면 188byte 이후의 byte를 조회하여 sync_byte인지 확인하고 이 과정을 3회 연속 성공하면 정상적인 TS 스트림으로 보고 최종 락킹하게 된다.

TP 락킹이 성공적으로 완료되면 PAT를 파싱하게 되고 PAT 파싱을 통해 PMT의 PID와 개수 등을 알게된다. PAT 파싱을 완료하면 PMT 테이블의 개수만큼 PMT를 파싱하게 되고 PMT 파싱을 통해 해당 서비스의 Video PID, Audio PID 등을 파악한다. 마지막으로 SDT를 파싱하여 각 서비스별 채널명, 속성정보 등을 파악하게 된다.

PAT 파싱

튜너가 특정 TP를 락킹하여 TS 스트림을 출력하게 되면 가장 먼저 PID가 0x000인 PAT 테이블을 파싱 하게 된다. PAT 테이블은 서비스(=채널)들의 정보를 담고 PMT 테이블의 PID를 얻어낸다. 하나의 TP에는 PAT 테이블이 한 개로 유일하며, 최소 0.7초 마다 한번씩 발생하는 것으로 알려져 있다.

그림 11 – Program association section[1]

PMT 파싱

PAT 파싱에서 얻어낸 PMT PID에 따라 PMT 테이블을 파싱한다. PMT는 하나의 TP에 서비스의 개수 즉 채널 개수만큼 있으며 한 TP에 4개의 방송이 있다면 PMT 테이블도 4개가 있다. PMT 테이블은 Video PID, Audio PID, CAT PID 등의 정보를 담고 있다. 이렇게 얻어낸 서비스별 PID의 리스트를 셋톱박스에 저장해두고 이후 사용자가 채널을 변경하면 해당 채널에 맞춰 화면에 디스플레이 하고 오디오를 구동하는데 쓰이게 된다.

예를 들어 BBC HD라는 방송이 있을 때 Video PID가 0x1001, Audio PID가 0x1002라고 가정하면, 사용자가 BBC HD라는 방송으로 채널을 돌리면 화면에는 PID 0x1001을 갖는 비디오 스트림을 뿌려주고 0x1002라는 사운드 스트림을 틀어주면 되는 것이다. 방송이 바뀔 때 마다 스트림의 PMT 테이블을 찾고 Video PID, Audio PID 등을 얻어 낸다면 채널 변경시간(Zapping Time)이 오래 걸리기 때문에 보통 서비스(=채널) 서치 과정에서 이러한 정보를 미리 셋톱박스의 데이터베이스에 저장해 놓는다.

그림 12 – TS program map section[1]

SDT 파싱

SDT 파싱을 통해 서비스명을 얻어내고 채널과 관련된 속성 정보를 얻어내어 마찬가지로 셋톱박스의 데이터베이스에 저장해 놓는다. 즉 방송의 이름을 알아내고 관련된 정보를 알려주는 것이 SDT의 역할이다.

그림 13 – Service description section[2]

Channel Search Pseudo 코드 정리[7]

References

  • [1] ISO/IEC 13818-1
  • [2] ESTI, EN 300 468
  • [3] 한국정보통신기술협회, TTAS.KO-07.0008/R1, 2000
  • [4] 유시룡, 장규환, 이병욱, 김종일, 정해묵, MPEG 시스템, 브레인코레아
  • [5] 강성곤, MPEG-2 System, 휴맥스, 2008
  • [6] 김규현, MPEG-2 ES/PES/TS/PSI, Media Lab of Kyung-Hee UNIV
  • [7] Google, “디지털 방송 채널 서치”, http://blog.naver.com/windheim/90048572443, (2009. 6. 8)
  • [8] Google, “MPEG 시스템”, http://www.ktword.co.kr/test/view/view.php?nav=2&no=3682&sh=MPEG, (2018. 11. 05)
이 글은 카테고리: MPEG에 포함되어 있습니다. 고유주소를 북마크하세요.

댓글 남기기