왜 메타는 AV1에 주목했나?

실시간 영상통화(RTC)에서 가장 중요한 것은 적은 대역폭으로 동일한 화질을 유지하는 것입니다. 메타의 오프라인 테스트 결과, AV1은 H.264/AVC 대비 최소 20%의 비트레이트 절감 효과를 보였습니다. 특히 저사양 및 중간 사양 디바이스에서도 일관된 결과를 보여줬는데요.

문제는 현실 네트워크 환경입니다. 특히 신흥 시장의 RTC 환경에서는 비트레이트가 10kbps에서 400kbps 사이를 오갑니다. 100kbps 이하에서도 좋은 화질을 유지하는 것이 핵심 과제였고, AV1은 이 지점에서 H.264 대비 확실한 우위를 보여줬습니다.

실제 A/B 테스트에서 100kbps로 제한했을 때, H.264 영상은 뿌옇게 보인 반면 AV1 영상은 훨씬 선명하게 유지되었습니다.

여기에 더해 AV1은 **팔레트 모드(Palette mode)**와 **인트라 블록 복사(Intra-block copy)**라는 강력한 도구를 메인 프로파일에서 기본 지원합니다. 이는 화면 공유나 텍스트가 많은 콘텐츠(고주파 성분) 압축에 탁월한 성능을 발휘합니다. 기존 코덱이 텍스트 번짐에 취약했던 점을 생각하면, 업무용 화상회의에서 체감 품질 향상이 크게 느껴질 부분입니다.

핵심 요약

  • AV1 vs H.264: 동일 화질 대비 20%+ 비트레이트 절감
  • 저대역폭(100kbps 이하) 환경에서 화질 우위 명확
  • 화면 공유/텍스트 콘텐츠에 특화된 팔레트 모드, 인트라 블록 복사 지원

이러한 이점은 파이썬 3.14.3 출시! 알아둬야 할 주요 변화와 실무 영향에서 다룬 최신 기술 트렌드와도 맞물려, 실시간 커뮤니케이션의 패러다임 전환을 시사합니다.

Network infrastructure diagram showing bandwidth fluctuation and video codec adaptation Coding Session Visual

도입 과정의 3대 난관과 해결 전략

1. 인코더/디코더 선택과 전력 효율

AV1은 고급 코딩 툴로 인해 인코딩 복잡도가 높습니다. 오픈소스 AV1 인코더를 Pixel 8에서 테스트했을 때, H.264 대비 전력 소모가 14% 증가했습니다. 모바일 디바이스에서는 치명적인 문제죠.

해결책: 메타는 자체 저복잡도(Low-Complexity) 인코더를 도입했습니다. H.264 베이스라인과 비슷한 전력 소모를 유지하면서 AV1의 압축 효율을 얻을 수 있도록 울트라-로우 컴플렉시티 프리셋을 개발했어요. 디바이스 성능에 따라 인코더 프리셋을 동적으로 조절하는 메커니즘도 함께 적용했습니다.

# 인코더 프리셋 동적 조절 의사 코드 (실제 메타 구현은 C++ 기반)
# 저사양 디바이스에서 AV1 인코딩 복잡도를 H.264 수준으로 낮추는 개념

def select_encoder_preset(device_capability_score):
    """디바이스 성능 점수에 따라 AV1 인코더 프리셋 선택"""
    if device_capability_score < 30:  # 저사양
        return "ultra_low_complexity"  # H.264 수준 복잡도
    elif device_capability_score < 70:  # 중간
        return "low_complexity"
    else:  # 고사양
        return "high_quality"

def adaptive_preset_adjustment(encoding_latency_ms):
    """실시간 인코딩 지연시간 기반 프리셋 조정"""
    TARGET_LATENCY_MS = 150
    if encoding_latency_ms > TARGET_LATENCY_MS * 1.5:
        # 인코딩이 너무 느리면 복잡도 낮춤
        return "reduce_complexity"
    elif encoding_latency_ms < TARGET_LATENCY_MS * 0.7:
        # 여유 있으면 복잡도 높여 화질 개선
        return "increase_quality"
    else:
        return "maintain"

디코더는 dav1d를 선택했습니다. 여러 오픈소스 디코더를 A/B 테스트한 결과, 전력 효율과 안정성에서 가장 우수한 성능을 보였고, 통화 가능 시간도 늘어났습니다.

