在CentOS 7上部署FreeSWITCH的过程

CentOS 7提供了FreeSWITCH的安装包(编译自1.6.15版本的源码),可以通过yum命令直接下载、安装。

我们为什么没有直接使用这个安装包,而是选择直接从源码编译FreeSWITCH,是因为这个安装包存在如下问题:

   1)缺少libav库。实现转码的模块mod_av依赖该库;

   2)缺少mod_rtmp模块。该模块支持基于Flash的终端。

   3)1.6.15版本的源码,通过rtmp拨打电话时,会导致程序崩溃。

我们目前使用的FreeSWITCH源码版本是1.6.10。

FreeSWITCH官方推荐的CentOS版本,要求至少是CentOS7.0。CentOS7的安装本文不讲解,请查阅其它资料自行安装。

以下的过程假定CentOS已经安装(最小化安装)

一、编译环境和FreeSWITCH依赖库

   1、让网卡自动启用


      CentOS 7安装后,有时候网卡并未自动启用,需要修改配置文件,让网卡跟随系统自动启用。

        1)进入目录/etc/sysconfig/network-scripts/

        2) 修改ifcfg-enxxxxxxxx 文件   (即你的网卡标识命名的配置文件)

        3) 将ONBOOT=no改成yes

        4) 保存后重启即可

    2、会用到的工具软件

      1)ifconfig工具

       ifconfig常用来查询IP地址等信息,CentOS7最小化安装时没有安装这个工具。

       安装命令:yum install net-tools.x86_64

       说明:

           也可以使用ip addr命令查看IP地址

      2)patch工具

       libav库编译之前需要打一个补丁文件。patch的安装命令是:

       yum install patch

      3)rzsz工具

       该工具用于配合xshell上传文件到CentOS系统中,安装命令是:

       yum install lrzsz

       说明:

           XShell连上CentOS后,直接把文件拖到XShell窗口,就可以上传文件到CentOS系统中。


    3、FreeSWITCH官方环境和依赖库


      依次执行如下两条命令,安装编译环境和依赖库:

      yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-release

      yum install -y git gcc-c++ wget alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel db-devel e2fsprogs-devel flite-devel g722_1-devel gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libtool libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python26-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel libuuid-devel which yasm zlib-devel

    4、关闭防火墙

      CentOS7的防火墙会阻止客户端连接FreeSWITCH,需要关闭它。CentOS 7.0默认使用的是firewalld防火墙。

          停止firewalld        :systemctl stop firewalld.service

          禁止firewall开机启动 :systemctl disable firewalld.service 

      说明:

          可以使用systemctl status firewalld.service命令检查firewalld是否已经启动。

sudo useradd freeswitch

sudo groupadd freeswitch

      查看SELinux状态:

1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SELinux status:                 enabled

2、getenforce                 ##也可以用这个命令检查

关闭SELinux:

1、临时关闭(不用重启机器):

setenforce 0                  ##设置SELinux 成为permissive模式

                              ##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

    5、指定动态链接库的搜索目录


       在/etc/ld.so.conf.d目录下建立一个文件,文件名随便取,例如:locallib.conf,

       然后在locallib.conf输入一行:/usr/local/lib。

       说明:

           编译x264和libav时,它们的库默认会安装到/usr/local/lib中。CentOS 64位版链接动态库时默认不会搜索这个目录。

           为了让程序链接时可以找到这些库,需要把 /usr/local/lib 加到动态库的搜索列表中

           安装动态库后,可以执行ldconfig刷新。也可以直接重启电脑,让系统自动刷新。

二、其它依赖库

   FreeSWITCH默认只支持VP8视频编码,为了支持使用H264编码的终端,需要使用libav进行转码。libav库依赖x264库做H264的编码。所以,

   需要先编译x264库,然后编译libav库。


   1、x264

     1)获取源码

       下载:git clone git://git.videolan.org/x264.git


     2)编译、安装

       tar -xvf x264-20170217.tar.gz

       cd x264

       ./configure --enable-static --enable-pic       

       make

       make install

       cp /usr/local/lib/pkgconfig/x264.pc /usr/lib64/pkgconfig/   // 用来让libav编译时,可以找到x264的库 

       ldconfig                                                    // 执行刷新,以让程序运行时可以找到x264的库。本例因为使用了静态库,应该不需要这步 

       说明:

           x264提供H264的编码。libav库依赖它。

   2、librtmp

      make

      make install

       cp /usr/local/lib/pkgconfig/librtmp.pc /usr/lib64/pkgconfig/   // 用来让libav编译时,可以找到x264的库 

       ldconfig                                                    // 执行刷新,以让程序运行时可以找到x264的库。本例因为使用了静态库,应该不需要这步 

       说明:

           librtmp提供rtmp的解包。libav库依赖它。


   3、编译libav

      1)获取源码

         下载:git clone https://freeswitch.org/stash/scm/sd/libav.git


      2)编译、安装        

        tar -xvf libav-20170217.tar.gz

        cd libav

        patch -p1 < 0001-Fix-linking-errors-when-VC1-parser-is-enabled-and-VC.patch                       // 打补丁,FreeSWITCH对libav做了修改

        ./configure --enable-pic --enable-shared  --enable-libx264 --enable-gpl --extra-libs="-ldl" 

        make                                                                                              

        make install

        ./configure --enable-pic --enable-shared  --enable-libx264 --enable-librtmp --enable-gpl --extra-libs="-ldl"

        cp /usr/local/lib/pkgconfig/libavcodec.pc    /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libavdevice.pc   /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libavfilter.pc   /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libavformat.pc   /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libavresample.pc /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libavutil.pc     /usr/lib64/pkgconfig/

        cp /usr/local/lib/pkgconfig/libswscale.pc    /usr/lib64/pkgconfig/

        ldconfig                                                                            

      说明:

          libav是一个编解码库,FreeSWITCH的转码模块mod_av依赖它实现。

