问题:编译freeswitch-1.6.14,总是报错这个,搜索百度,Google各种方式均无效
You must install libilbc-dev to build mod_ilbc
查错定位:其实是有这个库的
[root@localhost ~]# gcc -l ilbc #可以发现当前系统是可以直接找到ilbc库
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: 错误:ld 返回 1
[root@localhost ~]#
[root@localhost ~]# find /usr/ -iname "*ilbc*so*" #可以找到ilbc的库文件
/usr/local/lib/libilbc.so.0.0.2
/usr/local/lib/libilbc.so.0
/usr/local/lib/libilbc.so
/usr/local/freeswitch.2018.03.14/mod/mod_ilbc.so
/usr/local/freeswitch.1.4.4_ilbc_ok/mod/mod_ilbc.so
/usr/local/freeswitch.1.4.4_ilbc_ok/mod/fs_mod_ilbc/mod_ilbc.so
/usr/local/freeswitch/mod/mod_ilbc.so
[root@localhost ~]#
[root@localhost ~]# find /usr/ -iname "*ilbc*h*" #可以找到ilbc的头文件
/usr/local/include/ilbc/ilbc.h
/usr/local/include/ilbc.h
[root@localhost ~]#
freeswitch 与 mod_ilbc, ilbc-dev的关系图
折腾1天了,换个思路:
找到一个与freeswitch-1.6.14 版本相近的freeswitch专用ilbc rpm包
[root@localhost ilbc]# wget --no-check-certificate https://rpmfind.net/linux/mageia/distrib/cauldron/x86_64/media/core/release/freeswitch-codec-ilbc-1.6.19-3.mga7.x86_64.rpm
[root@localhost ilbc]# rpm2cpio freeswitch-codec-ilbc-1.6.19-3.mga7.x86_64.rpm | cpio -div #解压这个包
[root@localhost ilbc]# ldd usr/lib64/freeswitch/mod/mod_ilbc.so |grep -i not #会发现有几个依赖库 找不到
libpq.so.5 => not found
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libtinfo.so.6 => not found
[root@localhost freeswitch-1.6.14]# yum install -y postgresql-devel #解决问题:libpq.so.5 => not found
[root@localhost freeswitch-1.6.14]# cp /usr/lib64/libssl.so /usr/lib64/libssl.so.1.0.0 #解决问题:libssl.so.1.0.0 => not found
[root@localhost freeswitch-1.6.14]# cp /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.1.0.0 #解决问题:libcrypto.so.1.0.0 => not found
[root@localhost ncurses-6.0]# ln -s /usr/lib/libncurses.so.6.0 /usr/lib64/libtinfo.so.6 #解决问题:libtinfo.so.6 => not found
[root@localhost ilbc]# ldd usr/lib64/freeswitch/mod/mod_ilbc.so |grep -i not #会发现库依赖问题全部已经解决
[root@localhost ilbc]# rm -rf /usr/local/freeswitch/mod/mod_ilbc* #清理freeswitch存在的ilbc相关(如果有)
[root@localhost ilbc]# cp usr/lib64/freeswitch/mod/mod_ilbc.so /usr/local/freeswitch/mod/ #复制mod_ilbc.so 到 /usr/local/freeswitch/mod/
[root@localhost ilbc]# vim /usr/local/freeswitch/mod/mod_ilbc.la # 写一个这个库的描述文件
dlname='mod_ilbc.so'
library_names='mod_ilbc.so mod_ilbc.so mod_ilbc.so'
old_library=''
inherited_linker_flags=' -pthread'
dependency_libs=' /usr/local/freeswitch/lib/libfreeswitch.la -L/root/freeswitch-1.4.4/libs/apr-util/xml/expat/lib /usr/local/freeswitch/lib/libexpat.la /usr/local/freeswitch/lib/libapr-1.la -lpthread -lsqlite3 -lcurl -lpcre -lspeex -lspeexdsp -ledit -ltinfo -ldl -lcrypt -lrt -lz -lm -lssl -lcrypto -ljpeg'
weak_library_names=''
current=0
age=0
revision=0
installed=yes
shouldnotlink=yes
dlopen=''
dlpreopen=''
libdir='/usr/local/freeswitch/mod'
[root@localhost ilbc]#
启动freeswitch
[root@localhost bin]# cd /usr/local/freeswitch/bin/
[root@localhost bin]# ./freeswitch -version
FreeSWITCH version: 1.6.14~64bit ( 64bit)
[root@localhost bin]# ./freeswitch #启动freeswitch
[email protected]> show codecs #查看当前已经加载的编解码器
type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,B64 (STANDARD),mod_b64
codec,G.711 alaw,CORE_PCM_MODULE
codec,G.711 ulaw,CORE_PCM_MODULE
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,LPC-10,mod_spandsp
codec,OPUS (STANDARD),mod_opus
codec,PROXY PASS-THROUGH,CORE_PCM_MODULE
codec,PROXY VIDEO PASS-THROUGH,CORE_PCM_MODULE
codec,RAW Signed Linear (16 bit),CORE_PCM_MODULE
codec,Speex,CORE_SPEEX_MODULE
codec,VP8 Video,CORE_VPX_MODULE
codec,VP9 Video,CORE_VPX_MODULE
25 total.
[email protected]>
[email protected]> load mod_ilbc #加载ilbc库
2018-03-14 13:26:50.856441 [INFO] switch_time.c:1415 Timezone reloaded 1750 definitions
2018-03-14 13:26:50.856441 [CONSOLE] switch_loadable_module.c:1540 Successfully Loaded [mod_ilbc]
2018-03-14 13:26:50.856441 [NOTICE] switch_loadable_module.c:207 Adding Codec iLBC 97 iLBC 8000hz 30ms 1ch 13330bps
+OK Reloading XML
+OK
2018-03-14 13:26:50.856441 [NOTICE] switch_loadable_module.c:207 Adding Codec iLBC 98 iLBC 8000hz 20ms 1ch 15200bps
[email protected]> show codecs #验证加载结果
type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,B64 (STANDARD),mod_b64
codec,G.711 alaw,CORE_PCM_MODULE
codec,G.711 ulaw,CORE_PCM_MODULE
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,LPC-10,mod_spandsp
codec,OPUS (STANDARD),mod_opus
codec,PROXY PASS-THROUGH,CORE_PCM_MODULE
codec,PROXY VIDEO PASS-THROUGH,CORE_PCM_MODULE
codec,RAW Signed Linear (16 bit),CORE_PCM_MODULE
codec,Speex,CORE_SPEEX_MODULE
codec,VP8 Video,CORE_VPX_MODULE
codec,VP9 Video,CORE_VPX_MODULE
codec,iLBC,mod_ilbc
26 total.
[email protected]>
接下来设备端验证,将2个手机调为只支持ilbc编码,互打电话。测试成功!
也可以试试freeswitch的音频转码功能。
至此,问题解决。
注意:目前mod_ilbc是手动加载方式,如想自动加载,可写到freeswitch的xml配置文件中。