시리즈: 실시간 통화, 어떻게 녹화하는가3/6
- 1.실시간 통화, 왜 녹화해야 하는가
- 2.내 서버에서 직접 녹화한다면
- 3.Agora 녹화 모드 비교 ← 현재 글
- 4.M3U8과 TS 구조
- 5.FFmpeg 미디어 처리
- 6.FFmpeg 실전 파이프라인
Agora 녹화 모드 비교 — Individual, Composite, Web page
Individual, Composite(`mix`), Web page recording의 출력과 처리 범위를 비교합니다. Individual은 참가자별 track 후처리에, Composite는 서버 합성과 고정 레이아웃 출력에, Web page recording은 웹 화면 캡처에 맞습니다. 과금은 모드 이름이 아니라 스트림 수·시간·합산 해상도 등 공식 가격 기준으로 확인해야 합니다.
같은 채널을 녹화해도 모드에 따라 출력 파일 구조와 후처리 방식이 달라집니다. 다만 Agora Cloud Recording 요금은 Individual과 Composite 중 어떤 모드를 선택했는지가 아니라 녹화한 스트림 수·시간·합산 해상도로 계산됩니다.
Agora Cloud Recording은 Individual, Composite(mode=mix), Web page recording 세 가지 모드를 제공합니다. 이 글에서는 공개 문서로 확인되는 출력 동작과 선택 기준을 정리합니다.
Individual 모드 — UID별 분리 저장
Individual 모드는 참가자별 audio/video stream을 UID 단위 파일로 저장합니다.
Compositing 단계는 없습니다. audio/video를 모두 녹화하면서 streamMode=standard를 사용하면 UID별 audio M3U8, video M3U8과 함께 두 track을 재생하는 merged M3U8이 생성됩니다. Individual recording은 MP4를 생성하지 않습니다.
transcoding 여부는 media type과 streamMode에 따라 다릅니다. default와 standard에서 비디오는 transcoding하지 않고 오디오는 transcoding합니다. original은 audio-only recording에만 적용되며 오디오도 transcoding하지 않습니다.
파일명과 M3U8의 Agora track event에는 UTC 시각 정보가 포함됩니다. 여러 UID를 후처리로 합칠 때는 이 정보와 실제 stream timestamp를 기준으로 sync를 맞춥니다.
주요 사용 사례:
- STT(Speech-to-Text): 화자별 오디오를 독립적으로 처리하기 쉬움
- AI 분석: 특정 참가자의 발화 패턴, 감정 분석 등
- 후처리 유연성: 나중에 원하는 레이아웃으로 직접 합성
Composite 모드 — Audio/video 합성
Composite 모드는 구독한 참가자의 스트림을 하나의 output으로 합성합니다. 여기서 "합친다"는 말이 오디오와 비디오에서 다른 처리를 의미합니다. 오디오부터 살펴봅니다.
PCM(Pulse Code Modulation) 이란 아날로그 오디오를 디지털로 변환한 raw 데이터입니다. 초당 44,100개(CD 품질) 혹은 48,000개(방송 품질)의 샘플로 파형을 숫자로 표현합니다.
위 그림은 일반적인 audio mixing을 단순화한 개념도입니다. 실제 mixer는 sample rate와 channel layout을 맞추고, gain·normalization·limiting 같은 처리를 조합할 수 있습니다.
문제는 여기서 발생합니다. 세 사람이 동시에 말하면 amplitude 합이 최대값을 초과합니다.
Clipping: 16-bit signed PCM의 범위는 -32768~32767입니다. 합산 결과가 표현 범위를 벗어나면 clipping이 생길 수 있습니다. Agora가 Composite recording 내부에서 AGC를 어떤 순서로 적용하는지는 공개 문서로 확인되지 않으므로 특정 처리 순서를 전제로 설계해서는 안 됩니다.
Composite 모드 — Video Compositing 기술 상세
비디오 합성은 오디오보다 훨씬 계산 집약적입니다.
YUV 4:2:0은 밝기와 색차를 분리하고 색차를 가로·세로 방향으로 subsampling합니다. 압축하지 않은 8-bit RGB 4:4:4의 24 bit/pixel과 8-bit YUV 4:2:0의 12 bit/pixel을 비교하면 표본 데이터는 절반입니다. bit depth와 pixel format이 다르면 이 계산도 달라집니다.
Frame compositing: 여러 입력 영상을 layout의 영역에 맞게 scale/crop하고 하나의 출력 frame으로 합성하는 일반적인 처리입니다. Agora 내부 구현이 특정 pixel blitting 방식을 사용한다고 공개되어 있지는 않습니다.
Layout Engine: Agora는 그리드, 사이드바, 커스텀 좌표 등 배치 설정을 API로 제어할 수 있습니다. 레이아웃 설정에 따라 각 유저 프레임이 Canvas의 어느 좌표에 blitting될지가 결정됩니다.
전체 파이프라인을 표로 정리하면:
| 단계 | 오디오 | 비디오 |
|---|---|---|
| 1. 입력 처리 | 구독한 audio stream | 구독한 video stream |
| 2. 합성 | 여러 audio를 한 output track으로 합성 | layout에 따라 한 output frame으로 합성 |
| 3. 출력 | HLS audio | HLS video |
| 4. 컨테이너 | TS/HLS, 설정 시 MP4 | 같은 output에 포함 |
입력 수, 해상도, frame rate, codec과 layout은 합성 처리량에 영향을 줍니다. 증가율이 항상 선형이라고 단정할 수는 없으므로 자체 후처리와 비교할 때 실제 workload로 측정해야 합니다.
Muxing vs Mixing — 자주 혼동되는 두 개념
이 맥락에서 헷갈리기 쉬운 두 용어를 명확히 구분합니다.
Mixing: 여러 스트림을 하나로 합치는 것 (오디오 믹싱, 비디오 컴포지팅)
Muxing (Multiplexing): 이미 완성된 오디오/비디오 트랙을 하나의 컨테이너(MP4)에 담는 것
비유하자면:
- Mixing = 여러 재료를 섞어서 하나의 요리를 만드는 것 (재료가 합쳐져 구별 불가)
- Muxing = 완성된 반찬들을 도시락 통에 담는 것 (각 트랙은 독립적으로 존재, 컨테이너만 공유)
MP4 파일 안에는 H.264 비디오 트랙과 AAC 오디오 트랙이 별도로 존재합니다. 이 둘을 MP4 컨테이너로 묶는 것이 Muxing입니다. Mixing은 그 이전 단계에서, 여러 참가자 스트림을 각각 단일 트랙으로 합치는 작업입니다.
Web page recording — 웹앱 화면 녹화
Web page recording은 지정한 URL의 화면과 오디오를 하나의 output으로 기록합니다. 녹화 대상 웹앱은 Chrome을 지원해야 하지만, Agora가 사용하는 browser engine과 capture pipeline의 세부 구현은 공개 API 계약이 아닙니다.
웹앱은 지정 URL로 접근 가능해야 하고, 녹화할 모든 콘텐츠가 scroll 없이 한 화면에 표시되어야 합니다. host의 조작을 녹화하려면 그 상태를 웹앱이 recording page에도 동기화해야 합니다.
Web page recording은 지정 URL의 렌더링 결과와 page audio를 녹화하므로, capture 환경에서 정상 렌더링되는 화이트보드·채팅·커스텀 UI를 결과에 포함할 수 있습니다. 브라우저 권한, DRM, cross-origin resource와 자동 재생 정책은 별도로 검증해야 합니다.
Web page recording은 별도 가격 정책을 사용합니다. 내부 process별 CPU·메모리 수치는 공개 문서로 확인되지 않으므로 임의의 상대 배수로 비교하지 않습니다.
녹화 전용 웹페이지 설계 패턴
Web 모드를 사용하려면 Agora 서버가 접속할 웹페이지를 직접 만들어야 합니다. 이 페이지는 세 가지 역할을 합니다:
- 짧은 수명의 opaque recording job ID로 bootstrap 정보를 조회
- 원하는 레이아웃으로 참가자 비디오를 배치
- 녹화에 최적화된 UI (컨트롤 버튼 없음, 고정 해상도)
이 페이지는 실제 사용자에게 노출되는 앱과 분리된 녹화 전용 URL로 배포하는 것이 일반적입니다. 사용자는 이 URL을 직접 방문하지 않고, Agora 서버만 이 URL에 접속합니다.
처리와 요금 비교
공개 문서로 확인되는 처리 차이를 비교하면:
| 병목 | Individual | Composite | Web page |
|---|---|---|---|
| 디코딩 | 유저별 1회 | 유저별 1회 | 브라우저가 처리 |
| 합성 | 없음 | 매 프레임 compositing | 브라우저 DOM 렌더링 |
| 출력 | UID별 파일 | 합성된 단일 output | 웹페이지 화면의 단일 output |
| 요금 기준 | 스트림 수·시간·합산 해상도 | 스트림 수·시간·합산 해상도 | Web page recording 별도 가격 |
Agora 공식 문서는 Individual과 Composite의 녹화 요금이 모드 선택에 좌우되지 않는다고 명시합니다. 자체 FFmpeg 후처리를 추가하면 그 compute·storage·운영 비용은 별도로 계산해야 합니다.
모드 선택 Decision Matrix
요구사항을 기준으로 정리하면:
| 요구사항 | 추천 모드 |
|---|---|
| 화자별 분리 (STT, AI 분석) | Individual |
| 다시보기 영상 하나로 | Composite |
| 화이트보드/웹앱 UI 포함 | Web |
| UID별 후처리 | Individual |
| 별도 합성 작업 없는 단일 결과 | Composite |
Individual 결과를 FFmpeg으로 합성하는 방식은 layout을 사후 결정할 수 있지만 추가 compute와 운영 pipeline이 필요합니다. 비용 절감 여부는 Agora 요금과 자체 후처리 비용을 함께 측정해야 합니다.
핵심 요약
- Individual 모드는 UID별 M3U8과 slice를 저장합니다.
standard는 UID별 merged M3U8을 추가하지만 MP4를 생성하지 않습니다. - Composite 모드는 구독한 audio/video를 합성해 하나의 HLS output을 만들고, 설정하면 MP4도 생성합니다.
- Muxing(컨테이너에 담기)과 Mixing(스트림 합성)은 다른 개념입니다. 혼용하면 아키텍처 논의에서 혼선이 생깁니다.
- Web page recording은 Chrome-compatible 웹페이지의 화면과 오디오를 녹화합니다. 내부 browser engine 구현은 공개 계약이 아닙니다.
- 모드 선택은 출력 구조와 후처리 방식에 영향을 주지만 Individual/Composite 녹화 요금 자체를 결정하지는 않습니다.
시리즈 네비게이션
실시간 통화, 어떻게 녹화하는가 시리즈
관련 글
- #12 실시간 통화, 왜 녹화해야 하는가 — Cloud Recording Architecture — 모드 선택 이전, Cloud Recording의 전체 아키텍처와 동작 원리
- #13 내 서버에서 직접 녹화한다면 — On-Premise vs Cloud Recording — 같은 녹화를 자체 서버에서 할 때의 트레이드오프
- #17 FFmpeg 실전 파이프라인 — Agora 녹화에서 프로덕션 VOD까지 — Individual 모드 파일을 후처리로 합성하는 실제 FFmpeg 파이프라인
- #22 PCM vs WAV — 컨테이너와 코덱 — Composite 모드 오디오 믹싱의 기반인 PCM 샘플과 컨테이너 개념
- #33 Cloud Recording 점프 재생 — moov/ENDLIST/DISCONTINUITY — 녹화 결과물(MP4/HLS)의 재생 가능성과 컨테이너 구조
참고 자료
- Agora Cloud Recording — Overview — Individual/Composite/Web page recording 모드의 공식 정의.
- Individual recording —
streamMode와 UID별 출력 파일. - Composite recording — 합성 레이아웃과 HLS/MP4 출력.
- Web page recording — 녹화 전용 페이지 조건과 설정.
- Media streaming output modes — Individual의 transcoding 여부.
- Cloud Recording pricing — 모드와 무관한 요금 산정 기준.
- ITU-T Rec. H.264 — Advanced video coding — Composite/Web page 출력에서 사용할 수 있는 H.264 코덱 표준
- ITU-T Rec. H.273 — Coding-independent code points — 영상 색 표현과 chroma sampling 관련 표준.
- FFmpeg Documentation — Individual 모드 후처리 합성에 쓰이는 필터/먹싱 레퍼런스