2.4 MPEG Transport Stream - 방송 전송과 녹화 파일
188바이트 패킷, PID, PAT/PMT, PCR로 이루어진 MPEG-TS의 구조와 M2TS, HLS 세그먼트와의 관계, 손상에 강한 이유를 설명합니다.
#MPEG-TS는 "파일"이 아니라 "스트림"
MPEG-2 Transport Stream(MPEG-TS, TS) 은 방송 신호처럼 끊임없이 흘러오는 데이터를 전송하기 위해 설계된 형식입니다. 파일 앞부분에 전체 목차를 두는 MP4와 달리, 어느 지점에서 잘라도 그 지점부터 재생을 시작할 수 있게 만들어져 있습니다. 디지털 방송 수신기, 셋톱박스, 위성/케이블 송출, IPTV, 방송 녹화 장비가 모두 TS를 사용합니다.
#188바이트 패킷
TS의 가장 기본 단위는 188바이트 고정 길이 패킷입니다.
헤더 4바이트의 주요 필드는 다음과 같습니다.
- Sync Byte(
0x47): 패킷의 시작 표시. 데이터가 깨져도 이 값을 188바이트 간격으로 찾아 다시 동기화합니다. - PID(Packet Identifier, 13비트): 이 패킷이 어떤 스트림(영상, 오디오, 테이블)에 속하는지 나타냅니다.
- Continuity Counter(4비트): 같은 PID의 패킷에 붙는 순번. 번호가 건너뛰면 패킷이 유실된 것을 알 수 있습니다.
#프로그램 구성: PAT와 PMT
TS 안에는 여러 개의 방송 프로그램이 함께 실릴 수 있습니다. 어떤 PID가 무엇인지는 주기적으로 반복되는 두 개의 테이블이 알려줍니다.
- PAT(Program Association Table, PID 0): 이 스트림에 어떤 프로그램들이 있고, 각 프로그램의 PMT는 어느 PID에 있는지 알려줍니다.
- PMT(Program Map Table): 한 프로그램을 구성하는 영상·오디오·자막 스트림의 PID와 코덱 종류를 알려줍니다.
PAT : 프로그램 1 → PMT는 PID 0x0100
PMT : 영상(H.264) = PID 0x0101, 오디오(AAC) = PID 0x0102, PCR = PID 0x0101
플레이어는 중간부터 들어와도 PAT/PMT가 곧 다시 나오므로, 그 순간부터 재생을 시작할 수 있습니다. 이 점이 방송 수신에 적합한 이유입니다.
#시간 동기: PCR, PTS, DTS
TS에는 영상과 소리를 맞추는 시간 정보가 별도로 있습니다.
- PCR(Program Clock Reference): 송신 쪽 기준 시계(27MHz). 수신기가 이 값을 받아 자신의 시계를 맞춥니다.
- PTS(Presentation Time Stamp): 이 프레임을 언제 화면에 보여줄지.
- DTS(Decoding Time Stamp): 이 프레임을 언제 디코딩할지. B프레임이 있으면 PTS와 DTS가 달라집니다.
#녹화 파일로서의 TS
방송을 녹화하면 대부분 TS 파일이 만들어집니다. TS 파일의 특징은 다음과 같습니다.
| 특징 | 설명 |
|---|---|
| 손상에 강함 | 일부가 깨져도 Sync Byte부터 다시 동기화해 나머지를 재생 가능 |
| 녹화 중에도 재생 가능 | 파일 뒤에 이어 써도 앞부분은 이미 재생 가능한 상태 |
| 탐색이 불편함 | 전체 인덱스가 없어, 도구가 PCR/PTS를 스캔하며 위치를 추정 |
| 길이 정보 없음 | 전체 길이는 처음과 끝 PTS를 읽어 계산해야 함 |
| 오버헤드 | 188바이트 단위 패킷화로 용량이 다소 증가 |
M2TS(192바이트 패킷) 는 TS 패킷 앞에 4바이트 타임스탬프를 붙인 변형으로, 블루레이와 AVCHD 캠코더에서 쓰입니다. 확장자 .m2ts, .mts가 이에 해당합니다.
#HLS와의 관계
HTTP Live Streaming(HLS)은 영상을 수 초 단위의 TS 세그먼트(.ts)로 쪼개고 .m3u8 재생 목록으로 묶어 전달하는 방식입니다(현재는 fMP4 세그먼트도 널리 쓰입니다). TS 세그먼트가 각자 PAT/PMT를 포함하고 독립적으로 재생되는 구조가 HLS에 잘 맞았기 때문입니다.
#직접 확인하기
# 프로그램/스트림 구성 확인
ffprobe -v error -show_programs -of compact recording.ts
# TS를 MP4로 재래핑 (AAC 오디오인 경우)
ffmpeg -i recording.ts -c copy -bsf:a aac_adtstoasc -movflags +faststart out.mp4
#정리
- TS는 188바이트 패킷의 연속이며, PID로 스트림을 구분하고 PAT/PMT로 구성을 알립니다.
- 방송 수신과 녹화에 적합하지만, 길이·탐색 정보가 약해 MAM에서는 보통 정규화 변환 대상입니다.
- M2TS(192바이트)와 HLS 세그먼트도 같은 계열입니다.