AI 탐구노트

Python을 위한 실시간 통신 라이브러리, FastRTC 본문

기술 팁

Python을 위한 실시간 통신 라이브러리, FastRTC

42morrow 2025. 2. 27. 15:13

 

최근 인공지능 기술의 발전과 함께 실시간 음성 및 영상 처리에 대한 수요가 급격히 증가하고 있습니다. 다양한 산업 분야에서 실시간 데이터 처리는 사용자 경험을 향상시키고, 보다 즉각적인 피드백을 제공하는 데 중요한 역할을 합니다. 그러나 이러한 실시간 애플리케이션을 구축하는 것은 여전히 많은 개발자들에게 도전 과제로 남아 있습니다.

 

특히, 머신러닝 엔지니어들은 WebRTC와 같은 실시간 통신 기술에 대한 경험이 부족한 경우가 많으며 Python에서 실시간 오디오/비디오 애플리케이션을 지원하는 코드를 작성하는 데 어려움을 겪을 수 있습니다. 이러한 문제를 해결하기 위해, Python 개발자들이 손쉽게 실시간 오디오 및 비디오 AI 애플리케이션을 구축할 수 있도록 설계된 라이브러리인 FastRTC가 등장하였습니다.

 

전통적으로 실시간 오디오 및 비디오 스트리밍 애플리케이션을 개발하려면 WebRTC, WebSockets 등의 기술을 직접 구현해야 했습니다. 이는 개발자에게 높은 수준의 네트워크 프로그래밍 지식과 복잡한 인프라 설정을 요구하였습니다. 특히, Python 환경에서는 이러한 실시간 통신 기능을 구현하는 데 제한적이었으며, 이는 개발 시간의 증가와 유지보수의 어려움으로 이어졌습니다.


FastRTC 란?

FastRTC는 위에서 언급한 문제를 해결하기 위해 개발된 Python용 실시간 통신 라이브러리입니다. 이 라이브러리는 개발자가 Python 함수만으로 실시간 오디오 및 비디오 스트림을 WebRTC 또는 WebSockets를 통해 구현할 수 있도록 지원합니다. 이를 통해 복잡한 네트워크 프로그래밍 없이도 실시간 통신 기능을 손쉽게 애플리케이션에 통합할 수 있습니다.

 

그림 : FastRTC를 소개하는 Gradio (powered by HuggingFace) 앱 소개 이미지

 

FastRTC의 세부 기능

 

자동 음성 감지 및 턴 테이킹

FastRTC는 자동 음성 감지와 턴 테이킹 기능을 내장하고 있어, 사용자에게 응답하는 로직에만 집중할 수 있습니다. 이를 통해 대화형 애플리케이션 개발 시 음성 입력의 시작과 끝을 감지하는 복잡한 로직을 구현할 필요가 없게 됩니다. 실제 예로 Whisper 등을 이용해 동시 통역하는 앱을 만든다고 했을 때, 문장의 시작과 끝을 제대로 감지하지 못하면 문장이 어중간하게 중간쯤에서 끊기게 되고 그 결과 최종 번역되는 내용이 엉뚱한 내용이 될 수도 있는 것이죠. 

 

자동 UI 생성

내장된 Gradio UI를 통해 WebRTC를 지원하는 인터페이스를 자동으로 생성합니다. 개발자는 .ui.launch() 메서드를 호출하여 손쉽게 테스트 및 배포 가능한 UI를 생성할 수 있습니다. 손쉽게 웹 기반 앱 인터페이스를 만들고자 하는 개발자에겐 Gradio는 참 고마운 존재 같습니다. ^^;

 

WebRTC 및 WebSocket 지원

FastRTC는 FastAPI 애플리케이션에 스트림을 마운트하여 WebRTC 및 WebSocket 엔드포인트를 자동으로 생성합니다. 이를 통해 다양한 프론트엔드와의 통합이 용이하며, 실시간 통신을 위한 백엔드 인프라를 간편하게 구축할 수 있습니다.

 

전화 통화 지원

fastphone() 메서드를 사용하여 무료 임시 전화번호를 생성하고, 이를 통해 오디오 스트림에 전화를 통해 접속할 수 있는데 이 기능은 Hugging Face 토큰이 필요하며, PRO 계정의 경우 더 높은 한도를 제공한답니다. 다만... 우리나라에서는 이 부분이 어떤 구조로 동작하게 되는지 잘 모르겠습니다. ^^; 

 

