본문 바로가기

EOS 보이스 인터페이스

@iamrain2025. 12. 26. 20:31

에픽 온라인 서브시스템(EOS) 보이스 인터페이스

에픽 온라인 서브시스템(Epic Online Subsystem, EOS)은 에픽게임즈에서 제공하는 무료 크로스 플랫폼 온라인 서비스로 로비, 매치메이킹, 플레이어 데이터 저장, 리더보드, 안티 치트 등 다양한 기능을 포함하며, 그중 핵심 기능 중 하나가 바로 보이스 인터페이스(Voice Interface)입니다.

EOS 보이스 인터페이스는 개발자가 자신의 게임에 손쉽게 고품질의 실시간 음성 채팅 기능을 통합할 수 있도록 지원합니다. 언리얼 엔진에는 EOS Voice Chat 플러그인 형태로 통합되어 있으며, 엔진의 제네릭 인터페이스인 IVoiceChat을 통해 추상화되어 있어 특정 서비스에 종속되지 않는 유연한 개발이 가능합니다.


동작 계층 구조 (Architectural Layers)

EOS 보이스 인터페이스의 동작은 여러 계층으로 나눌 수 있습니다.

1. 애플리케이션 계층 (Application Layer)

  • 주체: 게임 코드 (C++ 또는 블루프린트)
  • 설명: 개발자가 직접 코드를 작성하는 최상위 계층입니다. 언리얼 엔진이 제공하는 제네릭 인터페이스인 IVoiceChatIVoiceChatUser를 사용하여 음성 채팅 기능을 제어합니다. 예를 들어, 특정 플레이어를 음소거하거나, 채널에 입장/퇴장하는 등의 로직을 이 계층에서 구현합니다. 개발자는 EOS의 복잡한 내부 구현을 알 필요 없이, 추상화된 함수를 호출하기만 하면 됩니다.
  • 주요 작업:
    • IVoiceChat::CreateUser(): 로컬 플레이어에 대한 보이스 유저 인스턴스 생성
    • IVoiceChatUser::Login(): 생성된 유저를 EOS 서비스에 로그인 (Product User ID 사용)
    • IVoiceChatUser::JoinChannel() / LeaveChannel(): 특정 음성 채널에 참가 또는 퇴장
    • IVoiceChatUser::SetMicMuted() / SetSpeakerMuted(): 마이크 또는 스피커 음소거 설정

2. 언리얼 엔진 추상화 계층 (Unreal Engine Abstraction Layer)

  • 주체: IVoiceChat 인터페이스, OnlineSubsystem 모듈
  • 설명: 언리얼 엔진은 다양한 온라인 서비스를 동일한 방식으로 사용할 수 있도록 OnlineSubsystem이라는 추상화 계층을 제공합니다. IVoiceChat은 이 구조의 일부로, 음성 채팅 기능에 대한 표준 API를 정의합니다. 이 덕분에 개발자는 백엔드 서비스가 EOS든, Vivox든, 또는 다른 플랫폼(PSN, Xbox Live)이든 상관없이 일관된 코드를 유지할 수 있습니다. 실제 구현은 각 서브시스템 플러그인이 담당합니다.

3. EOS 서브시스템 구현 계층 (EOS Subsystem Implementation Layer)

  • 주체: OnlineSubsystemEOS 플러그인, EOS Voice Chat 플러그인
  • 설명: 이 계층은 언리얼 엔진의 추상 인터페이스(IVoiceChat)와 실제 EOS SDK를 연결하는 다리 역할을 합니다. EOS Voice Chat 플러그인은 IVoiceChat 인터페이스를 상속받아 실제 기능을 EOS SDK의 함수를 호출하여 구현합니다.
  • 주요 통합 방식:
    • 로비(Lobbies) 방식: EOS 로비 기능을 사용하는 경우, 가장 간단한 통합 방법입니다. 로비를 생성할 때 bEnableRTCRoom 플래그를 활성화하면, 로비에 참가하는 플레이어들은 자동으로 해당 로비에 연결된 음성 채팅 룸에 입장하게 됩니다. 모든 과정이 자동으로 처리되어 개발이 매우 편리합니다.
    • 신뢰 서버(Trusted Server) 방식: 개발자가 음성 채널을 직접 제어하고 싶을 때 사용합니다. 이 방식에서는 개발자가 별도의 신뢰 서버를 구축해야 합니다. 클라이언트가 음성 채팅을 요청하면, 이 신뢰 서버가 EOS 백엔드에 인증하여 채널에 참가할 수 있는 토큰(Token)을 발급받아 클라이언트에게 전달합니다. 클라이언트는 이 토큰을 사용하여 JoinChannel 함수를 호출합니다. 더 복잡하지만, 채널 관리 및 권한 제어 측면에서 훨씬 유연합니다.

4. EOS SDK 계층 (EOS SDK Layer)

  • 주체: Epic Online Services SDK (C/C++ 라이브러리)
  • 설명: EOS Voice Chat 플러그인은 내부적으로 C/C++로 작성된 EOS SDK를 호출합니다. 이 SDK는 EOS 백엔드 서비스와의 모든 저수준(low-level) 통신을 담당합니다. 인증, 세션 관리, RTC(Real-Time Communication) 연결 설정, 데이터 암호화 등 복잡한 작업들을 캡슐화하여 제공합니다.