2. 바이너리 사이즈 문제

libAOM 기준 AV1 지원을 추가하면 앱 용량이 1.7MB(압축 시 600kB) 증가합니다. 수십억 사용자를 가진 서비스에서는 이 크기가 업데이트 성공률, 앱 시작 시간, 메모리 사용량에 악영향을 줄 수 있습니다. 600kB 증가는 대규모 조직의 1년치 바이너리 사이즈 예산을 소모할 수 있는 수준이에요.

해결책:

  • 동적 다운로드 프레임워크 → 실패율 높아 포기
  • 직접 바이너리 최적화: 양자화 매트릭스(QM) 도구 라이브러리 크기 10% 차지 → 최적화로 절반 축소
  • dav1d 프로젝트에 사이즈 최적화 기여
  • 사용하지 않는 도구를 라이브러리에서 완전 제거 (QM 제거로 60kB 확보)
  • 플랫폼 내장 코덱 지원 활용

3. 디바이스 호환성과 ML 기반 선별

Android는 기기 종류가 너무 많아 단순히 메모리나 출시 연도로 호환 여부를 판단할 수 없었습니다. 메타는 머신러닝 기반 디바이스 자격 프레임워크를 자체 개발했습니다.

# ML 기반 디바이스 AV1 성능 점수 산출 개념
# 실제 모델은 대규모 로그 데이터를 기반으로 학습

def calculate_rtc_score(low_level_stats):
    """
    저수준 성능 통계 기반 AV1 성능 점수 산출
    
    Args:
        low_level_stats: CPU 클럭, GPU 성능, 메모리 대역폭 등
    Returns:
        rtc_score (0~100): 디바이스의 AV1 성능 점수
    """
    features = {
        'cpu_freq_stability': low_level_stats['cpu_freq_stability'],
        'gpu_compute_units': low_level_stats['gpu_compute_units'],
        'memory_bandwidth': low_level_stats['memory_bandwidth'],
        'thermal_throttle_ratio': low_level_stats['thermal_throttle_ratio']
    }
    # 실제로는 GBM(Gradient Boosting Machine) 또는 심층 신경망 사용
    score = model.predict(features)
    return score

# 2계층(Two-Tier) 접근
# Model V1.1: 광범위한 디바이스 지원 시작
# Model V2: 고사양/저사양 디바이스 구분 (2025년 8월 출시)

이 프레임워크를 통해 대다수 모바일 디바이스에서 AV1을 활성화할 수 있었고, 지속적인 데이터 수집으로 모델을 개선 중입니다.

Two smartphones side by side comparing video call quality between H264 and AV1 codec Technical Structure Concept

비트레이트 제어와 에러 복원력: RTC의 핵심

정확한 비트레이트 제어 (Rate Control)

RTC에서는 순간적인 비트레이트 오버슈트가 네트워크 혼잡과 상대방의 영상 끊김을 유발합니다. 메타는 VBV(Video Buffering Verifier) 지연 시간을 지표로 사용합니다.

VBV 지연 시간이 200ms를 넘으면 사용자 경험에 악영향을 미칩니다.

주요 최적화:

  • VBV 버퍼 상태를 추적하여 오버슈트 발생 시 후속 프레임 비트레이트 감소
  • 키프레임 비트레이트 엄격 제어 (일반 인코더는 키프레임 품질을 높이려는 경향이 있음)
  • 언더슈트도 문제: 과도한 보수적 할당은 대역폭 추정을 왜곡하고 화질 저하 유발
  • AV1의 RPR(Reference Picture Resampling) 기능 활용: 해상도 변경 시 키프레임 없이 전환 가능 → 비트레이트 스파이크와 영상 끊김 감소

에러 복원력 (Error Resilience)

패킷 손실이 발생하면 의존성 체인이 깨지고 영상이 멈춥니다. 메타는 두 가지 메커니즘을 적용했습니다.

  1. Temporal Layer (TL)
# Temporal Layer 기반 적응형 에러 복원
# TL 활성화/비활성화 로직 개념

