동시에 200명과 통화할 수 있는 LINE Group Call

안녕하세요, LINE에서 Group Call 서비스를 개발하고 있는 박정준입니다.

LINE에서는 “Closing the Distance”라는 비전을 달성하기 위해서, 다양한 통화 서비스를 제공하고 있습니다. 이번 블로그에서는 그 중에서도 많은 사람들이 동시에 통화할 수 있는 LINE Group Call의 기능과 기술에 대해서 소개해드리려고 합니다.

먼저, LINE Group Call의 기능에 대해서 간단하게 소개하겠습니다.

동시에 200명까지 통화할 수 있는 LINE Group Call

LINE Group Call은 LINE으로 동시에 200명까지 통화할 수 있는 서비스입니다. 2016년 3월에 음성 Group Call 서비스를 먼저 출시하였으며, 이어서 작년 12월에는 영상 Group Call을 출시하였습니다. 음성 통화와 영상 통화 모두 언제 어디서나 무료로 제공됩니다(접속하는 데이터 환경에 따라서 통신 비용이 부과될 수 있습니다).

LINE Group Call을 사용하기 위해서는 아래 사양의 LINE이 설치되어 있어야 합니다.

  • 음성 Group Call: LINE iOS 5.11.0 이상, LINE Android 5.11.0 이상, LINE Desktop(Windows/macOS) 4.5.0 이상
  • 영상 Group Call: LINE iOS 6.9 이상, LINE Android 6.9.2 이상, LINE Desktop(Windows) 5.0.0 이상
  • 대화창에서 간단하게 통화를 시작

    가족이나 친구 또는 직장 동료에 이르기까지 메시지를 주고 받던 그룹 대화방에서 별도의 절차 없이 통화 버튼을 클릭하는 것만으로 음성/영상 Group Call을 시작할 수 있습니다.

    말하고 있는 사람을 표시

    음성 Group Call에서는 현재 말하고 있는 사람이 누구인지 표시하는 기능을 제공합니다. 이러한 표시를 하게 되면 여러 사람과 동시에 통화를 할 경우에도 누가 말하고 있는지 쉽게 알 수 있습니다.

    감정을 표현하는 영상 효과 기능

    영상 Group Call에서는 더 재미있고 즐겁게 통화하기 위해서 감정을 얼굴 주위에 표시하는 효과를 사용할 수 있습니다. Face icon을 클릭하면 여러 가지 감정을 표시하는 효과 중에 선택해서 자신의 얼굴 주위에 사용할 수 있습니다.

    두 가지 영상 통화 레이아웃

    영상 Group Call에서는 특정 상대방의 화면을 크게 확인할 수 있는 레이아웃을 제공합니다. 아래 이미지의 왼쪽 위 화살표 아이콘을 클릭하면 오른쪽 이미지와 같이 큰 화면과 여러 개의 작은 화면으로 구성된 레이아웃으로 전환할 수 있습니다.

    LINE Group Call의 기능에 대해서 살펴봤는데요. 이번에는 이러한 기능을 구현하는 데 사용한 기술에 대해서 소개하겠습니다. 여러 가지 기술 중에서 이번에는 Client/Server network model, Role based server layering, VQE(Voice Quality Enhancement), Multi-layer video stream 기술에 대해서 설명하겠습니다.

    Client/Server network model

    사용자가 사용하는 데이터 네트워크에 따라 다르지만 3G/LTE 환경에서 사용자의 트래픽은 사용자에게 부과되는 요금이기 때문에 모바일 서비스에서는 사용자의 트래픽을 최소화하려는 노력이 필요합니다.

    여러 사용자가 동시에 통화하는 그룹 통화에서 일반적으로 사용되는 Client/Server network model은 크게 아래 3가지입니다.

    Full mesh

    그룹 통화에 참여한 클라이언트 간에 모두 연결을 맺고, 클라이언트 사이에만 서로 음성/영상 데이터를 주고 받는 방식입니다. P2P 파일 공유 방식과 유사한 방식으로 서버로는 트래픽이 크게 들어오지 않아서 서버 트래픽 비용은 감소하게 됩니다.

    하지만, 클라이언트 입장에서는 대화하는 사용자 수만큼 트래픽이 증가하는 문제가 있습니다. 예를 들어서 200명과 통화를 한다면 하나의 클라이언트는 199명의 음성/영상 데이터를 모두 받게 되어 데이터 사용량이 1:1 통화에 비해 199배 증가하는 문제가 있습니다. 이러한 문제때문에 모바일 서비스에서는 사용하기 어려운 방식입니다.

    End system mixing

    이러한 Full mesh의 문제점을 보완하기 위해서 등장한 것이 End system mixing이라는 방식입니다.

    기본적으로는 Full mesh와 유사하나 클라이언트 중에 PC 같이 사양이 좋은 클라이언트를 마치 서버처럼 사용하는 것입니다. 다른 클라이언트들은 서버 역할을 하는 클라이언트에 접속하고, 서버 역할의 클라이언트가 모든 사용자의 음성을 하나의 스트림으로 믹싱하는 방식입니다. 이렇게 되면 서버 역할을 하는 클라이언트에는 트래픽이 집중되지만 나머지 클라이언트는 사용자가 아무리 늘어도 트래픽이 증가하지 않습니다.

    하지만 모바일 환경에서는 클라이언트의 접속이 유선 인터넷처럼 안정적이지 않습니다. 서버 역할을 하는 클라이언트가 안정적으로 인터넷에 접속되어 있어야만 하기 때문에 역시 모바일 환경에서 사용하기 어려운 방식입니다.

    Centralized server

    Centralized server 모델은 전통적인 Client/Server 방식입니다. 모든 클라이언트가 서버에 접속하고 서버에서 하나의 스트림으로 음성을 믹싱하는 방식입니다. 당연히 서버의 트래픽 비용은 증가하지만, 사용자의 트래픽은 참여자가 늘어나도 증가하지 않습니다.

    앞에서 강조한 것처럼 모바일 서비스에서 제일 중요한 점은 사용자의 트래픽을 최소화하는 것이기 때문에 LINE Group Call에서는 서버 트래픽 비용에도 불구하고 Centralized server network model로 개발하였습니다.

    Role based server layering

    LINE Group Call은 230개 이상의 지역에서 사용되는 글로벌 서비스입니다. 어떤 지역에서 통화를 하더라도 최고의 품질을 제공하기 위해서, LINE에서는 여러 지역의 IDC에 Group Call 서버를 제공하고 있습니다.

    이러한 분산 접속 환경과 많은 사용자들을 처리하기 위해서 LINE Group Call 서버는 아래와 같은 layer로 구분되어 있습니다.

    LINE Group Call의 서버는 크게 통화를 시작하고 통화방의 상태와 참여자를 관리하는 Application server layer와 음성 데이터를 처리하는 Voice/Video server layer로 나누어져 있습니다.

    통화 품질과 관련이 많은 Voice/Video server layer는 또한 지역 분산을 위해서, 클라이언트가 접속하는 FrontEnd server와 한 대화방의 음성을 하나로 믹스하고 영상 데이터를 처리하는 MIX server로 나누어져 있습니다.

    모든 인터넷 서비스에서 Network latency가 중요하지만, 통화에서는 목소리가 빠르게 전달되어야 하기 때문에 특히 중요합니다. LINE Group Call에서는 Network latency를 최소화하기 위해서 여러 지역에서 서버들을 운용하고 있습니다.

    LINE Group Call을 할 때에는 가장 가까운 지역의 FrontEnd server에 접속하여 최적의 통화 품질을 제공하려고 하고 있습니다. 또한 서로 다른 지역의 서버들은 전용선으로 연결되어 있어 서로 다른 지역의 사용자 간의 통화에서도 안정적인 통화 품질을 제공합니다.

    VQE(Voice Quality Enhancement)

    통화할 때 사용자가 느끼는 대표적인 불편함이 바로 Noise와 Echo일 것입니다.

    Noise는 통화 상대방의 마이크에 주변 잡음이 섞여 들어오는 것을 말하며, Echo는 자신의 목소리가 상대방의 스피커로 출력되어 상대방의 마이크로 다시 들어와서 마치 메아리처럼 들리는 현상입니다. 유선 전화를 포함한 모든 통화에서 공통적으로 발생하는 현상들이며, LINE에서는 이러한 문제들에 대응하기 위해서 Voice quality enhancement(이하 VQE)라는 소프트웨어 모듈을 구현하였습니다.

    다자간 통화 서비스 Popcorn Buzz의 통화 품질 올리기 블로그에서도 LINE의 VQE에 대해서 소개한 적이 있습니다.

    여러 사용자가 서로 다른 기기로 통화하는 group call의 특성상 한 참여자의 작은 Echo와 Noise도 모이게 되면 큰 불편을 초래하기도 합니다. 그렇기 때문에 LINE Group Call에서는 VQE를 통해서 최대한 Echo와 Noise를 제거하고 있습니다.

    하지만 시중에 출시된 모바일 단말들은 그 종류가 다양하고 서로 다른 음향적 특성이 있습니다. LINE Group Call은 대략 2만 개 이상의 서로 다른 종류의 단말에서 사용할 수 있습니다. 이렇게 다양한 단말들에서도 최적의 통화 품질을 제공하기 위해서 LINE에서는 많은 노력을 기울이고 있습니다.

    LINE Group Call의 품질향상을 위해 인체 청각특성(auditory system)이 적용된 Head and torso simulator(HATS)를 사용하여 ITU-T P.311/341 표준 규격을 측정할 수 있는 무향실(anechoic chamber)를 구축하였습니다.

    출시되는 많은 단말들에 대해 이러한 튜닝 작업을 진행하고 있으며, 또한 단말 제조사와의 협력을 통해서도 문제들을 해결해 나가고 있습니다.

    Multi-layer Video Stream

    LINE Group Call에서는 총 3가지 크기의 화면으로 영상을 제공합니다. 이러한 여러 해상도의 화면을 제공하기 위해서 클라이언트가 여러 종류의 화면을 동시에 서버로 전송하면 역시 사용자의 트래픽이 몇 배로 증가하는 문제가 발생합니다. 또 다른 방법으로는 클라이언트가 가장 높은 해상도로 전송하고 서버가 중간에 Transcoding을 통해 여러 해상도의 화면을 만드는 방법이 있습니다. Transcoding은 CPU를 많이 사용하는 작업이기 때문에, 일반적인 서버 환경에서는 동시에 많은 수의 Transcoding을 수행할 수 없는 문제가 있습니다.

    이러한 문제를 해결하기 위해서, LINE Group Call에서는 Multi-layer video stream 방식으로 개발하였습니다.

    Multi-layer video stream은 video frame을 Multi-layer로 구성하는 방식으로, Transcoding 없이 layer의 조합만으로 여러 해상도의 영상을 만들어 낼 수가 있습니다.

    • Low resolution layer → 가장 낮은 해상도
    • Low resolution layer + Medium resolution layer → 중간 해상도
    • Low resolution layer + Medium resolution layer + High resolution layer → 가장 높은 해상도
    • 카메라로 영상을 녹화하는 클라이언트에서는 모든 Layer를 포함한 Multi-layer video stream을 서버로 전송하며, 서버에서는 해당 사용자의 화면을 시청하는 클라이언트들에게 요구하는 크기에 맞게 Layer를 조합해서 전송하고 있습니다. 이러한 Layer의 조합은 Transcoding이 아니기 때문에 많은 사용자의 통화를 문제 없이 처리할 수 있습니다.

      마무리하며

      가족이나 친구 또는 직장 동료와 간편하게 즐거운 통화를 나눌수 있는 LINE Group Call은 위에서도 언급하였지만 다양한 플랫폼에서 사용하실 수 있습니다. Desktop(macOS)에서도 빠른 시일 안에 영상 Group Call을 출시할 예정입니다. 앞으로도 다양한 플랫폼에서 최고의 통화 품질을 제공하기 위해서 노력하겠습니다. 많은 관심 부탁드립니다.