在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
相关产品推荐
相关产品推荐