def should_enable_temporal_layer(packet_loss_rate, rtt_ms):
    """네트워크 상태에 따라 Temporal Layer 활성화 여부 결정"""
    if packet_loss_rate > 0.05 or rtt_ms > 200:
        return True  # 손실/지연 많으면 TL 켜서 복원력 확보
    else:
        return False # 안정적인 네트워크에서는 TL 꺼서 압축 효율 유지
  • Base Layer(낮은 프레임레이트)는 Enhancement Layer에 의존하지 않음
  • FEC(Forward Error Correction)를 Base Layer에만 적용
  • RTT가 낮을 때만 Enhancement Layer 재전송
  1. Long-Term Reference (LTR)

LTR은 참조 프레임을 버퍼에 오래 저장하여 손실 발생 시 빠르게 재동기화합니다. 메타는 H.264와 달리 명시적 LTR 인디케이터를 자체 RTP 헤더 확장에 추가하여 네트워크 레이어가 LTR 프레임을 인식하고 ACK를 보낼 수 있게 했습니다.

# LTR 기반 손실 복구 개념

def handle_packet_loss(lost_frame_id):
    """패킷 손실 시 LTRP(Long-Term Reference Predicted) 프레임 요청"""
    if has_acked_ltr_in_buffer():
        # 가장 최근에 ACK된 LTR을 참조하여 LTRP 프레임 생성
        request_ltrp_frame()
    else:
        # LTR이 없으면 키프레임 요청 (비용 큼)
        request_key_frame()

LTR은 키프레임보다 효율적이지만, 오래된 참조 프레임으로 인한 압축 효율 저하를 막기 위해 주기적으로 고품질 프레임을 LTR로 마킹하는 전략을 사용합니다.

비대칭 코덱 설계 (Asymmetric Codec)

중간 사양 디바이스는 AV1 인코딩은 못 하지만 디코딩은 가능한 경우가 많습니다. 이를 활용해 중간 사양 기기는 H.264로 인코딩 → 전송, 고사양 기기로부터 AV1 수신 → 디코딩하는 비대칭 설계를 적용했습니다. 이를 통해 AV1 커버리지를 크게 확장했습니다.


함께 보면 좋은 글

Cloud server rack with machine learning model deployment for device eligibility Development Concept Image

결론: 국내 개발 생태계에서의 적용과 전망

한국 개발자에게 주는 시사점

  1. 실시간 커뮤니케이션 서비스를 개발 중이라면 AV1 도입을 적극 검토할 시점입니다. 특히 모바일 환경에서의 저대역폭 최적화는 경쟁력의 핵심이 될 수 있습니다.

  2. ML 기반 디바이스 호환성 평가는 단순히 OS 버전이나 출시 연도로 판단하는 기존 방식보다 훨씬 정교합니다. 자체 서비스에 맞는 경량화된 ML 모델을 구축하는 것을 고려해보세요.

  3. 비대칭 코덱 설계는 모든 사용자에게 최고 사양을 강요하지 않고도 서비스 품질을 높일 수 있는 실용적인 전략입니다.

주의사항

  • AV1 인코딩은 여전히 전력 소모가 크므로, 배터리 효율이 중요한 모바일 앱에서는 신중한 도입이 필요합니다.
  • 바이너리 사이즈 증가는 무시할 수 없는 요소입니다. 특히 국내 환경에서는 앱 업데이트 성공률에 직접적인 영향을 줄 수 있습니다.
  • 하드웨어 AV1 지원이 보편화되기 전까지는 소프트웨어 인코딩의 한계를 인지해야 합니다. 특히 그룹 콜에서는 여러 스트림을 동시에 디코딩해야 하므로 더 까다롭습니다.

다음 단계 학습 방향

  1. AV1 코덱의 내부 동작 원리를 깊이 이해하고 싶다면 AOMedia의 공식 문서와 libAOM 소스 코드를 분석해보세요.
  2. WebRTC와의 통합: AV1을 WebRTC 파이프라인에 어떻게 통합할지 연구해보는 것도 좋습니다.
  3. 차세대 코덱: AV2 표준화 작업이 진행 중입니다. AV1을 이해하면 AV2 도입에도 유리합니다.

메타의 사례는 단순한 코덱 교체가 아니라 전체 시스템을 재설계하는 과정임을 보여줍니다. 여러분의 서비스에 당장 적용하기는 어려울 수 있지만, 이 글에서 다룬 문제 인식과 해결 방법론은 분명히 큰 도움이 될 거예요.

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.