网站首页 > 精选文章 正文
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 语音对话等复杂应用。
猜你喜欢
- 2025-06-28 PaddleHub开源模型400+,三行代码也可实现无限AI创意梦想
- 2025-06-28 一个基于 .NET 开源、跨平台的工业物联网网关,通过可视化配置,能够轻松连接到各种设备和系统!
- 2025-06-28 一天涨 23k Star 的开源项目「GitHub 热点速览」
- 2025-06-28 ZeroMQ,一个不可思议的python库!
- 2025-06-28 Pokemon Go Python 开源版 API(pokemon go adventure sync)
- 2025-06-28 【推荐】一个基于 Python 开源免费、功能强大的库存管理系统
- 2025-06-28 22个受欢迎的Python不同类型开源框架
- 2025-06-28 墙裂推荐,5个学习Python编程最佳的开源库
- 2025-06-28 小白想学习Python必知的7个网站(附全套python教程分享
- 2025-06-28 一款超好用的Python开源可视化库(python可视化需要什么库)
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)