问题描述
FreeSWITCH版本:1.10.5
CentOS:CentOS Linux release 7.9.2009 (Core), 64位
使用下面的命令,在会议室里面播放png图片:
conference 3000 play {png_ms=100}/usr/local/freeswitch/flv/bg.png
提示报错:
[ERR] switch_core_video.c:3044 This function is not available, libpng not installed
问题定位
打开对应的源代码,可以看到只有定义了宏PNG_SIMPLIFIED_READ_SUPPORTED,才能正确使用switch_img_read_png方法。
而这个宏根据注释,是定义在libpng1.6.0中的,所以需要安装这个版本。
问题解决
安装libpng1.6.37
解压之后,标准流程:
./configure && make && make install
在安装完成后,可以看到在/usr/local/lib/pkgconfig下面含有libpng16.pc和libpng.pc文件。
freeswitch主要依靠pc文件来检查库和依赖库。
尝试1:重新编译freeswitch代码
./configure && make && make install
编译mod_av报错
CC libavmod_la-avformat.lo
In file included from /usr/include/ffmpeg/libavutil/imgutils.h:31:0,
from avformat.c:39:/usr/include/ffmpeg/libavutil/pixdesc.h:34:5: error: type of bit-field ‘plane’ is a GCC extension [-Werror=pedantic]
uint16_t plane : 2; ^/usr/include/ffmpeg/libavutil/pixdesc.h:40:5: error: type of bit-field ‘step_minus1’ is a GCC extension [-Werror=pedantic]
uint16_t step_minus1 : 3; ^/usr/include/ffmpeg/libavutil/pixdesc.h:46:5: error: type of bit-field ‘offset_plus1’ is a GCC extension [-Werror=pedantic]
uint16_t offset_plus1 : 3; ^/usr/include/ffmpeg/libavutil/pixdesc.h:52:5: error: type of bit-field ‘shift’ is a GCC extension [-Werror=pedantic]
uint16_t shift : 3; ^/usr/include/ffmpeg/libavutil/pixdesc.h:57:5: error: type of bit-field ‘depth_minus1’ is a GCC extension [-Werror=pedantic]
uint16_t depth_minus1 : 4;
修改freeswitch-1.10.5.-release/src/mod/applications/mod_av/Makefile,
去掉编译选项里面的pedantic
SWITCH_ANSI_CFLAGS = -Wall -std=c99 -Wdeclaration-after-statement
重新测试
尝试2:使用configure参数--with-pkgconfigdir
指定libpng16
使用下面的命令编译:./configure --with-pkgconfigdir=/usr/local/lib/pkgconfig |grep libpng
得到下面的结果:
checking for libpng >= 1.6.16… checking for libpng16 >= 1.6.16… checking for libpng >= 1.2.49… no
尽管已经指定了pkgconfig的路径,还是查找不到libpng
尝试3:使用PKG_CONFIG_PATH变量指定libpng库的路径
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure |grep libpng
输出结果如下:
[root@idc-146 freeswitch-1.10.5.-release]# ./configure |grep libpng
checking for libpng >= 1.6.16… yes
checking LIBPNG_CFLAGS… -I/usr/local/include/libpng16
成功找到libpng16
总结
在使用源代码安装完libpng16之后,需要使用下面的命令来完成编译:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
./configure |grep libpng