三、编译FreeSWITCH

        1、下载

            git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch


2、配置

           cd freeswitch-1.6.10

           ./configure --enable-core-pgsql-support

        3、mod_av和mod_rtmp模块

           修改源码目录下的modules.conf文件。

编译mod_av模块,  把第2行#applications/mod_av前的#去掉

编译mod_rtmp模块,把第92行#endpoints/mod_rtmp前的#去掉

           说明:

FreeSWITCH的很多功能模块会编译为动态库,在程序启动时根据配置文件加载。我们需要的转码和rtmp模块默认不被编译。

在编译之前,需要


4、编译、安装

make

make install

         5、声音文件


四、运行前配置

    1、加载mod_av和mod_rtmp模块

 如果需要程序运行时自动加载模块,需要修改程序的配置文件,位置在/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml文件

      大约104行 ,把注释去掉,让它生效。将会自动加载mod_av模块。

      大约49行  ,把注释去掉,让它生效。将会自动加载mod_rtmp模块。

      说明:

           mod_av模块提供转码功能。使用h264和vp8的客户端之间可以进行视频通讯

   mod_rtmp模块实现了rtmp协议。可以让运行在Flash Player中的swf程序和FreeSWITCH通讯。间接让IE实现了实时通讯。

    2、更改FreeSWITCH默认登录密码

修改/usr/local/freeswitch/conf/vars.xml,大约15行

           

修改为

                

        说明:

    使用FreeSWITCH的默认密码1234登录,会有10秒的延时。把默认密码改为2345。


    3、增加H264编码支持

修改/usr/local/freeswitch/conf/vars.xml,大约258和259行,检查global_codec_prefs和outbound_codec_prefs中是否有H264。如下两行:

   

   

说明:

     FreeSWITCH的默认只支持VP8编码,如果要使用H264编码,需要增加H264。

    4、修改WSS端口

       修改/usr/local/freeswitch/conf/sip_profiles/internal.xml,大约313行:

             

  修改为

     

       说明:

   WSS端口是WebSocket的安全连接端口。默认是7443,因为会和IM服务的端口冲突,所以修改为8443。

     5、ESL配置

修改/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml,

    检查 这样中的value是不是等于"::",如不是需要修改;


    修改为

   

说明:

    使用ESL库,默认只能连接本机安装的FreeSWITCH。如果要连接局域网内其它主机上的FreeSWITCH,则需要做如上修改。

            ESL使外部程序可以通过发送命令来控制FreeSWITCH。

      6、为FreeSWITCH增加30000到39999共10000个号码

第一步

     修改/usr/local/freeswitch/conf/dialplan/default.xml,大约265行,找到name为Local_Extension的extension,

     ,修改如下行的expression属性

 

修改为:

  

说明:

也就是为expression中的正则表达式,增加一个条件,与原来的条件做或运算,这样新号码段和旧号码段都可以使用。

新增加部分为:3\d{4}| (注意最后的 | )

这样修改后,只是说明可以路由30000到39999的号码了,还需为这些号码增加号码文件。

 第二步

           复制1000.xml为30000.xml

           将30000.xml中所有的1000改为30000


   因为这种文件太多,可以使用一个小工具(FS_PhoneCode.exe)来生成需要的号码文件。

   生成后,复制这些文件到目录conf/directory/default

      7、为FreeSWITCH增加20000到29999共10000个会议号

  修改/usr/local/freeswitch/conf/dialplan/default.xml,找到name为 cdquality_stereo_conferences 的extension。

          它的首行为:。

    在这个extension下边增加一个新的extension。如下:

 

                       // 注意,@之前只有$1


