程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

FastRTC:Python 的 RTC 实时通信库

hfteth 2025-06-13 13:24:18 技术文章 1 ℃

RTC (Real Time Communication) 实时通信技术技术已在互联网中被广泛应用,无论是视频会议、在线教育还是游戏语音等场景,都离不开高效的实时通信解决方案。FastRTC 提供了完备且高效的实时通信 RTC 实现,为 Python 开发者提供了便捷的使用途径。


简介

FastRTC 是一个提供实时通信 RTC 实现的 Python 库,其代码仓库位于
https://github.com/freddyaboulton/fastrtc 。该项目能够将任何 Python 函数转化为通过 WebRTC 或 WebSockets 传输的实时音频和视频流,大大地拓展了 Python 在实时通信领域的应用范围。

FastRTC 功能完备,能为开发者提供极大的便利:

  • 内置自动语音检测和轮流发言功能,开发者只需关注如何实现对用户的回应逻辑即可
  • 自动生成用户界面:可以使用 .ui.launch() 方法启动支持 WebRTC 的内置 Gradio 用户界面
  • 支持自动 WebRTC:可以使用 .mount(app) 方法将流挂载到 FastAPI 应用上,从而为前端提供一个 WebRTC 接口
  • 支持 WebSocket:使用 .mount(app) 方法将流挂载到 FastAPI 应用上,从而为前端提供一个 WebSocket 接口
  • 自动支持电话接入:使 fastphone() 方法启动应用程序,即可获得一个免费的临时电话号码
  • 完全可定制的后端:RTC 流可以地挂载到 FastAPI 应用上,开发者可以轻松扩展,以适应生产环境的应用

使用

首先是安装步骤。若只是使用 FastRTC 的基本功能,只需在命令行中执行以下命令:

pip install fastrtc

如果需要使用内置的暂停检测(见 ReplyOnPause)和文本转语音(见 Text To Speech)功能,则需要安装 vad 和 tts 扩展,执行以下命令:

pip install fastrtc[vad, tts]

安装完成后,便可以在项目中使用 FastRTC。FastRTC 主要提供了 Stream 类,其包含 3 个主要方法:

  • .ui.launch():启动一个内置的用户界面,方便对数据流进行测试和分享,该界面由 Gradio 构建。
  • .fastphone():获取一个免费的临时电话号码,用于呼叫接入数据流,需要 Hugging Face 令牌。
  • .mount(app):将数据流挂载到一个 FastAPI 应用上,适合与现有的生产系统进行集成。

以下是一个简单的音频回复应用:

from fastrtc import Stream, ReplyOnPause
import numpy as np

def echo(audio: tuple[int, np.ndarray]):
    # The function will be passed the audio until the user pauses
    # Implement any iterator that yields audio
    # See "LLM Voice Chat" for a more complete example
    yield audio

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

app = FastAPI()
stream.mount(app)

# Optional: Add routes
@app.get("/")
async def _():
    return HTMLResponse(content=open("index.html").read())

# uvicorn app:app --host 0.0.0.0 --port 8000

首先定义了一个 handler 名为 echo,其把接收的音频数据原样返回。然后使用 Stream 类,设置其 handler 为 ReplyOnPause 包装的 echo。最后,通过 FastAPI 启动一个 web 应用,把 stream 加载到该应用上,就完成了一个能够把输入的音频流原样回传的 web 应用。

FastRTC 可以结合 LLM 大模型来实现更有趣的应用:

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")

以上的例子中,通过接入 OpenAI,实现了与大模型的实时语言对话,handler 接收用户的语音输入,然后输送给大模型获取应答,再把回答的语音实时回传给用户端。

总结

FastRTC 作为一个 Python 实时通信库,为开发者提供了便捷的实时音频和视频流处理方案。其丰富的功能和详细的文档,使得开发者可以轻松上手,快速开发出满足需求的实时通信应用。

FastRTC 可以应用在许多不同的领域。在视频会议和实时语音相关应用中,它可以作为核心的通信库,支持多人实时音视频通话;通过与 AI 技术的结合,还可以实现诸如实时的目标检测、实时的 AI 语音对话等复杂应用。

Tags:

最近发表
标签列表