5. EOS 백엔드 서비스 계층 (EOS Backend Services Layer)

  • 주체: 에픽게임즈의 글로벌 서버 인프라
  • 설명: 전 세계에 분산된 에픽의 서버들입니다. 플레이어 간의 P2P 연결을 중계하거나, P2P 연결이 실패할 경우 릴레이 서버(Relay Server) 역할을 하여 음성 데이터를 대신 전송해줍니다. 또한, 룸 관리, 사용자 인증, 데이터 라우팅 등 음성 채팅 서비스의 핵심 로직을 처리합니다.

6. 네트워크 및 전송 계층 (Network & Transport Layer)

  • 주체: UDP, RTP/RTCP, Opus 코덱
  • 설명: 실제 음성 데이터가 전송되는 방식입니다.
    • 오디오 캡처 및 인코딩: 마이크로부터 입력된 오디오는 먼저 Opus 코덱을 사용하여 압축됩니다. Opus는 낮은 지연 시간과 높은 음질을 동시에 제공하여 실시간 통신에 매우 적합한 코덱입니다.
    • 패킷화: 인코딩된 데이터는 RTP(Real-time Transport Protocol) 표준에 따라 패킷으로 만들어집니다. 각 패킷에는 순서 번호, 타임스탬프 등의 정보가 포함되어 수신 측에서 데이터를 올바르게 재조립할 수 있도록 돕습니다.
    • 전송: 이 RTP 패킷들은 UDP(User Datagram Protocol)를 통해 상대방에게 전송됩니다. TCP와 달리 전송 속도가 중요한 실시간 통신에서는 약간의 데이터 손실을 감수하더라도 지연 시간을 최소화할 수 있는 UDP가 선호됩니다.
    • 수신 및 디코딩: 수신 측에서는 도착한 RTP 패킷을 지터 버퍼(Jitter Buffer)에 잠시 저장하여 네트워크 지연 변동(Jitter)으로 인한 순서 뒤바뀜이나 끊김 현상을 보정합니다. 이후 패킷을 순서대로 조립하고 Opus 코덱으로 디코딩하여 스피커로 재생합니다.

핵심 기능 및 구현 방식

  • 인증 및 로그인: 모든 유저는 EOS에 로그인해야 보이스 서비스를 사용할 수 있습니다. 각 유저는 플랫폼에 종속되지 않는 고유 식별자인 Product User ID (PUID)를 통해 식별됩니다.
  • 음성 데이터 전송: 기본적으로 P2P(Peer-to-Peer) 방식을 사용합니다. 플레이어들이 서로 직접 음성 데이터를 주고받아 서버 부하와 지연 시간을 최소화합니다. 만약 방화벽이나 NAT 문제로 P2P 연결이 실패하면, EOS 백엔드의 릴레이 서버가 자동으로 개입하여 데이터를 중계해줍니다.
  • 음소거 기능:
    • 로컬 음소거: SetMicMuted(true)와 같이 자신의 마이크나 스피커를 끄는 기능입니다. 데이터 전송 자체가 차단됩니다.
    • 원격 음소거: SetRemoteMuted(targetPUID, true)와 같이 다른 특정 플레이어의 목소리를 듣지 않도록 설정하는 기능입니다. 데이터는 계속 수신되지만 클라이언트단에서 오디오 재생을 차단합니다.
  • 음성 활동 감지 (Voice Activity Detection, VAD): EOS 보이스는 VAD 기능을 내장하고 있어, 플레이어가 말을 할 때만 데이터를 전송합니다. 이를 통해 불필요한 네트워크 대역폭 낭비를 막고 효율성을 높입니다.

다른 솔루션과의 비교

기능 EOS Voice Vivox 플랫폼 종속 솔루션 (PSN, Xbox Live)
비용 무료 유료 (사용량 기반) 무료 (플랫폼 사용료에 포함)
플랫폼 크로스 플랫폼 지원 (PC, 콘솔, 모바일) 크로스 플랫폼 지원 단일 플랫폼만 지원
엔진 통합 언리얼 엔진에 매우 긴밀하게 통합 별도 SDK 통합 필요 (UE 플러그인 제공) 플랫폼 SDK를 통해 직접 통합
주요 기능 기본 음성 채팅, 로비/세션 연동 3D 포지셔널 오디오, 고급 관리 도구 등 기본적인 음성 채팅, 파티 기능 연동
장점 - 비용 없음
- EOS 생태계(로비, 매치메이킹 등)와 완벽 연동
- 쉬운 초기 설정
- 성숙하고 안정적인 기술
- 풍부한 부가 기능
- 해당 플랫폼 유저에게 가장 익숙한 경험
- 별도 계정 필요 없음
단점 - Vivox 대비 부가 기능 부족 - 비용 발생
- 별도 계약 및 관리 필요
- 크로스 플레이 불가능
사용 시나리오 크로스 플레이를 지원하는 인디/중소규모 게임, EOS를 주력 백엔드로 사용하는 프로젝트 고품질의 3D 오디오나 고급 기능이 필수적인 대규모 상용 프로젝트 특정 콘솔 플랫폼에만 독점 출시하는 게임

 

'Unreal' 카테고리의 다른 글

Voxel Terrain  (0) 2026.01.06
EOS 보이스 채팅 구현  (0) 2026.01.05
Unreal Engine 패키징  (0) 2025.12.24
Installed Engine vs Source Build Engine  (0) 2025.12.23
포스트 프로세스 볼륨 Post Process Volume  (1) 2025.12.19
iamrain
@iamrain :: Annals of Unreal

iamrain 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차