网站首页 > 技术文章 正文
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-13 ScalersTalk 成长会 Python 小组第 9 周学习笔记
- 2025-06-13 Python开发爬虫的常用技术架构(python常用爬虫模块)
- 2025-06-13 python yield -- 生成器(python3 生成器)
- 2025-06-13 Python开发必备:自定义JSON编码器完全指南
- 2025-06-13 [868]ScalersTalk成长会Python小组第16周学习笔记
- 2025-06-13 基于 Python 的 PLC 监控系统深度开发
- 2025-06-13 用Python演示ARP攻击的过程及应对办法
- 2025-06-13 Python语言有哪些特点 怎么能学好Scrapy框架
- 2025-06-13 蓝桥杯备考冲刺必刷题(Python) | 143 饮料换购
- 2025-06-13 轻松转换:Python程序将文本转为摩尔斯电码
- 266℃Python短文,Python中的嵌套条件语句(六)
- 265℃python笔记:for循环嵌套。end=""的作用,图形打印
- 264℃PythonNet:实现Python与.Net代码相互调用!
- 259℃Python实现字符串小写转大写并写入文件
- 258℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 118℃原来2025是完美的平方年,一起探索六种平方的算吧
- 98℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 92℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- Python中怎么给属性增加类型检查或合法性验证?
- 如何把python绘制的动态图形保存为gif文件或视频
- Python XOR异或 操作(python异或函数)
- 每天学点Python知识:使用制表符或换行符来添加空白
- Python3+ 变量命名全攻略:PEP8 规范 + 官方禁忌 + 实战技巧,全搞懂!
- python之类的定义和对象创建篇(如何在python中定义一个属于对象的数据成员?)
- Python函数调用常见的8个错误及解决方案
- Python学不会来打我(30)python模块与包详解
- 《防秃指南:Python高频考点串烧(附翻车现场实录)》
- Python 面向对象:掌握类的继承与组合,让你的代码更高效!
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)