如何增大Asterisk chan_mobile发往SIP的RTP数据包大小?
解决chan_mobile向SIP发送过小RTP数据包的问题
我之前也碰到过类似的Asterisk桥接SIP和chan_mobile时的RTP异常问题,结合你的情况,给你几个可行的调整方向:
1. 配置chan_mobile设备级的RTP包时长
你之前尝试的allow=ulaw:100格式不对,chan_mobile里有专门的参数控制RTP包的时长。直接在chan_mobile.conf中对应你的移动设备配置段(比如[my_phone])里添加:
ptime=20
这里的ptime单位是毫秒,设置为20的话,ulaw编码下对应的RTP payload大小是160字节(8000采样率×20ms×1字节/采样),刚好对应标准的64kbps码率。如果需要更大的包,比如30ms,就设为ptime=30。
2. 检查全局RTP配置是否拖后腿
有时候Asterisk的全局RTP设置会覆盖通道级的配置,打开rtp.conf的[general]段,确保:
ptime=20
如果这里之前被设成了10ms(会导致80字节的小包),就会出现你说的码率过高问题。修改后记得重载RTP模块:
asterisk -rx "module reload res_rtp_asterisk"
3. 强制编码并锁定参数
为了确保chan_mobile不会协商出过小的包,你可以在设备段里先禁用所有其他编码,再指定ulaw并绑定ptime:
disallow=all allow=ulaw ptime=20
这个配置能避免和SIP侧协商出非预期的编码或包时长。
4. 验证配置效果
修改完成后,重载chan_mobile模块:
asterisk -rx "module reload chan_mobile"
然后发起测试呼叫,用tcpdump抓包验证RTP包大小:
tcpdump -i <你的网卡名> portrange 10000-20000 -w mobile_sip_rtp.pcap
用Wireshark打开抓包文件,查看RTP包的Payload Length字段,ulaw编码下20ms的包应该是160左右,这时候码率就会恢复正常,乱序丢包的问题也会缓解。
内容的提问来源于stack exchange,提问作者Alexandr
相关产品推荐
相关产品推荐

