ABR Ladder의 Layer B 정렬 — 화질 전환 시 키프레임 동기화
ABR 전환을 위해 rendition 간 segment boundary와 random access point를 맞추는 이유를 설명합니다. FFmpeg의 GOP·force_key_frames·scene-cut 설정은 입력 timestamp와 encoder 동작까지 함께 확인해야 하며, 최종 정렬 여부는 ffprobe와 Apple media tooling 등으로 산출물을 검증합니다.
목차(37개 항목)
- 0. 핵심 명제 — 두 개의 정렬
1. SA 의사결정 흐름 — 한 장 요약
2. ABR이 필요한 이유
3. 화질 전환의 본질 — 시간축에서 스트림을 갈아탐
4. Layer B 정렬 위반 시나리오
6. ABR Ladder 설계 — 일반 권장값
7. 검증 — 실제로 정렬됐는지 확인
- 9. SA 체크리스트 — ABR Ladder 검증
10. 한 줄 결론
- 관련 글
- 참고 자료
"720p에서 1080p로 전환할 때 화면이 깨져요." "화질을 바꾸면 잠깐 멈춰요." 이런 증상에서는 variant 간 세그먼트 경계와 랜덤 액세스 지점이 같은 미디어 시각에 정렬됐는지 먼저 확인합니다.
#37에서 키프레임과 세그먼트 경계를 다뤘다면, 이 글은 ABR ladder의 variant가 같은 콘텐츠 시각과 경계를 공유해야 하는 이유와 구현 방법을 정리합니다.
0. 핵심 명제 — 두 개의 정렬
ABR 전환을 위해 각 variant의 세그먼트 경계와 랜덤 액세스 지점을 같은 미디어 시각에 맞춘다. 고정 GOP의 정수 비율은 한 구현 방법이지 HLS의 보편 규칙은 아니다.
| Layer | 정렬 | 위반 시 증상 |
|---|---|---|
| A (variant 내부) | 세그먼트 시작 ↔ IDR 경계 | 목표보다 긴 세그먼트·탐색 지연 (#37) |
| B (variant 간) | 경계·timestamp·discontinuity sequence 정렬 | 전환 지연, 디코더 재초기화, 재생 실패 가능 |
1. SA 의사결정 흐름 — 한 장 요약
라이브 송출 설계는 비즈니스 요구사항에서 시작해 검증으로 끝나는 단방향 결정 트리입니다.
시나리오 인터뷰 — 고객사와 만났을 때 7가지 질문
이 7가지를 순서대로 묻고 답변을 채우면 자연스럽게 ladder 설정이 나옵니다.
2. ABR이 필요한 이유
시청자마다 다른 환경
5G에서 보는 사람, 지하철 와이파이, 해외 셀룰러 — 같은 라이브 방송이라도 받을 수 있는 비트레이트가 천차만별.
단일 화질로 송출하면:
- 1080p만: 시청자 C는 끊김
- 360p만: 시청자 A는 화질 불만
ABR — 같은 영상, 여러 화질
같은 라이브 방송을 여러 화질로 동시 인코딩해서 발행합니다. 플레이어가 네트워크 처리량·버퍼·기기 성능을 바탕으로 적절한 variant를 선택합니다.
시청자 디바이스의 ABR 알고리즘:
전환 시점과 알고리즘은 플레이어마다 다르지만, HLS에서는 정렬된 세그먼트 경계가 안전한 전환점을 제공합니다.
Master Playlist (m3u8)
ABR ladder는 master playlist 한 장에 표현됩니다.
플레이어는 master를 먼저 받고 초기 variant를 고른 뒤, 재생 상태에 따라 다른 Media Playlist로 전환할 수 있습니다.
3. 화질 전환의 본질 — 시간축에서 스트림을 갈아탐
ABR에서 "화질을 바꾼다"는 건 시청자 디바이스가 다음 세그먼트를 다른 ladder에서 받는다는 뜻입니다.
전환 조건: 플레이어가 새 rendition으로 전환하는 경계에는 호환되는 독립 랜덤 액세스 지점이 필요합니다. 이 조건이 맞지 않으면 화면 깨짐이나 재생 중단이 발생할 수 있으므로 실제 대상 플레이어에서 확인합니다.
왜 P-frame으로 시작하면 안 되나
#37 Layer 4에서 다룬 것과 같은 이유. P-frame은 이전 P 또는 I를 메모리에 갖고 있어야 디코딩 가능. 시청자는 720p의 P를 갖고 있는데, 1080p의 P는 720p의 P를 참조 못 함. 해상도도 다르고 인코딩 컨텍스트도 다름.
→ 새 variant의 전환 경계에는 독립적으로 디코딩 가능한 랜덤 액세스 지점이 필요합니다.
이 지점은 variant 전반에서 같은 콘텐츠 시각에 정렬돼야 합니다.
4. Layer B 정렬 위반 시나리오
시나리오 A: 정렬됨 (정상)
시나리오 B: Layer B 위반 (각 ladder가 독립적으로 인코딩됨)
이런 패턴은 보통 각 화질을 독립된 인코더로 따로 인코딩할 때 발생합니다. 인코더마다 scene-cut 감지가 다르게 작동하거나, GOP 시작점이 어긋나거나.
시나리오 C: GOP 길이는 같은데 시작점이 다름
각 화질의 GOP 간격이 같아도 위상(phase)이 다르면 전환 경계가 어긋납니다. rendition들이 같은 미디어 timestamp에 랜덤 액세스 지점을 가져야 합니다.
5. Layer B를 보장하는 4가지 방법
방법 1: 단일 인코더에서 ABR ladder 동시 출력
단일 입력 timestamp를 공유하는 여러 출력을 구성하면 rendition 간 키프레임을 맞추기 쉽습니다. 다만 encoder와 packager가 실제로 같은 경계를 만들었는지는 산출물로 검증합니다.
핵심 옵션:
-g 60 -keyint_min 60모든 출력에 동일하게 → 60프레임마다 강제 I-frame-sc_threshold 0scene-cut OFF → 가변 GOP 방지- 단일 입력 timestamp가 모든 출력에 동기 전파됨
방법 2: -force_key_frames로 입력 timestamp 기준 요청
expr:gte(t,n_forced*2)는 입력 timestamp 기준 약 2초 배수에 키프레임을 요청합니다. 프레임 시각으로 반올림되므로 각 출력의 실제 packet timestamp를 확인해야 하며, 입력 timestamp가 다시 시작되면 다른 스트림과의 공통 timeline 정렬을 별도로 처리합니다.
방법 3: 클라우드 트랜스코더 사용
관리형 트랜스코더를 사용하면 단일 입력에서 여러 rendition을 생성하고 공통 세그먼트 경계를 설정할 수 있습니다. 지원 여부와 설정 이름은 제품 문서에서 확인합니다.
Agora Media Push 한정: 한 push 작업의 출력은 지정한 destination URL로 전송됩니다. 대상 플랫폼이 ABR ladder를 생성한다면 variant 정렬은 그 플랫폼의 트랜스코딩·패키징 단계에서 처리됩니다.
방법 4: 프록시 인코더 + 멀티 RTMP push (커스텀 파이프라인)
자체 CDN이나 멀티 플랫폼 동시 송출 시 — 클라이언트 인코더에서 ladder를 만들고 각각 RTMP push.
이 경우 공통 입력 timestamp와 경계 IDR 정책을 모든 출력에 적용하고, 패키징 결과의 segment start time을 비교해야 합니다.
6. ABR Ladder 설계 — 일반 권장값
아래 값은 설계 예시입니다. 실제 값은 코덱, 프레임레이트, 콘텐츠 복잡도, 대상 기기, 플랫폼 ingest 제한과 화질 측정으로 결정합니다.
권장 ladder (16:9 비디오)
| 화질 | 해상도 | 비트레이트 (H.264) | fps | 용도 |
|---|---|---|---|---|
| 1080p | 1920×1080 | 4500~6000 kbps | 30 | 데스크톱/대화면 |
| 720p | 1280×720 | 2500~4000 kbps | 30 | 모바일 와이파이 |
| 480p | 854×480 | 1000~1500 kbps | 30 | 모바일 LTE |
| 360p | 640×360 | 500~750 kbps | 30 | 저속 셀룰러 |
| 240p | 426×240 | 250~400 kbps | 30 | 비상용 |
비트레이트를 고정 비율로 보정하지 말고 스포츠·게임·강의 등 대표 콘텐츠로 VMAF/SSIM과 재버퍼링을 측정합니다.
60fps 송출 (게임/스포츠)
| 화질 | 해상도 | 비트레이트 | fps |
|---|---|---|---|
| 1080p60 | 1920×1080 | 6000~9000 kbps | 60 |
| 720p60 | 1280×720 | 4500~6000 kbps | 60 |
| 720p30 | 1280×720 | 2500 kbps | 30 (저속용 폴백) |
60fps에서 2초 키프레임 간격을 선택하면 120프레임입니다. 30fps rendition과 함께 쓸 때는 프레임 수가 아니라 같은 미디어 시각에 IDR이 놓이는지 확인합니다.
비트레이트 간격 — 충분히 구분 가능한 단계로
인접 rendition의 비트레이트가 지나치게 가깝다면 전환 이점이 작아집니다. 보편적인 고정 배수 규칙은 없으므로 Apple authoring spec과 실제 플레이어의 ABR 동작으로 검증합니다.
mediastreamvalidator로 각 variant의 선언 peak/average bandwidth, 해상도, 세그먼트 정렬 문제를 확인하고 네트워크 shaping 테스트를 병행합니다.
7. 검증 — 실제로 정렬됐는지 확인
ladder를 인코딩한 뒤 정렬 여부는 ffprobe로 확인합니다.
각 ladder의 키프레임 timestamp 추출
한 줄 헬스체크 스크립트
Apple mediastreamvalidator
Apple 공식 도구로 HLS 스트림의 authoring 문제를 검증:
도구의 실제 진단 결과를 읽고, variant 전환은 지원 플레이어에서 별도로 재현합니다.
8. 흔한 실수 패턴
실수 1: 각 화질을 독립 ffmpeg 프로세스로
각 프로세스가 자기 timestamp로 독립 인코딩 → scene-cut 위치, 첫 키프레임 시점이 어긋남.
해결: 단일 ffmpeg에서 -filter_complex split + 다중 출력.
실수 2: scene-cut 비활성화 누락
해결: 모든 ladder에 -sc_threshold 0 또는 -x264-params scenecut=0:no-scenecut.
실수 3: VFR(가변 프레임레이트)
입력이 가변 fps면 출력 timestamp도 흔들림 → ladder 간 불일치.
해결: -vsync cfr 또는 -r 30 명시로 CFR 강제.
실수 4: GOP는 같은데 force_key_frames 누락
-g 60만으로는 인코더 내부 상태(rate control 등)에 따라 약간 어긋날 수 있음.
검토 방법: -force_key_frames "expr:gte(t,n_forced*2)"로 입력 timestamp 기준 키프레임을 요청하고, 각 rendition의 실제 packet timestamp와 segment boundary를 비교합니다.
실수 5: 코덱/프로파일이 화질별로 다름
코덱·프로파일이 달라지면 플레이어가 디코더를 재구성해야 할 수 있습니다. Master Playlist의 CODECS와 대상 기기 지원 범위를 정확히 선언하고 전환을 테스트합니다.
9. SA 체크리스트 — ABR Ladder 검증
10. 한 줄 결론
각 variant 안에서는 세그먼트 경계를 IDR에 맞추고, variant 사이에서는 같은 콘텐츠 시각·discontinuity sequence에 경계를 맞춘다. 설정값이 아니라 생성된 HLS를 검증해야 한다.
두 Layer 한눈에
관련 글
- GOP-세그먼트 정렬의 산수 — Layer A 시간축 정렬
- 프레임의 모든 것 — I·P·B-frame / GOP / PLI·FIR
- B-frame 이해하기 — B-frame의 참조 구조와 재정렬 지연
- x264 실전 옵션 — keyint, force_key_frames
- H.264 Profile·인코더 옵션·비트레이트의 현실 — ladder 비트레이트 산정 근거
- Bitrate와 화질 — rendition별 bitrate를 실제 콘텐츠로 검증하는 방법
- 라이브 스트림 점검 — ffprobe / gstreamer — 키프레임 검증 명령어
참고 자료
- Apple — HLS Authoring Specification for Apple Devices — ABR ladder 비트레이트 단계, 키프레임 정렬, 세그먼트 요구사항 등 권위 있는 1차 기준
- RFC 8216 — HTTP Live Streaming —
#EXT-X-STREAM-INF마스터 플레이리스트와 variant 전환 규칙의 표준 정의 - FFmpeg —
-force_key_frames문서 (Main options) —expr:gte(t,n_forced*N)등 강제 키프레임 표현식의 공식 레퍼런스 - FFmpeg — HLS muxer (
-var_stream_map,-master_pl_name) — 단일 명령으로 다중 화질 ladder + 마스터 플레이리스트 생성 옵션 - Apple — HLS Tools (
mediastreamvalidator) — Authoring Spec 준수 여부 검증 공식 도구 - FFmpeg Codecs Documentation — libx264 options —
g,keyint_min,sc_threshold에 대응하는 공식 옵션 설명