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

PyVoIP 2.0.0-dev write_audio播放音频仅出噪音,求排查原因

问题解答

你的问题核心大概率是音频编码/格式不匹配,这是VoIP播放音频出现噪音的最常见原因,和你怀疑的客户端-服务器编码不一致、服务器不支持PCMA/PCMU直接相关,具体排查和解决步骤如下:

  • 确认音频文件参数是否符合要求
    PyVoIP默认适配G.711(PCMA/PCMU)编码,要求音频必须是单声道、8kHz采样率、无容器头的原始PCM数据。用ffmpeg查看你的音频文件参数:

    ffmpeg -i your_audio_file
    

    如果输出显示采样率不是8kHz、声道数不是1,或者编码不是PCMA/PCMU,就会导致播放噪音。

  • 转码为标准格式
    使用ffmpeg将音频转成符合要求的PCMU(或PCMA)格式:

    # 转PCMU格式
    ffmpeg -i your_audio_file -ar 8000 -ac 1 -f s16le -codec:a pcm_mulaw output.pcm
    # 转PCMA格式
    ffmpeg -i your_audio_file -ar 8000 -ac 1 -f s16le -codec:a pcm_alaw output.pcm
    
  • 验证通话编码协商结果
    开启PyVoIP的调试日志,查看SDP协商过程,确认服务器与客户端最终协商的编码是否为PCMA/PCMU。如果服务器不支持这两种编码,需要在初始化VoIPPhone时明确指定双方兼容的编码:

    from pyvoip import VoIPPhone
    
    phone = VoIPPhone(
        "server_ip",
        5060,
        "username",
        "password",
        codecs=["PCMA", "PCMU"]  # 优先协商这两种编码
    )
    
  • 正确读取音频数据给write_audio
    write_audio方法需要的是原始PCM字节数据,不要直接读取带WAV头的文件。可以用wave模块提取原始数据:

    import wave
    
    with wave.open("output.pcm", "rb") as wav_file:
        raw_audio = wav_file.readframes(wav_file.getnframes())
        phone.write_audio(raw_audio)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:12