说明:

            @之前只有$1,是为了把会议名简化成会议后,这样ESL的命令中就可以直接使用会议号,来识别或者控制会议。 

     8、为rtmp客户端增加路由

  修改/usr/local/freeswitch/conf/dialplan/default.xml,大约265行,找到name为Local_Extension的extension,

  然后在它的前边新建一个extension。强调一下,必须是前边。

 

     


        说明:

    因为来自与rtmp客户端的联系人是单独管理的,所以需要单独设置路由。

    只有设置了这个路由,其它客户端才能呼叫rtmp的客户端。

     9、修改视频会议分辨率

修改/usr/local/freeswitch/conf/autoload_configs/conference.conf.xml,大约257行

     

  修改为

     

        说明:

    这么改主要是考虑主机的负荷。

五、启动脚本

    为了让FreeSWITCH在主机启动时可以自动运行,需要创建自启动脚本。

    1、freeswitch.service文件

     在目录/usr/lib/systemd/system下创建文件freeswitch.service,内容如下:


      [Unit]

      Description=FreeSWITCH

      After=syslog.target network.target

      After=postgresql.service postgresql-9.3.service postgresql-9.4.service mysqld.service httpd.service

      [Service]

      User=root

      EnvironmentFile=-/etc/sysconfig/freeswitc

      WorkingDirectory=/usr/local/freeswitch

      ExecStart=/usr/local/freeswitch/bin/freeswitch -nc -nf $FREESWITCH_PARAMS 

      ExecReload=/usr/bin/kill -HUP $MAINPID

      [Install]

       WantedBy=multi-user.target

    2、freeswitch文件

      在目录/etc/sysconfig下创建文件freeswitch,内容如下:

       FREESWITCH_PARAMS=""

    3、修改文件夹属性

     cd /usr/local/

     chown -R root:root freeswitch

     chmod -R g+w freeswitch

    4、启动

     systemctl enable freeswitch.service

     systemctl start freeswitch.service

六、录制会议

   修改文件/usr/local/freeswitch/conf/autoload_configs/conference.conf.xml

   部分,最后添加两行

     

     

七、安装nginx

   客户端播放已录制的会议视频,需要借助nginx来实现,安装nginx命令如下:

      yum install nginx

   启动nginx命令如下:

      systemctl enable nginx.service

      systemctl start nginx.service

八、数字证书

   为了支持在浏览器中使用WebRTC,需要安全的连接。这样需要为FreeSWITCH制作、安装证书。证书的制作需要借助一个FreeSWITCH

   提供的工具,下载地址:wget http://files.freeswitch.org/downloads/ssl.ca-0.1.tar.gz

   1、制作根证书

    tar zxfv ssl.ca-0.1.tar.gz

    cd ssl.ca-0.1/

    perl -i -pe 's/md5/sha256/g' *.sh

    perl -i -pe 's/1024/4096/g' *.sh

    ./new-root-ca.sh

   2、制作服务器证书

     根证书制作完成后,就可以使用这个工具来制作服务器证书,并用这个根证书给服务器证书做签名了。

     以制作self.bkw.org的证书为例。

     1)生成证书

      ./new-server-cert.sh self.bkw.org

      根据提示输入,其中只有Common Name这一项是必须的,其它的可以随便填。

     2)签名

      ./sign-server-cert.sh self.bkw.org

     完成后,会生成三个文件,其中只有self.bkw.org.crt和self.bkw.org.key是有用的。

     3)生成pem文件

      FreeSWITCH需要pem格式的证书,所以需要进行格式转换

       cat self.bkw.org.crt self.bkw.org.key > ./wss.pem

       cat self.bkw.org.crt self.bkw.org.key > ./agent.pem

       cat ca.crt > ./cafile.pem

九、为FreeSWITCH安装证书

    把wss.pem、agent.pem、cafile.pem三个文件复制到文件夹:/usr/local/freeswitch/certs


   修改配置文件 /usr/local/freeswitch/conf/sip_profiles/internal.xml,把tls-cert-dir的value设置为/usr/local/freeswitch/certs,如下:


     

十、为nginx安装证书

   nginx启用https,也需要安装证书。因为nginx和FreeSWITCH在同一台主机,所以可以使用FreeSWITCH的证书。

   修改nginx的配置文件/etc/nginx/nginx.conf,找到如下部分,取消前边的#,以让配置生效。其中ssl_certificate和ssl_certificate_key需要指向

   FreeSWITCH的数字证书。

 # Settings for a TLS enabled server.

server {

        listen       443 ssl http2 default_server;

        listen       [::]:443 ssl http2 default_server;

        server_name  _;

        root         /usr/share/nginx/html;

        ssl_certificate     "/usr/local/freeswitch/certs/wss.pem";

        ssl_certificate_key "/usr/local/freeswitch/certs/wss.pem";

        ssl_session_cache shared:SSL:1m;

        ssl_session_timeout  10m;

#       ssl_ciphers HIGH:!aNULL:!MD5;

#       ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.

        include /etc/nginx/default.d/*.conf;

        location / {

        }

        error_page 404 /404.html;

            location = /40x.html {

        }

        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

        }

    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容