커스터마이즈 가능한 백엔드

Stream 객체는 FastAPI 애플리케이션에 쉽게 마운트할 수 있어, 사용자가 자신의 요구에 맞게 백엔드를 확장하거나 커스터마이즈할 수 있습니다. 이를 통해 특정한 비즈니스 로직이나 추가 기능을 손쉽게 통합할 수 있습니다.

 

FastRTC의 지원 모드 및 모달리티

  • 지원 스트림 모드 : send-receive (양방향 스트리밍), send (클라이언트-서버 전용 단방향), receive (서버 대 클라이언트 전용)
  • 지원 모달리티 : video, audio, audio-video 

FastRTC의 제약사항

현재 FastRTC의 fastphone() 기능을 사용하려면 Hugging Face 토큰이 필요하며, 무료 계정의 경우 사용 시간에 제한이 있습니다. 또한, PRO 계정이 아닌 경우 일부 기능에 대한 접근이 제한될 수 있습니다.


FastRTC의 설치

# 기본 설치
$ pip install fastrtc

#추가 플러그인 설치를 위해서는
$ pip install fastrtc[vad, stt,tts]

 

 

FastRTC 사용법 예시

FastRTC cookbook 페이지에는 Gemini, OpenAI, ElevenLabs, Llama 등의 LLM과 보이스 챗을 하는 예제들이 소개되어 있는데 그 가운데 하나의 코드 (그나마 제일 간단한)를 옮겨봅니다. 참고로 아래는 sambanova에서 제공하는 Llama 모델을 이용하는 사례입니다. 

import os

from fastrtc import (ReplyOnPause, Stream, get_stt_model, get_tts_model)
from openai import OpenAI

sambanova_client = OpenAI(
    api_key=os.getenv("SAMBANOVA_API_KEY"), base_url="https://api.sambanova.ai/v1"
)
stt_model = get_stt_model()
tts_model = get_tts_model()

def echo(audio):
    prompt = stt_model.stt(audio)
    response = sambanova_client.chat.completions.create(
        model="Meta-Llama-3.2-3B-Instruct",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=200,
    )
    prompt = response.choices[0].message.content
    for audio_chunk in tts_model.stream_tts_sync(prompt):
        yield audio_chunk

stream = Stream(ReplyOnPause(echo), modality="audio", mode="send-receive")

stream.ui.launch()

 

사용하게 되는 Chat 서비스 혹은 영상 분석 서비스 별로 코드가 약간씩 다르긴 하지만 핵심적인 부분은 동일합니다. 


 

FastRTC는 Python 개발자들이 복잡한 네트워크 프로그래밍 없이도 실시간 오디오 및 비디오 애플리케이션을 구축할 수 있도록 도와주는 강력한 도구입니다!  자동 음성 감지, 턴 테이킹, 자동 UI 생성 등 다양한 기능을 통해 개발 효율성을 높이고, 실시간 통신 기능을 손쉽게 통합할 수 있습니다.

 

향후 제약사항으로 언급된 부분들이 개선된다면, 더 많은 개발자들이 FastRTC를 활용하여 혁신적인 실시간 애플리케이션을 개발할 수 있을 것으로 기대됩니다.


참고자료

  • 문서) FastRTC 상세 문서 페이지 (링크)
  • 코드) FastRTC Github Repository (링크)
  • 데모) FastRTC를 이용한 사례 Cookbook (링크)

Q&A

 

Q. FastRTC는 어떤 환경에서 사용이 가능한가요?

FastRTC는 Python 환경에서 사용 가능하며, WebRTC 및 WebSocket을 지원하는 모든 플랫폼과 호환됩니다.

 

Q. fastphone() 기능을 사용하려면 어떤 조건이 필요한가요?

fastphone() 기능을 사용하려면 Hugging Face 토큰이 필요하며, PRO 계정의 경우 더 높은 사용 한도를 제공합니다.

 

Q. FastRTC를 사용하여 어떤 종류의 애플리케이션을 개발할 수 있나요?

FastRTC를 사용하여 실시간 오디오 및 비디오 스트리밍, 대화형 AI, 실시간 데이터 처리 등 다양한 애플리케이션을 개발할 수 있습니다.