操作系统:Debian 12.5_x64
FreeSWITCH版本: 1.10.11
SILK编码由Skype设计,是一种用于VoIP的宽带音频编解码器,它支持8khz、12khz、16khz、24khz四种不同的采样率。今天整理下FreeSWITCH使用silk编码进行通话及转码的笔记,希望对你有帮助。
一、模块安装及配置
1、添加模块编译项
文件:源码根目录的modules.conf文件
添加(或取消注释)如下代码:
codecs/mod_silk

2、编译及安装
需要安装依赖:
https://github.com/freeswitch/libsilk

如果下载过慢,可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20251125 获取。
libsilk库编译及加载命令如下:
./bootstrap.sh
./configure
make && make install
cp /usr/local/lib/pkgconfig/silk.pc /usr/lib64/pkgconfig
ldd

源码目录执行如下命令:
autoreconf -fiv
make clean
./devel-bootstrap.sh && ./configure && make && make install
会编译mod_silk模块并生成文件:

3、加载mod_silk模块
编辑 conf/autoload_configs/modules.conf.xml 文件,添加如下内容:
<load module="mod_silk"/>

重启FreeSWITCH或执行重新load操作:
load mod_silk

如果加载不报错,则添加mod_silk 模块成功。
4、启用编码
配置文件路径:
/usr/local/freeswitch/conf/vars.xml
配置文件内容如下(默认):
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=SILK,OPUS,G722,PCMU,PCMA,L16,H264,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=SILK,OPUS,G722,PCMU,PCMA,L16,H264,VP8"/>

重启freeswitch生效。
二、使用silk编码通话
1、配置话机支持silk编码
配置分机只支持silk编码:

2、验证silk编码通话
添加测试拨号方案:
<extension name="playTest">
<condition field="destination_number" expression="^10087$">
<action application="answer"/>
<action application="playback" data="$${hold_music}"/>
</condition>
</extension>

拨打测试号码(比如10087)进行呼叫测试,效果如下:

三、silk编码转换
1、开启语音编码转换功能
文件:conf/vars.xml
修改或添加内容:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=SILK,OPUS,G722,PCMU,PCMA,L16,H264,VP8"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=SILK,OPUS,G722,PCMU,PCMA,L16,H264,VP8"/>
<X-PRE-PROCESS cmd="set"data="media_mix_inbound_outbound_codecs=true"/>

文件:
sip_profiles/internal.xml
修改或添加如下内容:
<param name="inbound-late-negotiation" value="false"/>
<param name="disable-transcoding" value="false"/>

重启freeswitch生效。
2、通话效果
分机1009 PCMU编码
分机1010 silk编码
通话效果如下:

抓包效果如下:

四、资源下载
本文相关资源及示例配置,可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20251125 获取。

【文件说明】
libsilk.tar.gz : libsilk源码
libsilk-compiled.tar.gz : libsilk源码(已编译,so文件在源码的.libs目录)
fs_mod_silk.tar.gz : mod_silk二进制编译文件