You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将RTSP流音频传入PyAudio进行语音识别处理?

可以处理RTSP流音频,但需要修改现有代码

你的现有代码是通过PyAudio读取本地麦克风的音频输入,要处理RTSP流的音频,需要替换音频输入的来源——从网络RTSP流中提取并转换音频数据,再喂给Vosk的识别器。

修改思路

  • 放弃PyAudio读取麦克风的逻辑,改用FFmpeg(或其Python绑定库ffmpeg-python)拉取RTSP流,解封装出音频流,并转换成Vosk要求的格式(16位单声道PCM,采样率128000,和你现有代码的参数匹配)。
  • 把转换后的音频数据流直接传给KaldiRecognizer.AcceptWaveform()做识别。

修改后的代码示例

import json
from vosk import Model, KaldiRecognizer
import ffmpeg
from Analysis import Voice_tag

class RTSPVoiceRecognizer():
    def __init__(self, rtsp_url):
        # 初始化Vosk模型,保持原采样率参数
        model = Model("model1")
        self.rec = KaldiRecognizer(model, 128000)
        
        # 用FFmpeg拉取RTSP流,提取音频并转换格式
        self.process = (
            ffmpeg
            .input(rtsp_url)
            .output('pipe:', format='s16le', acodec='pcm_s16le', ac=1, ar=128000)
            .run_async(pipe_stdout=True)
        )
        
        # 启动识别循环
        self.start_recognition()

    def start_recognition(self):
        print('RTSP音频识别已启动')
        while True:
            # 从FFmpeg的输出管道读取音频数据
            data = self.process.stdout.read(32000)
            if not data:
                break
            # 喂给Vosk识别器
            if self.rec.AcceptWaveform(data):
                out = json.loads(self.rec.Result())
                if out['text']:
                    print(f"识别结果: {out['text']}")
                    # 调用原有的Voice_tag处理逻辑
                    Voice_tag(out['text'])
                    print(" ")

# 替换成你的RTSP流地址
rtsp_url = "rtsp://your-rtsp-stream-url"
recognizer = RTSPVoiceRecognizer(rtsp_url)

注意事项

  • 先安装依赖:pip install ffmpeg-python,同时确保系统已经安装了FFmpeg(可以通过ffmpeg -version验证)。
  • 确保RTSP流的音频编码可以被FFmpeg解码,如果流的参数和代码中指定的ar=128000(采样率)、ac=1(单声道)不匹配,FFmpeg会自动转换,但如果差异过大可能影响识别效果。
  • 原代码中未定义的CamVoise()方法已被整合到识别循环逻辑中,可根据自身需求调整结构。

内容的提问来源于stack exchange,提问作者Genry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:05:48