FreeSWITCH中文 FreeSWITCH参考手册
← 目录

mod_portaudio

mod_sofia模块类似,mod_portaudio也是一个Endpoint模块。与mod_sofia不同的是,mod_sofia实现了SIP,而mod_portaudio实现了驱动本地声卡,即,它可以从本地麦克风获取输入,并将声音从耳机/扬声器中播放出来。因而,配合mod_sofia,可以用作一个软电话。

该模块默认是不编译的。到你的源代码树下,执行如下命令编译安装:

make`mod_portaudio`
make`mod_portaudio`-install

然后到控制台中,执行:

freeswitch> load`mod_portaudio`

如果得到『Cannot find an input device』之类的错误可能是你的声卡驱动有问题。如果是提示『+OK』就是成功了,接着执行:

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

以上是在笔者Mac笔记本上的输出,它列出了所有的声音设备。其中,3和4最后的『o』和『i』分别代表声音输出(out)和输入(in)设备。在你的电脑上可能不一样,如果你想选择其他设备,可以使用命令:

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

以上命令会选择我电脑上内置的麦克风和耳机。

接下来你就可以有一个可以用命令行控制的软电话了,酷吧?

freeswitch> pa looptest    (回路测试,echo)
freeswitch> pa call 9999
freeswitch> pa call 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』或输入以下命令使之生效:

FS> 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,修改下面一行:

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

然后重新加载模块:

freeswitch> reloadxml
freeswitch> reload`mod_portaudio`

再打打试试,看是否能听到振铃音了?

如果你用不惯字符界面,可以看一下FreeSWITCH-Air1,它为 FreeSWITCH 提供一个简洁的软电话的图形界面。另外,如果你需要高清通话,除需要设置相关的语音编解码器(codec)外,你还需要有一幅好的耳机才能达到最好的效果。笔者使用的是一款USB耳机。

另外两款基于FreeSWITCH的软电话是 FSComm(QT实现) 和 FSClient(C#实现)。


  1. https://wiki.freeswitch.org/wiki/FsAir↩︎


本书版权所有 © 杜金房及各位贡献者 2016-2023,仅供在线阅读,谢绝一切形式转载。