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

在Google Cloud VM(CentOS7)上部署FreeSwitch后无音频问题求助

FreeSWITCH 无音频故障排查(GCP CentOS7 环境)

针对你在GCP CentOS7虚拟机上部署FreeSWITCH后遇到的无音频问题——服务器能启动、呼叫能接入、日志显示音频已发出,但就是听不到声音——结合你已经按官方配置防火墙的情况,给你整理几个优先级较高的排查方向:


1. 先确认「双层防火墙」是否都开对了

GCP的网络规则和CentOS本地的firewalld是两套独立的防火墙,光配本地的没用,得两头都检查:

  • 本地firewalld验证:跑这条命令看已生效的规则:firewall-cmd --list-all,确认有没有包含FreeSWITCH默认的RTP端口范围16384-32768/udp。如果没看到,重新加载规则firewall-cmd --reload,再重启firewalld:systemctl restart firewalld
  • GCP VPC防火墙验证:登录GCP控制台找到对应虚拟机的VPC网络,一定要加一条允许UDP 16384-32768端口双向通行的规则(测试阶段可以暂时把源IP设为0.0.0.0/0,后续再收紧)

2. 修正 NAT 配置(GCP 环境最容易踩的坑)

GCP虚拟机有内网IP和公网IP两个地址,FreeSWITCH默认会用内网IP发RTP包,远端根本收不到,这是绝大多数云环境无音频的核心原因:

  • 打开FreeSWITCH的SIP配置文件:/usr/local/freeswitch/conf/sip_profiles/internal.xml 和 external.xml
  • 找到这两个参数,替换成你虚拟机的公网IP:
    <param name="ext-rtp-ip" value="你的公网IP地址"/>
    <param name="ext-sip-ip" value="你的公网IP地址"/>
    
  • 同时确认rtp-ip参数设为虚拟机的内网IP:
    <param name="rtp-ip" value="你的内网IP地址"/>
    
  • 保存后重启FreeSWITCH:systemctl restart freeswitch,再测试呼叫

3. 抓包确认RTP流到底有没有走通

用tcpdump抓包,直接看RTP包的收发情况,比猜问题靠谱多了:

  • 在服务器上执行:tcpdump -i any udp portrange 16384-32768 -vv
  • 发起测试呼叫,观察输出:
    • 如果只有服务器往外发的包,没有远端进来的包:说明远端没收到,回到防火墙/NAT配置再检查
    • 如果连服务器的出站包都没有:检查FreeSWITCH的RTP端口配置,或者有没有其他进程占用了16384-32768端口

4. 检查音频编码是否协商一致

日志显示音频已发出,但如果两端协商的编码不匹配,照样听不到声音:

  • 打开FreeSWITCH的日志文件/usr/local/freeswitch/log/freeswitch.log,搜索codec关键词,看呼叫双方最终协商的编码是不是同一个(比如都是PCMU或者PCMA)
  • 如果编码不一致,可以在SIP配置文件里强制指定优先编码,比如在internal.xml里加:
    <param name="codec-prefs" value="PCMU,PCMA,G729"/>
    

5. 本地回路测试,排除服务器自身音频问题

先确认服务器本身能处理音频,排除硬件/驱动层面的问题:

  • 登录FreeSWITCH控制台:fs_cli
  • 执行命令:originate loopback/9199 &,然后用你的测试电话拨打9199
  • 如果能听到自己的回声,说明服务器音频处理没问题,问题肯定在网络上;如果听不到,检查服务器的音频驱动或者FreeSWITCH的音频模块是否正常加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:39:00