本节书摘来自华章计算机《 FreeSWITCH权威指南》一书中的第3章,第3.4节,作者:杜金房 张令考 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 FreeSWITCH用作软电话

也可以把FreeSWITCH简单地用作一个软电话(可以看作用FreeSWITCH做了一个X-Lite)。虽然相比而言,FreeSWITCH比配置X-Lite略微复杂一些,但你会从中得到更多好处:FreeSWITCH是开源的,更强大、灵活。关键是它是目前笔者所知道的唯一支持CELT高清通话的软电话。
FreeSWITCH使用mod_portaudio模块支持你本地的音频设备,该模块默认是不编译的。在你的源代码目录下执行如下命令,以安装该模块:

make mod_portaudio
make mod_portaudio-install

其他的模块也可以依照上面的方式进行重新编译和安装。安装完成后到控制台中执行:

freeswitch> load mod_portaudio

如果得到“Cannot find an input device”之类的错误,则可能是你的声卡驱动有问题。如果是提示“+OK”就是成功了。接着执行pa devlist命令,可以看到如下输出:

freeswitch> pa devlist

API CALL [pa(devlist)] output:
0;Built-in Microphone;2;0;
1;Built-in Speaker;0;2;r
2;Built-in Headphone;0;2;
3;Logitech USB Headset;0;2;o
4;Logitech USB Headset;1;0;i

以上是笔者的笔记本电脑上的输出,它列出了所有的声音设备。其中,3和4最后的“o”和“i”分别代表声音输出(out)和输入(in)设备。在你的电脑上可能不一样,如果你想选择其他设备,可以使用命令进行修改。例如下列命令可以选择使用笔者电脑上内置的麦克风和耳机:

freeswitch> pa indev #0
freeswitch> pa outdev #2

至此你就有了一个可以用命令行控制的软电话了。尝试输入以下命令:

freeswitch> pa looptest       (回路测试,echo)
freeswitch> pa call 9196      (呼叫9196)
freeswitch> pa call 1000      (呼叫1000)
freeswitch> pa hangup         (挂机)

如上所示,你可以呼叫刚才试过的所有号码。现在假设想从SIP分机1000呼叫到你,那么需要修改拨号计划(Dialplan)。用你喜欢的编辑器编辑以下文件并放到conf/dialplan/default/portaudio.xml中:

<include>
  <extension name="call me">
    <condition field="destination_number" expression="^(me|12345678)$">
      <action application="bridge" data="portaudio"/>
    </condition>
  </extension>
</include>

然后,在控制台中按F6或输入以下命令使之生效:

freeswitch> reloadxml

在分机1000上呼叫me或12345678(你肯定想为自己选择一个更酷的号码),然后在控制台上应该能看到类似[DEBUG] mod_portaudio.c:268 BRRRRING! BRRRRING! call 1的输出(如果看不到,按F8能得到详细的log),这说明你的软电话在振铃。多按几个回车,然后输入pa answer就可以接听电话了。输入pa hangup可以挂断电话。
当然,你肯定希望在振铃时能听到真正的振铃音而不是看什么BRRRRRING。好办,选择一个好听的声音文件(WAV格式),编辑conf/autoload_configs/portaudio.conf.xml,将ring-file一行修改为下面的样子,其中,value指定你的声音文件的路径:

<param name="ring-file" value="/home/your_name/your_ring_file.wav"/>

然后重新加载模块:

freeswitch> reloadxml
freeswitch> reload mod_portaudio

再打打试试,看是否能听到振铃音了?
如果你用不习惯字符界面,可以看一下FreeSWITCH-Air,它是使用Adobe Air开发的,为 FreeSWITCH 提供一个简洁的软电话的图形界面。另外,如果你需要高清通话,除需要设置相关的语音编解码器(codec)外,你还需要有一个好的耳机才能达到最好的效果。笔者使用的是一款Logitech的USB耳机。除此之外,还有两款基于FreeSWITCH的软电话,分别是FSComm(QT实现)和FSClient(C#实现)。